Support Forum

[Frage] Absturz bei Attribute [Gelöst]


Hallo,

einem PP füge ich Attribut über einen Freitext aus der Pallette hinzu.
Bei der Erstellung des PPs wird das Attribut ergänzt und der Wert korrekt eingetragen.
Will ich das PP wieder aufrufen, stürzt Allplan kommentarlos ab.

Muss ich bereits existierende Attribute anders behandeln als solche die neu hinzugefügt werden?

Hier mal ein Ausschnitt der beiden Methoden welche das Attribut setzen:


    def create(self, build_ele):
        self.build_ele = build_ele
        self.main(build_ele)
        
        if build_ele.check_PP.value == False:
            views = [View2D3D (self.model_ele_list)]
            pythonpart = PythonPart("Platte",
                                    parameter_list = build_ele.get_params_list(),
                                    hash_value     = build_ele.get_hash(), 
                                    python_file    = build_ele.pyp_file_name,
                                    views          = views)

            self.model_ele_list = pythonpart.create()
            try:
                self.model_ele_list[-1].SetAttributes(self.add_attributes())
            except:
                pass
            print(self.model_ele_list[-1])

        return (self.model_ele_list, self.handle_list)


    def add_attributes(self):
        #print("Attribute")
        attr_list = []

        attr_list.append(AllplanBaseElements.AttributeString(1905, self.freitext_1))

        attr_set_list = []
        attr_set_list.append(AllplanBaseElements.AttributeSet(attr_list))
        attributes = AllplanBaseElements.Attributes(attr_set_list)
        print(attributes)
        return attributes

Die Ausnahmebehandlung greift auch nicht wirklich. Kann ich auch rausnehmen...

Besten Dank für alle Anregungen!

Grüße
Marcus

VG
Marcus

Lösung anzeigen Lösung verbergen

Hi Christophe,

danke für dein Beispiel. Ich hatte das bereits in einem anderen Post angesehen nur bin ich damit nicht wirklich weitergekommen.
Die Attributzuweisung muss, wie bei dir geschehen in den Eigenschaften des PPs erfolgen. Bei mir jedoch lt. Klassendefinition als "attribute_list".

Hier meine korrigerte Version.

def create(self, build_ele):
    self.build_ele = build_ele
    self.main(build_ele)

    if build_ele.check_PP.value == False:
        views = [View2D3D (self.model_ele_list)]
        pythonpart = PythonPart("Platte",
                                parameter_list = build_ele.get_params_list(),
                                hash_value     = build_ele.get_hash(),
                                python_file    = build_ele.pyp_file_name,
                                views          = views,
                                attribute_list = self.add_attributes())

        self.model_ele_list = pythonpart.create()

    return (self.model_ele_list, self.handle_list)
def add_attributes(self):
    attr_list = []
    attr_list.append(AllplanBaseElements.AttributeString(1905, self.freitext_1))
    return attr_list

Danke nochmals, das brachte mich in die richtige Richtung!

Gruß
Marcus

VG
Marcus

Hallo Zusammen,

mit den Attributen komme ich nicht weiter.
Wie oben beschrieben klappt das erstmalige Hinzufügen, jedoch keine Änderung mehr.

Gibt es zwischenzeitlich in den Vorlagen ein Beispiel in welchem Attribute verwendet werden?
Oder hat jemand ein eigenes Beispiel?

Irgendwas mache ich ich offensichtlich falsch...

Danke und Grüße
Marcus

VG
Marcus

Hallo,

Hier ist ein Beispiel für ein Skript mit den Attributen.

...
pythonpart = PythonPart("Reinforcement",
build_ele.get_params_list(),
self._hash_value,
self._python_file,
views,
AllplanGeo.Matrix3D(),
com_prop,
self.create_reinforcement(),
self.create_attribute_list()
)

self.model_ele_list = pythonpart.create()

def create_attribute_list(self):
"""
Create the attributes

Returns:
AllplanBaseElements.Attributes object filled with attributes
"""
# Define attributes for elements
attr_list = []

# Designation => @507@
attr_list.append(AllplanBaseElements.AttributeString(507, "Text")

return attr_list

Christophe

Hi Christophe,

danke für dein Beispiel. Ich hatte das bereits in einem anderen Post angesehen nur bin ich damit nicht wirklich weitergekommen.
Die Attributzuweisung muss, wie bei dir geschehen in den Eigenschaften des PPs erfolgen. Bei mir jedoch lt. Klassendefinition als "attribute_list".

Hier meine korrigerte Version.

def create(self, build_ele):
    self.build_ele = build_ele
    self.main(build_ele)

    if build_ele.check_PP.value == False:
        views = [View2D3D (self.model_ele_list)]
        pythonpart = PythonPart("Platte",
                                parameter_list = build_ele.get_params_list(),
                                hash_value     = build_ele.get_hash(),
                                python_file    = build_ele.pyp_file_name,
                                views          = views,
                                attribute_list = self.add_attributes())

        self.model_ele_list = pythonpart.create()

    return (self.model_ele_list, self.handle_list)
def add_attributes(self):
    attr_list = []
    attr_list.append(AllplanBaseElements.AttributeString(1905, self.freitext_1))
    return attr_list

Danke nochmals, das brachte mich in die richtige Richtung!

Gruß
Marcus

VG
Marcus

Hallo,

Ich freue mich, Ihnen zu dienen.

Die Attribute müssen mit dem PP deklariert werden.

Gruß

Christophe

(Google Translate...)