[Frage] Text aus BaseElementAdapter [Gelöst]

Schlagworte:
  • PythonParts
  • BaseElementAdapter
  • Text

Hallo.

Wenn ich mit der Python API ein Allplan Element selektiere bekomme ich dieses als BaseElementAdapter zurück.
Ich wähle mit meinem PythonPart mehrere Elemente aus - darunter auch Textblöcke (TextBlock_TypeUUID).

Ich möchte gerne den Text dieser Elemente bekommen. Hier scheitere ich aber. Die beiden Methoden GetGeometry und GetModelGeometry geben mir beide nur das Polygon zurück, welches den Textrahmen ausmacht.

Wie komme ich hier an den Text?

Lösung anzeigen Lösung verbergen

Hallo!

Leider ist die funktion NemAll_Python_BaseElements.GetElements() noch nicht dafür ausgelegt, einen NemAll_Python_BasisElements.TextElement aus dem BaseElementAdapter zu entnehmen. Dies wird noch implementiert, auch für Objekte anderer Art, die momentan nicht funktionieren. Wenn das der Fall ist, würde der Ablauf so aussehen:

text_elements = NemAll_Python_BaseElements.GetElements(base_element_adapter)

text_elements[0].Text = "abc"

NemAll_Python_BaseElements.ModifyElements(text_elements)

O.g. Ablauf funktioniert z.B. für 3D-Körper (ModelElement3D), 2D-Konstruktion (ModelElement2D) oder manche Architektur-Elemente. Weitere Elementarten werden schritt für schritt eingeführt.

Ich würde versuchen, den ElementAdapter (eleAdapt) in ein TextElement umzuwandeln:

textEle = AllplanBasisElements.TextElement() #new empty TextElement
textEle.SetBaseElementAdapter(eleAdapt) #assign adapter

text=textEle.GetText(); #get text

Keine Ahnung, ob das funktioniert...

Edit: Funktoniert nicht!
Man braucht also scheinbar noch den TextElementAdapter.

Es gilt also auch für Allplan-Python: Allplan ist keine Textverarbeitung :-)

Hallo,
vielen Dank für die Antwort und das Testen!
Sehr Schade, dass es keinen Weg gibt aus dem BaseElementAdapter den Text auszulesen...

Hallo!

Leider ist die funktion NemAll_Python_BaseElements.GetElements() noch nicht dafür ausgelegt, einen NemAll_Python_BasisElements.TextElement aus dem BaseElementAdapter zu entnehmen. Dies wird noch implementiert, auch für Objekte anderer Art, die momentan nicht funktionieren. Wenn das der Fall ist, würde der Ablauf so aussehen:

text_elements = NemAll_Python_BaseElements.GetElements(base_element_adapter)

text_elements[0].Text = "abc"

NemAll_Python_BaseElements.ModifyElements(text_elements)

O.g. Ablauf funktioniert z.B. für 3D-Körper (ModelElement3D), 2D-Konstruktion (ModelElement2D) oder manche Architektur-Elemente. Weitere Elementarten werden schritt für schritt eingeführt.

..und wofür ist dann die Funktion:

BasisElement.SetBaseElementAdapter(adapter)

gedacht? Was genau macht diese (eigentlich)?

In keiner .py-Datei in den ganzen Beispielen, Frameworks-Scripts o.ä. wird diese verwendet!

Also wofür ist diese Funktion?

Zitiert von: Nemo
..und wofür ist dann die Funktion:
BasisElement.SetBaseElementAdapter(adapter)
gedacht? ...

Guter Punkt!
Diese Methode hat tatsächlich keinen Anwendungsbereich und sollte lieber nicht verwendet werden. Um das sicher zu stellen, werden wir sie aus allen Modulen entfernen.

text_elements = NemAll_Python_BaseElements.GetElements(base_element_adapter)

Warum ist das Ergebnis des "castings" eines ElementAdapters in ein BaisElement plötzlich eine Liste?
In welchem Fall erzeugts das Casting eines ElementAdapters mehrere BasisElemente?

Ist das für Elementgruppen oder MacroGruppen vorgesehen?

Dafür gibt es doch den BaseElementAdapterChildElementsService , oder ?

Hi Nemo. Die Frage kann ich dir beantworten:
Die GetElements Funktion funktioniert nicht mit einem BaseElementAdapter sondern nur mit einer BaseElementAdapterList. Darum wird auch List[Any]zurückgegeben.

Zitiert von: Nemo

text_elements = NemAll_Python_BaseElements.GetElements(base_element_adapter)Warum ist das Ergebnis des "castings" eines ElementAdapters in ein BaisElement plötzlich eine Liste?

Wie schon richtig von GUBALLPLAN erkannt, der Argument ist eine BaseElementAdapterList. Das war also ein Fehler meinerseits.

Zitiert von: Nemo

Ist das für Elementgruppen oder MacroGruppen vorgesehen?
Dafür gibt es doch den BaseElementAdapterChildElementsService , oder ?

Vorgesehen ist es, umgesetzt noch nicht. Man kann sich über den ParentService oder ChildService den Adapter zu den jeweiligen Elementen holen, aber aus dem Adapter der Makro Gruppe oder Elementgruppe kann man sich die Objekte MacroGroupElement und ElementGroupElement NOCH nicht holen