Support Forum

Pythonpart und 3DKörper [Gelöst]


Hello Liebe Allplaner;

Bitte ich hab die folgende Frage und zwar,

Ein Pythonpart kann als Pythonpart oder 3DKörper erzeugt werden, und meine Frage ist, was ist die Unterschied zwischen Pythonpart und 3DKörper?

Vielen dank.

Lösung anzeigen Lösung verbergen

Hallo,

ich versuche mal eine Erläuterung:

Wenn das Ergebnis der Ausführung eines Python-Scriptes ein 3D-Körper, oder eine Wand, oder ein anderes Element als ein Makro (PythonPart) ist, dann ist das Python-Script in der Regel als Eingabbe-Funktion (Interactor) gestartet worden.

Diese Art der Ausführung eines Python-Scripts erzeugt einmalig Elemente in der Zeichnungsdatenbank von Allplan.
Es ist eine Art Batch-Ausführung von Allplan-Funktionen zur Element-Erzeugung. Die Elemente sind danach unäbhängig, und "wissen nicht", daß sie von einem Script erzeugt wurden. "Fire-and-forget" ist ein schöner Ausdruck für ein solches Verhalten!

Nun will man natürlich nicht immer neue Elemente erzeugen, wenn sich nur ein Parameter ändert.

Das erreicht man, indem man die Elemente miteinander verknüpft, um diese vor jeder Script-Ausführung löschen zu können und danach neu zu erzeugen. Das sogenannte PythonPart "verknüpft" die Elemente, indem es sie in einen Container packt, genauer auf eine Folie in einem Makro. Außerdem werden die zur Erzeugung verwendeten Parameter mit an diesem Container gespeichert.
Dadurch entseht eine Modifizierbarkeit des PythonParts, wie man sie von allen anderen Elementen in Allplan kennt.

Grundsätzlich wäre auch eine andere "Verknüpfung" der vom Script erzeugten Element möglich, z.B. indem man diese in eine Elementgruppe packt, oder über ein bestimmtes Attribut "erkennbar" macht. Diese Art hat jedoch einen entscheidenden Nachteil:
Man kann mit Allplan-Funktionen sehr leicht die Elemente "am Script und damit an der Parametrik vorbei" ändern.

Bsp.: Man erzeugt im Script 3 gleiche Quader mit der Seitenlänge von jeweils 1.0 m.

Mit Allplan kann man diese Quader nun ändern, z.B. durch Punkt-Modifikation. D.h. die Quader erhalten andere Abmessungen oder sogar Lage. Soweit so gut.

Wenn man jedoch das ursprüngliche Script mit den gespeicherten Parametern erneut ausführt, das PythonPart also modifiziert, werden diese Änderungen jedoch zurückgesetzt, da die gespeicherten Parameter durch die Allplan-Funktionen nicht geändert wurden.
Das Script erzeugt also wieder gleiche Quader mit der Kantenlänge 1.0 m, und alle vorherigen Änderungen gehen verloren.

Das ist ein Problem, welches man in gescripteten Elementen nicht so einfach lösen kann.
Bei einer Wand funktioniert das noch: Wenn man die Wanddicke mit Punkt-Modifizieren ändert, wird diese Dicke beim "Einlesen" der Wand aus der Geometrie neu berechnet, und übernommen. Das geht aber nur, da es eine simple 1:1-Abhängigkeit zwischen geometrischer Quader-Dicke und Wanddicke gibt. Diese Abhängigkeit besteht bei gescripteten Element nicht bzw. nicht immer.

Hallo,

ich versuche mal eine Erläuterung:

Wenn das Ergebnis der Ausführung eines Python-Scriptes ein 3D-Körper, oder eine Wand, oder ein anderes Element als ein Makro (PythonPart) ist, dann ist das Python-Script in der Regel als Eingabbe-Funktion (Interactor) gestartet worden.

Diese Art der Ausführung eines Python-Scripts erzeugt einmalig Elemente in der Zeichnungsdatenbank von Allplan.
Es ist eine Art Batch-Ausführung von Allplan-Funktionen zur Element-Erzeugung. Die Elemente sind danach unäbhängig, und "wissen nicht", daß sie von einem Script erzeugt wurden. "Fire-and-forget" ist ein schöner Ausdruck für ein solches Verhalten!

Nun will man natürlich nicht immer neue Elemente erzeugen, wenn sich nur ein Parameter ändert.

Das erreicht man, indem man die Elemente miteinander verknüpft, um diese vor jeder Script-Ausführung löschen zu können und danach neu zu erzeugen. Das sogenannte PythonPart "verknüpft" die Elemente, indem es sie in einen Container packt, genauer auf eine Folie in einem Makro. Außerdem werden die zur Erzeugung verwendeten Parameter mit an diesem Container gespeichert.
Dadurch entseht eine Modifizierbarkeit des PythonParts, wie man sie von allen anderen Elementen in Allplan kennt.

Grundsätzlich wäre auch eine andere "Verknüpfung" der vom Script erzeugten Element möglich, z.B. indem man diese in eine Elementgruppe packt, oder über ein bestimmtes Attribut "erkennbar" macht. Diese Art hat jedoch einen entscheidenden Nachteil:
Man kann mit Allplan-Funktionen sehr leicht die Elemente "am Script und damit an der Parametrik vorbei" ändern.

Bsp.: Man erzeugt im Script 3 gleiche Quader mit der Seitenlänge von jeweils 1.0 m.

Mit Allplan kann man diese Quader nun ändern, z.B. durch Punkt-Modifikation. D.h. die Quader erhalten andere Abmessungen oder sogar Lage. Soweit so gut.

Wenn man jedoch das ursprüngliche Script mit den gespeicherten Parametern erneut ausführt, das PythonPart also modifiziert, werden diese Änderungen jedoch zurückgesetzt, da die gespeicherten Parameter durch die Allplan-Funktionen nicht geändert wurden.
Das Script erzeugt also wieder gleiche Quader mit der Kantenlänge 1.0 m, und alle vorherigen Änderungen gehen verloren.

Das ist ein Problem, welches man in gescripteten Elementen nicht so einfach lösen kann.
Bei einer Wand funktioniert das noch: Wenn man die Wanddicke mit Punkt-Modifizieren ändert, wird diese Dicke beim "Einlesen" der Wand aus der Geometrie neu berechnet, und übernommen. Das geht aber nur, da es eine simple 1:1-Abhängigkeit zwischen geometrischer Quader-Dicke und Wanddicke gibt. Diese Abhängigkeit besteht bei gescripteten Element nicht bzw. nicht immer.