Hallo!
Wir verwenden VisualScripting um parametrisierte und attribuierte Kleinteile zu generieren, die wir dann im Gebäudemodell an verschiedenen Stellen verlegen. Die Programmierung damit ist super schnell und auch für nicht-Programmierer leicht nachvollziehbar. Diese Kleinteile müssen jedoch austauschbar sein und das hat mit SmartParts bisher mit der Funktion "Makro/SmartPart tauschen" immer problemlos funktioniert. Bei PythonParts, die mit VisualScripting generiert werden, klappt das jedoch nicht ganz, weil wir keine Kontrolle darüber haben, wo der Basispunkt des fertig generierten Makro sich befindet.
Mal angenommen dass ich irgendwo im Modell einen Cylinder generieren will. Der Benutzer soll die Abmessungen und den Absetzpunkt definieren. Für die Definition des Basispunkts verwende ich den Node Point3DInput. Die Koordinaten übergebe ich an den Node Cylinder (sh. Bild #1). So generierter PythonPart befindet sich dann im Raum dort, wo sich der Benutzer das wünscht, hat aber sein Bezugspunkt bei 0,0,0 (sh. Bild #2). Das führt dazu, dass wenn er woanders im Raum ein zweites Cylinder mit gleichen Abmessungen absetzt, hat er dann auch den Basispunkt bei 0,0,0. Dadurch dass er sich aber woanders im Raum befindet, ist es ein anderes Objekt, der sein Basispunkt in Relation zu der Geometrie woanders hat. Würde man die beiden Zylinder jetzt gegeneinander austauschen, springt der eine auf die Stelle des anderen. So habe ich zwei Zylinder übereinander. Ist es möglich, diesen Basispunkt zu "überdefinieren"?
Auch der Min-Max-Box wird in den X-Y-Koordinaten richtig definiert, aber die Z-Koordinate immer auf 0 gesetzt. Hier wäre auch Wünschenswert, den Box anpassen zu können. Sonst lassen sich die so generierten PythonParts schlecht über Rechteck markieren. Vielleicht geht das mit einer funktion aus der AllplanPythonAPI? So könnte man sich selbst einen Node basteln (mit ExecPythonScript z.B.)
Noch besser wäre diese Lösung:
Bei PythonParts oder SmartParts wird zuerst die Geometrie generiert und "hängt" am Mauszeiger gleich nach dem Aufruf des Scripts. Sh. [EtcPath]\Examples\PythonParts\BasisExamples\MacroColumn.pyp. Ist es möglich, den gleichen Ablauf mit VisualScripting zu erreichen? Z.B. durch einen Node, der die Position und Ausrichtung (einer Art Placement Vektor) wiedergibt?