Hallo zusammen,
bei der Umsetzung eines Python Parts (PP) mit Interactor bin ich auf ein für mich unerklärliches Phänomen gestoßen. Vielleicht könnt ihr mit helfen bzw. könnt mir erklären was im Hintergrund passiert.
Ausgangslage ist ein PP mit Interactor. Ich habe Testweise mal einfach das PP SelectObjectsWith3DGeometry aus den von Allplan mitgelieferten PParts gewählt (Ordner: …\Etc\Examples\PythonParts\ModelObjectExamples\SelectionExamples). Mit dem PP kann man 3D-Elemente auswählen. Diese werden dann in einer Liste in der PP-Palette angezeigt.
In meiner Testumgebung habe ich mir zwei Bauteile modelliert und an beide Bauteile die Attribute Kurztext und Langtext angehängt. Zusätzlich habe ich mir zwei benutzerdefinierte Formelattribute erstellt (siehe Bild 1). Das Python-Formelattribut aus Bild 1 greift auf eine Funktion aus der Datei functions.py (Ordner: …\Std\Scripts) zu. Die Funktion habe ich (Python)-identisch zum "Allplan"-Formelattribut umgesetzt (siehe Bild 2). Danach jeweils ein Formelattribut an eine der Stützen angehängt.
Anschließen habe ich beide Bauteile einmal mit dem o.g. PP ausgewählt.
Wenn man jetzt das Bauteil mit dem Python-Formelattribut aufruft und dabei die Eigenschaften-Palette auf hat wird das PP Script SelectObjectsWith3DGeometry 2x ausgeführt/geladen (siehe Bild 3). Bei einem Element nicht schlimm aber bei 10 Elementen -> 20x Load SelectObjectsWith3DGeometry.py (sehr schlechte Performance). Dies gilt dann auch wenn man das Bauteil nur kopiert also nicht mit dem Interactor des PP anrührt. Wenn man Allplan schließt und neu öffnet ist erstmal der Spuck vorbei, aber sobald man das PP wieder aufruft, fängt das Spiel von vorne an.
Wenn man eines der Attribute (Kurztext oder Langtext) modifiziert wird das PP ebenfalls geladen.
Verwendet man das o.g. Python-Formelattribut in einer Formel-Zelle einer Legende und verwendet ebenfalls eine Funktion aus functions.py kommt die Meldung das Python nicht gestartet werden konnte (siehe Bild 4).
Kann man dieses aufrufen bzw. das laden des PythonPart – Skiptes beim auswählen der Bauteile verhindern werden? Und vor allem, wo ist da die Verbindung zwischen einem PythonPart und einem Python-Formelattribut, welche auf die functions.py – Datei zurückgreift?
Als Workaround werde ich jetzt erstmal versuchen auf Python-Formelattribute an Bauteilen zu verzichten. Aber gut wäre es schon wenn es hierzu eine Lösung gäbe…
Version: Allplan 2024
PS: Die <ReadLastInput>False</ReadLastInput> Zeile in der .pyp Datei des PP habe ich testweise auf False gestellt . Hat leider nichts geändert, dies speichert auch nur die Benutzereingaben die in der Palette gemacht werden oder?