icon

Support Forum

Ressourcen von DoorSwing /Enum


Hallo,

ich möchte in einem ScriptObject einen PictureButton "SwingType" in der Palette haben, der dynamisch das Symbol des Türaufschlags einer angewählten Türöffnungsschicht enthält. Es geht um Allplan 2026, soll aber auch in 2025 funktionieren.

Ich schaffe es, die DoorSwing.Type der gewählten Öffnungsschicht über die Door- und swing- Prpoperties zu ermitteln, sie ist zBSp eSingleSwingCircular. Wie komme ich nun von diesem wert (1) zur zugeordneten AllplanSettings.PictResDoorSwingType (19743) oder der TextResDoorSwingType (36400) zwecks Anzeige in der Palette. Wenn die Tür keinen Türaufschlag hat, soll der Button kein Icon anzeigen. (eNone)

es muss irgendwie über die Enums gehen, aber ich komm nicht drauf.
Bitte um Hilfestellung wie das direct im Control (pyp) und auch wie es im script (py) funktioniert.

Beste Grüße
Thomas
(PP Anfänger)

Hi Thomas,

Enums in der ALLPLAN Python API sind etwas spezifisch, denn sie kommen aus den C++ enums. Aber mit dieser Funktion:

def to_pic_res_int(swing_type: AllplanArchElements.DoorSwingType) -> int:
    return int(AllplanSettings.PictResDoorSwingType.names[swing_type.name])
kannst Du die enum Instanz in eine Ganzzahl konvertieren.

MMn, wenn Du es der "value"-Property deines Buttons zuweist, sollte der Button das richtige Symbol anzeigen:

self.build_ele.DeinDoorSwingButton.value = to_pic_res_int(dein_door_swing_type)
WICHTIG: diese Zuweisung sollte in der Methode deines ScriptObjects erfolgen, wo am Ende die Palette upgedated wird. Das ist der Fall in modify_element_property oder im on_control_event wenn am ende True wiedergegeben wird.

Analog mit dem Text. Sollte auch in 2025 funktionieren.

Grüße,
Bart

Hallo,

ich glaube, dass ich to_pic_res_int() innerhalb meiner class SelectOpening(BaseScriptObject): mit self ansprechen muss, oder? Ich habe es mit einen Button gemacht und möchte den Rückgabewert mit istval2 überprüfen:
def on_control_event(self,
event_id: int) -> bool:

if event_id == klick:
intval2 = self.to_txt_res_int(swing_typeInt)
# Beispiel swing_typeInt = eLiftingSliding

ich rufe diese Funktion:
def to_pic_res_int(swing_typeInt: AllplanArchEle.DoorSwingType) -> int:
return int(AllplanSettings.PictResDoorSwingType.names[swing_typeInt.name])

aber leider erhalte ich diesen Error im Trace:
intval2 = self.to_pic_res_int(swing_typeInt)
TypeError: SelectOpening.to_pic_res_int() takes 1 positional argument but 2 were given

Hier komme ich leider nicht weiter.
int(AllplanSettings.PictResDoorSwingType.names[swing_typeInt.name]) liefert in start_next_input(self) allerdings das richtige Ergebnis:19771.

Beste Grüße
Thomas

Hi,

Das ist eine Frage, die sich rein auf die Architektur deines PythonPart bezieht. Ich habe nur die Funktion als Beispiel gegeben. Wenn Du sie als Instanz-Methode verwenden möchtest, dann soll in Python als erstes Argument die Klassen-instanz definiert werden, üblicherweise als self bezeichnet:

class YourScriptObject(BaseScriptObject):
    ...
    def to_pic_res_int(self, swing_type: AllplanArchElements.DoorSwingType) -> int:
        return int(AllplanSettings.PictResDoorSwingType.names[swing_type.name])

Grüße,
Bart

Danke, das hat funktioniert