ModelElement3D ist hier richtig. Die ModelElement3D methode ist jedoch overloaded. Falls du also noch die SurfaceProperties übergeben willst musst du das Objekt dementsprechend initialisieren:
__init__( (object)arg1, (CommonProperties)commonProp, (TextureDefinition)textureDefinition, (object)geometryObject) -> None
Die Attribute könntest du auch so einlesen:
AllplanBaseElements.ElementsAttributeService.GetAttributes(*args)
Wenn dir
element.GetAttributes(AllplanBaseElements.eAttibuteReadState.ReadAll)
aber alle Attribute zurückgibt passt das auch.
Der Grund warum AllplanBaseElements.ElementsAttributeService.ChangeAttributes() nicht funktioniert ist weil du dazu eine BaseElementAdaperList brauchts - in diesem Zustand hat dein PythonPart aber keinen Zugriff auf die BaseElementAdapeter Objekte da du sie ja noch nicht erzeugt hast. Du kannst aber einem ModelElement3D auch Attribute zuweisen mit der SetAttributes methode.
model_ele = AllplanBasisElements.ModelElement3D(common_props,
texture_def,
geo_obj)
model_ele.SetAttributes(attrs)
Damit müsstest du eigentlich alles abbilden können. Falls du Fragen zu den Attributen etc hast schau dir auch gern mal den Code der Nodes vom Visual Scripting an, die sind sehr leserlich und sagen oft mehr aus als jede Doku.
Nein du kannst den Befehl TB-übergreifend kopieren und Wandeln nicht von einem PP aus starten. Den Befehl müsstest du nachbauen was viel Arbeit ist. Warum änderst du nicht den Workflow? Alle Objekte mit dem Allplan Befehl wandeln und in ein anderes TB kopieren, dann in dieses TB wechseln und dann deinen PP starten und weiterarbeiten?