Support Forum

[Frage] Handles relativ zu beliebiger Ebene/Achsen

Schlagworte:
  • Pythonpart
  • Handles
  • PLANE_DIR
  • VECTOR_DIR
  • Ebene
  • Polyline2D

Hallo

ich arbeite an einem Pythonpart mit einer 2D Polylinie als Parameter.
Die 2D-Polylinie wird auf eine 3D-Ebene (definiert durch zwei 3D-Vektoren) gelegt. Vektor1 entspricht der lokale X-Achse und Vektor2 der lokalen Y-Achse.

Ich möchte die einzelnen Punkte der 2D-Polylinie mit Hilfe von Griffen verschieben. Leider ist mir das nicht gelungen. Ich habe auch keine entsprechenden Beispiele gefunden.

Ich bekomme es nicht hin, dass die Handles auf der "Ebene bleiben" und korrekte 2D-Koordinaten liefern. Meine Versuche mit HandleDirection.PLANE_DIR oder HandleDirection.VECTOR_DIR haben nicht funktioniert.

Hat jemand ein Beispiel oder einen Tipp?

Gruss und Dank
Hansruedi

Was genau ist beabsichtigt? Ein bißchen mehr Infos oder auch Codeschnipsel wären hilfreich!

HandleDirection.PLANE_DIR funktioniert nur immer für den aktuellen Handle.
D.h. die Ebene, die man angeben kann, gilt immer nur für den aktuellen Handle, und
der Handle-Punkt muss zudem in der angegeben Ebene liegen. Wenn die Ebenennormale senkrecht zur aktuellen
Blickrichtung liegt, wird zudem die Ebene beim Verschieben des Handles nicht berücksichtigt.

Ich denke, man muss die "Projektion" der 2D-Punkte (Polylinie) in den Raum im Script selbst lösen.

Um die Handles in der X-Y-Ebene zu "halten", braucht man doch nur den Z-Wert der Koordinaten auf 0.00 setzen. Entweder macht man das in der python-funktion

def move_handle(build_ele, handle_prop, input_pnt, doc):

oder danach vor der "Projektion" auf die 3D-Ebene.

Hallo

vielen Dank für die Antwort. Der Tipp mit der Funktion "move_handle" brachte mich weiter.

Ich habe versucht innerhalb der Funktion "move_handle" die berechneten 2D-Koordianten der Polylinie in der Palette zuzuweisen.
Diese werden jedoch nicht übernommen. Die Zuweisung der 2D-Koordinaten an den input_pnt mit anschliessendem HandlePropertiesService.update_property_value() funktioniert. Jedoch nur bei 3D-Polylinien. Bei 2D-Polylinien erhalte ich einen Fehler, da versucht wird einen 3D-Punkt der 2D-Polylinie zu übergeben.

Wie ist es Möglich eine 2D-Polylinie in der Palette zu verwenden?
Oder kann man die Z-Werte in der Palette verbergen? <Visible>|polyline3d.Points.Z:False</Visible> funktioniert leider nicht.

Gruss und Dank
Hansruedi

Anhänge (1)

Typ: application/zip
282-mal heruntergeladen
Größe: 2,77 KiB

Ein Polylinie2D hat 2D-Punkte! Damit wird man kaum einen Punkt im 3D-Raum abbilden können.
Die Griffe solle ja bei Dir "inplace" die Polylinie im Raum (transformiert auf die Ebene) darstellen.
Dazu braucht man leider 3D-Punkte!

Anders wäre es, wenn Du die Polyline2D (im Grundriss in der X-Y-Ebene) mit Griffen ausstatten würdes, und
die Transformation in den Raum auf die geneigte Ebene komplett im Script machst. Dafür würde eine Polylinie2D funktionieren....