Angle-Handle: Schnipsel aus Column_Geo_Body.py (leider ohne Erläuterung der Bedeutung der Ref-Punkte)
# handle: rotation-gamma
handle_column_gamma = HandleProperties("Handle_rot",
AllplanGeo.Point3D(ref_point_handel_x, ref_point_handel_y, ref_point_handel_z),
AllplanGeo.Point3D(ref_point_handel_x_dir,ref_point_handel_y_dir, ref_point_handel_z_dir),
[("Angle_z", HandleDirection.angle)],
HandleDirection.angle)
@Allplan
Hier fehlt wieder mal eine vollständige Dokumentation bzw. ein Beispiel!
Alles um X-Achse drehen:
Im SmartPArt gibt es einen Transformations-Stack, der mit TRANS-,ROT- oder SCALE-Befehlen additiv befüllt wird,
sozusagen ein 3D-Cursor. Jedes generiert Objekt wird an der Stelle des Cursors mit dessen Drehung eingefügt.
Letztlich ist es nur eine Transformation mit einer Matrix! Aber Obacht:
Spiegeln ist eine nichtaffine Transformation, die den Richtungssinn umkehrt. Danach muss man also z.B. ein Polyhedron "umdrehen", sonst zeigen die Innenseiten nach aussen! Das macht der Transformations-Stack des SmartParts alles im Hintergrund!
Wenn man so etwas Tolles im Pythonpart haben will, muss man sich das "zu Fuss" bauen. Einfach eine Matrix3D definieren, die Rotationen, Translationen und Skalierungen hinzufügen, und dann jedes Element mit dieser Matrix multiplizieren. Und den Sonderfall "Spiegelung" behandeln. Leider gibt es keine in den PythonParts keine Funktion, mit der man die richtungsändernde Eigenschaft einer Matrix3D feststellen kann.