Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

[Frage] Visual Scripting: Modifizierungen an PythonParts [Gelöst]

Schlagworte:
  • Visual scripting
  • Modification

Hallo zusammen,

in der Node-Bibliothek finden sich auch Nodes, mit deren Hilfe man PythonParts modifizieren (Attribute, Oberfläche, Schraffur, Format,...) kann (siehe Bild 1). Die Input-Ports dieser Nodes erfordern allerdings die Eingabe von ModelObjects bzw. als list($ModelObject).
In Bild 2 habe ich einen Sweep mit dem Node <Format> verknüpft, um ihm Eigenschaften zuzuweisen. Dies gelingt allerdings nicht mit dem Node <Assign Surface>.

Frage 1: Was ist mit ModelObjects gemeint und welche Arten von Nodes kann ich damit verknüpfen?

Nach dem Erstellen von PythonParts mit zugewiesener Oberfläche über das Node <Format> wird die Oberfläche nicht dargestellt (siehe Bild 3). Dies gelingt erst nach Auflösen als Makro und Zuweisung über <Freie Oberflächen an 3D-,Ar-Elemente zuweisen>.
Frage 2: Woran könnte das liegen und wie kann ich dieses Problem beheben?

Vielen Dank

Marco

Anhänge (3)

Typ: image/jpeg
58-mal heruntergeladen
Größe: 30,46 KiB
Typ: image/jpeg
51-mal heruntergeladen
Größe: 45,06 KiB
Typ: image/jpeg
52-mal heruntergeladen
Größe: 51,94 KiB

Lösung anzeigen Lösung verbergen

Hallo Marco,

Datentyp {$ModelObject}:
{$ModelObject} ist einen Datentyp, der auf vorhandenen ALLPLAN Objekten referenziert. D.h. Änderungen auf {$ModelObject} werden direkt auf den referenzierten ALLPLAN Objekten angewendet. Kein PythonPart-Objekt wird dann erstellt. In der Bibliothek befinden sich z.B. zwei Nodes SelectGeometryObject und SelectObjectsByAreaInput. Bei Starten lassen sich beiden Node Object von ALLPLAN einlesen. Der unterschied ist:

  • Node "SelectGeometryObject" übergibt den Wert von ausgewählten ALLPLAN Objekten an VS weiter.
  • Node "SelectObjectByAreaInput" erstellt eine Referenzierung auf die existierenden ALLPLAN Objekten.

Oberfläche Node Format:
Manchmal muss man das PythonPart-Objekt nochmal öffnen und anschließend direkt schließen, um die Oberfläche richtig darzustellen... Es ist aber ein Bug.

VG
Xinling

Product Owner API, Allplan GmbH

Anhänge (2)

Typ: image/png
78-mal heruntergeladen
Größe: 27,26 KiB
Typ: image/gif
66-mal heruntergeladen
Größe: 1,90 MiB

Hallo Marco,

Datentyp {$ModelObject}:
{$ModelObject} ist einen Datentyp, der auf vorhandenen ALLPLAN Objekten referenziert. D.h. Änderungen auf {$ModelObject} werden direkt auf den referenzierten ALLPLAN Objekten angewendet. Kein PythonPart-Objekt wird dann erstellt. In der Bibliothek befinden sich z.B. zwei Nodes SelectGeometryObject und SelectObjectsByAreaInput. Bei Starten lassen sich beiden Node Object von ALLPLAN einlesen. Der unterschied ist:

  • Node "SelectGeometryObject" übergibt den Wert von ausgewählten ALLPLAN Objekten an VS weiter.
  • Node "SelectObjectByAreaInput" erstellt eine Referenzierung auf die existierenden ALLPLAN Objekten.

Oberfläche Node Format:
Manchmal muss man das PythonPart-Objekt nochmal öffnen und anschließend direkt schließen, um die Oberfläche richtig darzustellen... Es ist aber ein Bug.

VG
Xinling

Product Owner API, Allplan GmbH

Anhänge (2)

Typ: image/png
78-mal heruntergeladen
Größe: 27,26 KiB
Typ: image/gif
66-mal heruntergeladen
Größe: 1,90 MiB

Ich würde gern noch eine Frage anhängen:
Heißt dies konkret, dass man keine Attribute im gleichen Script zuweisen kann in dem die PythonParts generiert werden ?
Da ich ja erst Modelobjekte selektieren und diesen dann Attribute zuweisen kann muss ich also ein getrenntes "AttributZuweisungsScript" erstellen?
Was verstehe ich falsch?

Mit VS können Sie momentan nur benutzerdefinierte Attribute mit der Node "SetValueToAttribute" dem erstellten PythonPart-Objekt zuweisen. Was PythonPart momentan noch nicht kann, ist Attribute innerhalb eines PythonPart-Objekts zuzuweisen.

Mehr info ist in der Antwort in diesem Post zu finden.

Product Owner API, Allplan GmbH

Da bestehen gleich mehrere Probleme mit dieser Herangehensweise:
- Ich kann mit dem Node SetValueToAttribute nicht steuern, an welches Objekt(wenn ich mehrere Objekte im PythonPart modelliere) meine definierten Attribute vergebe
- Ich muss also den Namen und den Datentypen richtig schreiben/wählen, wenn ich ein Attribut vergeben, welches ich vorher bereits im Projekt definierte -> Heißt das wenn ich den Namen falsch schreibe, wird dann ein neues Attribut definiert (BSP.: Baustoff falsch geschrieben "Baustof" = neues Attribut in meiner AttributeDefinition.xml ?)

Vorschlag: Ich kann ja bereits mit dem Node AttributeValuePalette über IntegerInput auf meine Attribute aus der AttributeDefinition laden (Anhang_1 und Anhang_2)zugreifen, ist dies nicht auch auf den Node SetValuetoAttribute anwendbar ? So kann man sicher gehen, dass die richtigen Attribute geladen werden..
Und bitte dem Node SetValuetoAttribute eine Möglichkeit der Elementzuweisung geben und diesen bitte so allgemeinhalten (nicht ModelObjects), sodass dies auch im gleichen Skript möglich ist Attribute an beispielsweise Objekte aus einem Fahrweeg-Sweep zu heften

Anhänge (2)

Typ: image/png
64-mal heruntergeladen
Größe: 11,77 KiB
Typ: image/png
33-mal heruntergeladen
Größe: 3,36 KiB

Danke für den Feedback!

Zitiert von: Badu_LABI
Ich kann mit dem Node SetValueToAttribute nicht steuern, an welches Objekt(wenn ich mehrere Objekte im PythonPart modelliere) meine definierten Attribute vergebe

Momentan ist es nicht möglich an einzelne Objekt im PythonPart eine Attribute zu vergeben. Aber wir arbeiten schon daran.

Zitiert von: Badu_LABI
Ich muss also den Namen und den Datentypen richtig schreiben/wählen, wenn ich ein Attribut vergeben, welches ich vorher bereits im Projekt definierte -> Heißt das wenn ich den Namen falsch schreibe, wird dann ein neues Attribut definiert (BSP.: Baustoff falsch geschrieben "Baustof" = neues Attribut in meiner AttributeDefinition.xml ?)

Es funktioniert zur Zeit wie Sie geschrieben haben. Da die Idee war, dass mit dem Node User einige Attribute auch direkt in VS erzeugen kann. Aber die Möglichkeit mit Attribute-ID werden wir auch ergänzen.

Product Owner API, Allplan GmbH