Hey an alle, ich hatte versucht ein Programm zu schreiben das die Attribute von bestimmten Bauteilen auf andere ausgewählte übertragen kann.
Dafür habe ich mittels der Funktion
attributes = AllplanBaseElements.ElementsAttributeService.GetAttributes(...)
alle attribute erhalten. Diese Teile ich dann auf in die vier vorhandenen Klassen: String, Double, Integer und Enum.
Die ersten drei klappen sehr gut.
Den Enum findet man auch leicht raus über:
enum_arr = AllplanBaseElements.AttributeService.GetEnumValues(self.doc, attribute_id)
Das ist ein String-Array, der den tatsächlichen Value der selektiert wurde enthält.
Das ist zum Beispiel der Gewerke Array
['', 'Gerüstarbeiten', 'Erdarbeiten', 'Landschaftsbauarbeiten', 'Landschaftsbauarb. -Pflanzen-', 'Brunnenbauarbeiten', 'Bohr, Verbau, Einpressarbeiten', 'Untertagebauarbeiten', 'Wasserhaltungsarbeiten', 'Abwasserkanalarbeiten', 'Drän- und Versickerarbeiten', 'Abscheider-, Kleinkläranlagen', 'Mauerarbeiten', 'Betonarbeiten','Natur-, Betonwerksteinarbeiten', 'Zimmer- und Holzbauarbeiten', 'Stahlbauarbeiten' ,...]
Wenn man die "Zimmer- und Holzbauarbeiten" auswählt, dann ist das der 16. Eintrag in der Liste
Um einen enum dann bei einem anderen Bauteil anzulegen braucht man die Funktion
attr_list.append(AllplanBaseElements.AttributeEnum(attribute_int, enum_int))
Hier trägt man dann den integer aus der Liste oben ein, doch leider erhalte ich wenn ich den 16. Eintrag nehme nicht wieder die "Zimmer- und Holzbauarbeiten" sondern die 'Stahlbauarbeiten'.
Erklären würde ich mir das dadurch dass in der Datei "AttributeDefinitionCollectionAllplan_de.xml" bei der id für Gewerke: <Ifnr>209</Ifnr>
einfach hin und wieder Keys übersprungen werden. Bei meiner vorinstallierten Version der Key <Key>15</Key>. Dieser existiert nicht.
Lösungsvorschlag meinerseits falls jemandem das gleiche passiert wäre das händische überarbeiten der .xml Datei um vorhandene Lücken bei der Durchnummerierung der Keys auszuschließen.
Ein weiterer Lösungsversuch war das ablesen des Value, also die "Zimmer- und Holzbauarbeiten" und die Rückgabe eben dieser als String. Dann nörgelt jedoch Allplan dass an die ID 209 für Gewerke kein String angeheftet werden darf sondern ein enum-wert als int.
Vielleicht kann man dieses Verhalten in den kommenden Versionen überarbeiten.
Beste Grüße