"Respekt wer's selber macht!" würde man bei Obi sagen :-)
Tolle Nummer, das ist!
Zu Deinen Fragen:
1. Nachbau in Python
Ich fürchte, die Zeilen Script werden in Python nicht weniger sein!
Man vergisst leicht, das beim Aufruf jeder einzelnen Funktion im SmartPart-Script hunderte Zeilen C++-Code mit
Validierung, Fallunterscheidung und den Basis-API-Aufrufen ausgeführt werden.
Mit der Python-API bekommt man lediglich die nativen Basis-API-Funktionen nach Python gewrappt.
Beispiel:
Die einfachste Funktion BOX durchläuft beim Ausführen ca. 450 Zeilen C++-Code!
Darin sind Fallunterscheidung für negative oder Null-Abmessungen, der gesamte Transformation-Stack und das
Cutting sowie Gruppen-Bildung enthalten. Schliesslich muss man aus dem Ergebnis-Polyhedron noch einen ModelElement mit
Stift, Strich, Farbe Layer und Oberfläche erzeugen.
Das ganze muss man logischerweise im Python auch machen. Aber dort gibt es keine Funktion BOX!
Die müsste man sich erst mal schreiben, und dann noch die Transformationen implementieren!
Ich glaube nicht, das man dabei mit weniger Code auskommt.
Bei der GUI bekommt man dann noch weitere Probleme.
Die Palette des SmartParts ist komplett gescripted, bei PythonParts wird lediglich eine XML statisch interpretiert!
Eine GUI mit Aktions- und Zustands-Steuerungen wie beim SmartPart-Fenster sind mit Python-Parts gar nicht möglich!
Man sollte auch bedenken, dass Python 20-100 mal langsamer ist als C++!
Und: Ein PythonPart lässt sich nicht in eine Öffnung einsetzen, und reagiert nicht auf die Größen- und Formänderung der Öffnung!
Das alles lädt nicht gerade ein zu einem Versuch "PythonPart-Fenster".
Aber bitte, wer's ausprobieren möchte. Besonders viel Spass hat man auch mit der ausführlichen PythonParts-Dokumentation!
2. Zugriff auf Makros
Zitat "In Pythonparts kann man auf Makros zugreifen.." Wie ist das gemeint? Ein anderes Makro aus der Datenbank einlesen?
Soviel ich weiss, kann man das aus einem PythonPart heraus nicht!
Mit einer benutzdefinierten Eingabefunktion kann man sicher mit Python irgendwelche Objekte aus der Datenbank lesen,
aber was will man damit anfangen? Es gibt tatsächlich einen ElementsSelectService, der alle Elemente der Datenbank liest.
Aber es fehlen Wrapper für all die anderen Objekt-Typen wie Stützen, Decke, Räume usw.
In Visual-Script gibt es immerhin einen Wand-Node! (Aber ein Fenster würde ich jetzt nicht in Visual-Scripting versuchen!)
Aber ich geb Dir Recht, für ein Fenster-Element könnte es durchaus interessant sein, zu erfahren, welche anderen Makros noch in der Öffnung eingebaut sind. Dazu braucht es Funktionen, um aus dem Fenster in die Öffnung zu kommen, um von da aus auf alle untergeordneten Elemente zuzugreifen. Aber um eine Abhängigkeit zu generieren, muss man ja das andere Element komplett kennen, und den betreffenden Parameter auslesen können. Beispiel: Aufsatzrolladen - Die höhe des Kastens muss man erst mal aus dem Element herauslesen, bevor man das Fenster in der Höhe um diesen Wert reduzieren kann! Das Element könnte ein SmartPart sein, oder ein PythonPart oder ein Visual-Script oder auch ein gutes altes selbst definiertes Makro! Wie soll man an den betreffenden Parameter herankommen, wenn es dafür keine Schnittstelle gibt?
Man sieht, das Abhängigkeiten und Wechselwirkungen in einer Script-Umgebung gar nicht so einfach zu handeln sind!
Für SmartParts glaube ich nicht (mehr), das so etwas eingebaut wird!
Da hat sich ja in den letzten Jahren nich so viel getan...