Support Forum

[Frage] Attribute für ein Element in CreateElementResult setzten [Gelöst]

Schlagworte:
  • CreateElementResult
  • Attribut
  • Attribute
  • Element

Hallo zusammen,

ich habe eine Liste mit einer beliebigen Anzahl Polygonzügen.

Diesen Polygonzügen möchte ich jedem individuell ein Attribut zuweisen. Das ganze wird dann später via CreateElementResult ausgegeben, leider bekomme ich auf den Polygonzug keine Attribute. Ich halte mich realtiv strikt an die Anleitung der Doku


        for ele in self.polygon_list:
            attribute_list = BuildingElementAttributeList()
            posnr = --- hier variable Integer ---
            attribute_list.add_attribute(194, posnr)
            attr_set = BaseElements.AttributeSet(attribute_list.get_attribute_list())
            attributes = BaseElements.Attributes([attr_set])

            polylinie = AllplanGeo.Polyline2D(ele.GetGeometry().Points)
            polylinie.SetAttributes(attributes   #<---- Hier entsteht der Fehler

            model_ele_list.append_geometry_2d(AllplanGeo.Polyline2D(polylinie)
        return CreateElementResult(model_ele_list, placement_point=AllplanGeo.Point3D())


Warum kann ich mein Element nicht mit .SetAttributes arbeiten? Und wie setzte ich am leichtestens ein Attribut auf mein Element?

ich konnte es ja noch nicht ausprobieren, aber ich bin mir auch gar nicht sicher, ob append_geometry_2D auch die Attribute mit überträgt.

Gruss Sebastian

Lösung anzeigen Lösung verbergen

Hi,

der Fehler entsteht, weil Polyline2D beschreibt rein die Geometrie, aber nicht das 2D-Polylinie-Element. Sie hat keine Attribute. In anderen Worten, Geomerie (Polylinie2D) ist nur ein Komponent eines Model-Elements (ModelElement2D), der auch Attribute, Formateigenschaften und ggfs. weitere Eigenschaften besitzt.

Wenn du ModelEleList.apped_geometry_2d verwendest, überspringst du einen Schritt. Du generierst kein ModelElement2D, sondern die Liste macht das für dich. Das ModelElement2D wird durch die Liste erzeugt und gespeichert. Gebe also die Attribute nicht an geometrie, sondern an die Liste:

        model_ele_list = ModelEleList() # wichtig, dass die liste vor der Schleife leer ist
        for i, polygon in enumerate(self.polygon_list):
            attribute_list = BuildingElementAttributeList()
            posnr = --- hier variable Integer ---
            attribute_list.add_attribute(194, posnr)

            polylinie = AllplanGeo.Polyline2D(ele.GetGeometry().Points)
            model_ele_list.append_geometry_2d(polylinie)
            model_ele_list.set_element_attributes(i, attribute_list.get_attribute_list())

        return CreateElementResult(model_ele_list, placement_point=AllplanGeo.Point3D())

Grüße,
Bart

Hi,

der Fehler entsteht, weil Polyline2D beschreibt rein die Geometrie, aber nicht das 2D-Polylinie-Element. Sie hat keine Attribute. In anderen Worten, Geomerie (Polylinie2D) ist nur ein Komponent eines Model-Elements (ModelElement2D), der auch Attribute, Formateigenschaften und ggfs. weitere Eigenschaften besitzt.

Wenn du ModelEleList.apped_geometry_2d verwendest, überspringst du einen Schritt. Du generierst kein ModelElement2D, sondern die Liste macht das für dich. Das ModelElement2D wird durch die Liste erzeugt und gespeichert. Gebe also die Attribute nicht an geometrie, sondern an die Liste:

        model_ele_list = ModelEleList() # wichtig, dass die liste vor der Schleife leer ist
        for i, polygon in enumerate(self.polygon_list):
            attribute_list = BuildingElementAttributeList()
            posnr = --- hier variable Integer ---
            attribute_list.add_attribute(194, posnr)

            polylinie = AllplanGeo.Polyline2D(ele.GetGeometry().Points)
            model_ele_list.append_geometry_2d(polylinie)
            model_ele_list.set_element_attributes(i, attribute_list.get_attribute_list())

        return CreateElementResult(model_ele_list, placement_point=AllplanGeo.Point3D())

Grüße,
Bart