Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

Eigener Layer des Pythonpart

Schlagworte:

Hallo zusammen

Ich möchte in einem Pythonpart eine Füllung erstellen (lassen), deren Farbe abhängig ist vom Layer.
Beim erstellen erhält man mit GetGlobalProperties() den gerade eingestellten Layer, ebenso Farbe etc. So weit so gut.
Nach dem absetzen kann man den Layer des Pythonparts ändern.

Kann man den Layer des abgesetzten Pythonparts mittels Code irgendwo auslesen?

Hi,

Zitiert von: User425
...deren Farbe abhängig ist vom Layer.
Wie ist das zu verstehen? Dass der Haken bei "Farbe vom Layer" gesetzt werden soll? Dafür ist die Property ColorByLayer des Objektes CommonProperties verantwortlich. Setzt man sie auf True, wird die Farbe vom Layerdefinition übernommen.

Zitiert von: User425
Kann man den Layer des abgesetzten Pythonparts mittels Code irgendwo auslesen?
Also Programmatisch alle abgesetzten PythonParts selektieren und deren Layer auslesen? Das kann man ohne probleme machen.
  • Alle elemente selektieren
    elements = AllplanBaseElements.ElementsSelectService.SelectAllElements(doc)

  • Nur PythonParts filtern
    python_parts = filter(AllplanBaseElements.PythonPartService.IsPythonPartElement, elements)

  • Für jeden gefundenen PythonPart das Layer ID lesen und die Layer-Name drucken
    for pythonpart in python_parts:
        layer_id = pythonpart.GetCommonProperties().Layer
        print(f"{pythonpart}:\t{AllplanBaseElements.LayerService.GetNameByID(layer_id,doc.GetDocumentID())}")
    

Ich bin mir aber nicht sicher, ob es das ist, was Sie gemeint haben.

VG,
Bart

Ich vermute mal, es war gemeint, den Layer des aktuellen PythonParts (also des Macroplacements, welches gerade ausgeführt wird) im Python-Code zu ermitteln.

User 425 hat offensichtlich vor, eine Art "Layer-Signalisierung" einzubauen.
Wozu ist mir aber auch nicht ganz klar, da die erzeugten Elemente des PythonParts ja wieder auf anderen Layern liegen können/sollen.

Erschwerend kommt hinzu, daß man den Layer des (PythonPart-)MacroPlacements in Allplan nur ändern kann, wenn die Eigenschaft "Format = Verlegung" am PythonPart-MacroPlacement aktiviert.

Aber es könnte gehen, indem man alle PythonParts selektiert (s. oben), und dann herausfindet, welches PythonPart das gerade ausgeführte ist. Von dem könnte man dann die CommonProperties lesen, um den Layer zu erfahren. Das könnte allerdings bei großen Teilbildern auch größere Performance-Probleme bereiten, wenn man das z.B. beim Ziehen an einem Griff bei jedem MouseMove machen möchte!

Trotzdem bekommt das PythonPart-Macroplacement ja nicht mit, wenn man dessen Layer (mit Allplan-Mitteln) ändert. Erst ein "Aktualisieren" des PythonParts würde die "Signalisierung" anstoßen...

Wenn das tatsächlich gemein war, dann... Um mit Python API das PythonPart (am ende ist es ein MacroElement und MacroPlacement) zu erzeugen, würde ich vorschlagen, den PythonPartUtil zu verwenden.
So wären die Schritte:

  • die gerade eingestellten Formateigenschaften ermitteln
    common_props = AllplanSettings.AllplanGlobalSettings.GetCurrentCommonProperties()

  • Farbe aus dem Layer übernehmen
    common_props.ColorByLayer = True

  • PythonPart utility mit diesen Formateigenschaften erstellen:
    from PythonPartUtil import PythonPartUtil
    pyp_util = PythonPartUtil(common_props)

  • Elemente hinzufügen
    pyp_util.add_pythonpart_view_2d3d(...)

  • Model elemente (MacroElement und MacroPLacementElement) erzeugen
    model_ele_list = pyp_util.create(build_ele)

Natürlich "from .. import ..." am Anfang des Skriptes ausführen, nicht mitten drin.
VG,
Bart

Nein, ich fürchte auch das tangiert nicht das Ziel der Fragestellung.

Die Aufgabe ist: Während der Ausführung eines schon abgesetzten PythonParts (Doppelklick links) soll dessen Layer abgefragt werden, um dann eine entspr. eingefärbte Füllfläche zu erzeugen.