Bezugspunkt im Fertigen PythonPart anpassen [Gelöst]

Schlagworte:
  • VisualScripting
  • Makro
  • [AIDP-165441]
  • [AIDP-163892]

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?

Anhänge (2)

Typ: image/png
100-mal heruntergeladen
Größe: 45,88 KiB
Typ: image/png
59-mal heruntergeladen
Größe: 26,12 KiB

Lösung anzeigen Lösung verbergen

Hallo,

leider konnten wir aus Zeitgründen die komplette Programmierung der benötigten Funktionalität zur Version 2022-1 nicht durchführen. Zum Testen, ob die von uns angestrebte Lösung für Dich passend ist, kannst Du folgende Tags in die pyp-Datei einbauen:

<Script>
<Name>NodeScript.py</Name>
<Title>NodeScript</Title>
<Version>1.3</Version>
<Interactor>True</Interactor>
<ReadLastInput>True</ReadLastInput>
<VSPlacementPointInput>True</VSPlacementPointInput>
<VSMultiPlacement>True</VSMultiPlacement>

<SubElements>Bohrpfahlbewehrung.pyp</SubElements>
</Script>

VSPlacementPointInput: mit True kann das erzeugte Objekt frei platziert werden
VSMultiPlacement: die Platzierung kann mehrfach durchgeführt werden.

Bisher können diese Werte noch nicht im VisualEditor gesetzt werden, und sie gehen auch beim nächsten Abspeichern des Skripts wieder verloren. Unsere Idee ist, dass wir das Setzen dieser Werte im VisualEditor über Checkboxen zugänglich machen.

Viele Grüße
Horst

1 - 10 (14)

Wir würden gerne auch unsere Kleinteile mal mit VS scripten uns fehlt aber mal ein praxistaugliches Einbauteil, um uns das mal zu verinnerlichen. Kannst du mal ein Beispiel von euch hier posten?
Zur Zeit machen wir das alles noch mit smartparts….

Mit besten Grüßen!
Jürgen

Allplan Ingenieurbau V10 bis V2025

Hallo,

wie beschrieben, fehlt in VS bisher die Möglichkeit, die durch das Skript erzeugte Geometrie frei zu platzieren.

Wir werden die benötigte Funktionalität zur Version Allplan 2022-1 implementieren.

Viele Grüße
Horst

Zitiert von: Allplan_er
Wir würden gerne auch unsere Kleinteile mal mit VS scripten uns fehlt aber mal ein praxistaugliches Einbauteil, um uns das mal zu verinnerlichen. Kannst du mal ein Beispiel von euch hier posten?

Zur Zeit machen wir das alles noch mit smartparts….

Ich könnte dir was schicken, aber ich weiß nicht ob dir das hilft. Wir erstellen zum Teil sehr einfache Geometrien - der Zylinder in meinem ersten Beitrag ist ein gutes Beispiel. Was aus diesem Zylinder einen realen (Ein-)Bauteil macht, sind die Attribute. Und diese Vergeben wir mit einem Node, den wir selbst entwickelt haben. Meine PythonParts würden deshalb bei dir nicht funktionieren, weil du diesen Node nicht hast. Wenn du mir deine Ziele zumindest grob beschreiben könntest oder was für Teile erstellt ihr mit SmartParts, dann könnte ich vielleicht helfen.

Ein Feedback an an der Stelle zu Allplan-Entwickler, warum wir den mitgelieferten Node zum Vergabe von Attributen (SetValueToAttribute) nicht verwenden:

  • er kann nur Benutzerdefinierte Attribute vergeben, Allplan-Standardattribute (wie Länge) sind außer seiner Reichweite
  • er sucht nach dem Attributname, was aber kein einzigartiger Eintrag ist. Man kann ohne Probleme zwei Benutzerattribute mit dem gleichen Namen definieren. Einzigartig ist hingegen der Attributnummer oder gar GUID. In unserem Node suchen wir nach Nummer
  • er erstellt ein Attribut, wenn der nicht vorhanden ist - uns stört es z.B. weil wir dadurch weniger Kontrolle haben, was für Attribute definiert sind

Hallo,
wie beschrieben, fehlt in VS bisher die Möglichkeit, die durch das Skript erzeugte Geometrie frei zu platzieren.
Wir werden die benötigte Funktionalität zur Version Allplan 2022-1 implementieren.
Viele Grüße
Horst

Das ist sehr gut zu hören. Wir sind gespannt!

So ganz verstehe ich die Problematik nicht im Kontext von dem, was du machen willst.
So wie du vom Prinzip jetzt vorgehst (nämlich was picken im geöffneten PP), hast du vom Ergebnis genau die gleiche Problematik in einem "programmierten" PP wie jetzt, auch wenn das erst mal am Mousezeiger hängt.

Im Endeffekt redest du von der Placementmatrix des PP.
Lass doch den Point3DInput weg und lass es auf 0,0,0 absetzen. Und dann verschiebst oder kopierst du das PP an die richtige Stelle mit Modellbereich. Ist doch vom Workflow genau das gleiche. Ob du den Absetzpunkt pickst während das Ding offen ist oder nachdem es abgesetzt wurde, ist doch vom Aufwand egal.

Ja, ich rede jetzt von einer Placementmatrix. Ich war mir nicht sicher, deshalb habe ich den Begriff nicht verwendet.

Die Arbeitsweise mit Point3DInput wegzulassen, alles auf 0,0,0 zu erzeugen um es dann später an die richtige Stelle zu verschieben und/oder drehen würde mein Problem lösen. Gleichzeitig generiere ich dann ein anderes, viel größeres Problem: wie erkläre ich den Mitarbeiter in meinem Unternehmen, die Jahrelang mit SmartParts gearbeitet haben, dass sie ab jetzt das, was sie früher in einem Schritt gemacht haben, in zwei Schritten machen müssen? Wie verkaufe ich in meinen Kollegen und der Geschäftsführung das VisualScripting als eine moderne, zukunftsfähige Technik, um den Planungsprozess zu beschleunigen, wenn sie vom Anfang an Mehraufwand bei der Anwendung generiert? Es muss vor Allem für die Mitarbeiter leicht und intuitiv sein, ansonsten wird es nicht akzeptiert und nicht angewendet. Und wenn das "hängen am Mauszeiger" mit PythonParts und SmartParts geht, dann soll es auch mit VisualScripting funktionieren.

Oder verlange ich hier zu viel? Vielleicht bin ich der Einzelgänger in der Thematik.

Der Hinweis war nur als Tipp gedacht, bis die Sache mit dem Update "gelöst" wird. Ich gehe aber mal davon aus, dass du mit dem Update den PointInput dann gar nicht brauchst.
Eine Geometrie/Punkt picken über einen Input und das Placement des PPs sind nicht das gleiche (am einfachsten zu verstehen ist es wohl, wenn du dir vorstellest es wären mehrere Punkte, die du in einem PP pickst/filters/was auch immer, um was abzusetzen, nicht nur ein Punkt und ein Cylinder.)

"Wie erkläre ich meinen Mitarbeitern..."

Nunja...Die ganze Geschichte hier ist gerade mal 2 Zyklen aus dem technischen Preview raus, während das andere ein System ist, das über viele Jahre ausgereift und ausgebaut wurde.
Man muss sowas hinsichtlich Potential sehen. Die SmartParts sind "am Ende", die Pythonparts/VS sind "am Anfang".

Wer früh auf ein System aufspringt und sich früh Kompetenzen erarbeitet, wird nun mal von gewissen Wachstumsschmerzen nicht ganz verschont.
Wer das nicht mag oder nicht verkaufen kann, muss beim alten bleiben und 4 5 Jahre warten. Meine Meinung.

Achso, also das war eher als Zwischenlösung gedacht. So würde es Sinn machen.

Das mit dem Poind3DInput ist jetzt auch nur eine Zwischenlösung. Idealerweise beginnt man die Generierung einer 3D-Geometrie mit einem Placementmatrix, die einen Ursprungspunkt und Ausrichtungswektor(en) beinhaltet. Auf diesem Ursprung - einer Art lokaler (0,0,0)-Punkt - baut man dann alles auf. Ob das über einen Node gelöst wird, der ohne Input-Werte einfach die Placementmatrix wiedergibt, ober ob es ganz ohne Node funktioniert, ist zweitrangig. Hoffentlich ist einer davon das, was Horst in seiner Antwort meint.

Wer früh auf ein System aufspringt und sich früh Kompetenzen erarbeitet, wird nun mal von gewissen Wachstumsschmerzen nicht ganz verschont.
Wer das nicht mag oder nicht verkaufen kann, muss beim alten bleiben und 4 5 Jahre warten. Meine Meinung.

Vollkommen richtig. Aber wir wollen eben nicht 4-5 Jahre warten, sondern den Prozess etwas beschleunigen. Deshalb kommunizieren wir auch hier unsere Wachstumsschmerzen mit der Hoffnung, dass sie von Allplan-Entwickler gemerkt und verbessert werden.

Ja, so habe ich ihn verstanden.
In einem geschriebenen PP kann man auch die Placementmatrix rumschieben, d.h selbst wenn man über den Input einer anderen Geometrie geht und sich einen Offset reinholt, kann man die Matrix richtig schieben.
Von daher würde ich mal davon ausgehen, dass irgendwas in die Richtung kommt im Zwischenupdate, in welcher Form auch immer.

Zitiert von: Horst_Hohmann
Hallo,
wie beschrieben, fehlt in VS bisher die Möglichkeit, die durch das Skript erzeugte Geometrie frei zu platzieren.
Wir werden die benötigte Funktionalität zur Version Allplan 2022-1 implementieren.
Viele Grüße

Horst

Die Version 2022-1-0 ist veröffentlicht. Ich habe gesucht, wie man eine Geometrie frei im Modell platzieren kann, jedoch vergeblich. Weißt hier jemand, welchen Node man dazu benutzt oder gibt es dieser noch nicht in 2022-1-0?

1 - 10 (14)