Hallo!
Ich wollte fragen ob es möglich ist mit der PythonParts API den Wert des Attributes 572 abzufragen.
Wir haben ein SmartSymbol in C++ gemacht un die informationen uber den SmartSymbol ist in diesen Attribut gespeichert. Wir möchten, falls möglich, diesen wert mit einen PythonPart lesen und weiter verarbeiten.
Veieln dank in Vorraus
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!
- Forum
- CAD Parametrische Modellierung
- PythonParts
Attribut 572
..warum sollte das nicht gehen?
Der passende Python-Wrapper zum Attribut 572 ist AttributeByteVec.
Das größere Problem wird sein, die SmartSymbols aus der Datenbank zu lesen.
Das wird nur mit einem Interactor gehen, der wiederum nicht in einem editierbaren PythonPart drin sein kann (soviel ich weiss).
Ich würde das mit Visual-Scripting versuchen.
Da gibt es solche Queries und auch die passenden Attribut-Nodes.
Das ByteVectorAttribute könnte aber dort fehlen :-(
Vielleicht mache ich etwas falsch, dass ist mein Code:
def get_attributes(self, build_ele, doc): for element in AllplanBaseElements.ElementsSelectService.SelectAllElements(doc): if element == AllplanElementAdapter.SmartSymbol_TypeUUID: attributes = AllplanBaseElements.ElementsAttributeService.GetAttributes(element) print("\n".join(str(x[0]) for x in attributes))
Da werden alle andere atribute angezeigt die wir in C++ setzen, auser dem 572.
1. Fehler-Möglichkeit:
AllplanBaseElements.ElementsAttributeService.GetAttributes() könnte AttributeByteVec's ignorieren, da dieses kein
Benutzer-Attribut ist, und auch nicht sichtbar bzw. bearbeitbar ist!
2. Fehler-Möglichkeit:
Die Konvertierung in eine String mit str(attrib) könnte für ein AttributeByteVec nicht definiert sein!
Warum muss es denn unbedingt ein BLOB-Attribut sein? Was sind das denn für Daten?
In ein Stringvector-Attribut passen die nicht rein?
Es ist eine serializierte Struct für die configuration.
Ich kann auch ein String Attribut benutzen, aber es wäre schön dass der Benutzer die Attribute nicht sieht.
Ebenfalls wollte ich fragen wo ich die liste mit all den Attributen nummern und Typen finden kann.
Für die Liste der Standard-Attribute gibt es 2 Möglichkeiten:
1. Die Datei
C:\ProgramData\Nemetschek\Allplan\2021\Etc\xml\AttributeDefinitionCollectionAllplan_de.xml
mit Excel öffnen. Dann bekommt man eine schöne Excel-Liste, in der man nach dem DataType filtern kann.
2. Die Anwendung
D:\Allplan2021\Prg\AttributManager.exe
starten. Dort sieht man ebenfalls den Datentyp, und ob ein Attribut sichtbar und änderbar ist.
Für in einen String serialisierte Daten (z.B. XML) bietet sich das Attribut 611 vom Typ StringVector an.
Vorausgesetzt, das kann man mit Python auslesen, bietet das eine Größe von 4194294 Zeichen.
Anhänge (1)
Vielen Dank!