[Frage] Import/Export "Allplan-XML-Daten" mittels Python? [Gelöst]

Schlagworte:
  • 2022
  • Python
  • NOI:XML
  • XML
  • Import
  • Export

Hallo

gibt es eine Möglichkeit mittels der Python-API "Allplan-XML-Daten" zu importieren bzw. zu exportieren?

Der Hintergrund meiner Frage ist, dass ich gerne aus in Allplan vorhandenen Linien Füll-Linien erstellen möchte. Leider unterstützt die Python-API keine Füll-Linien.

Meine Idee ist nun, die Füll-Linien im Format "Allplan-XML" zu generieren und in Allplan zu importieren.
Dies möchte ich aber direkt machen. Und nicht über die Erstellung der XML-Datei und deren manuellen Import.

<noi:BASIS_FILLINE>
  <noi:UUID drawingId="00000000-0000-0000-0000-000000000000" elementId="0" elementUUID="00000000-0000-0000-0000-000000000000"/>
  <noi:SEGMENT_UUID drawingId="00000000-0000-0000-0000-000000000000" elementId="0" elementUUID="00000000-0000-0000-0000-000000000000"/>
  <noi:NAMED_UUID name=""/>
  <noi:GEOMETRY>
    <noi:GEO_POLYLINE2D>
      <noi:GEO_POINT_LIST_2D>
        <noi:GEO_POINT x="108262.524422079" y="399839.960925527"/>
        <noi:GEO_POINT x="108264.202726066" y="399835.352923691"/>
        <noi:GEO_POINT x="108266.492482997" y="399831.941061236"/>
      </noi:GEO_POINT_LIST_2D>
    </noi:GEO_POLYLINE2D>
  </noi:GEOMETRY>
  <noi:COMMON_STYLE alpha="0" r="240" g="240" b="225" layerId="0" strokeId="1" penId="1" colorByLayer="false" strokeByLayer="false" penByLayer="false" useConstructionLineMode="false" drawOrder="15" zoomWindowFlag="eNOI_NormalPlusZoom" pageNumber="0" visibilityFlag="eNOI_NORMAL_VIEW" isVisible="true"/>
  <noi:BLANKING_STYLE useBlanking="false"/>
  <noi:BASIS_FILLINE_STYLE thickness="0.1"/>
</noi:BASIS_FILLINE>

Gruss und Dank
Hansruedi

Lösung anzeigen Lösung verbergen

Hallo,

nein, die Möglichkeit diese Dateien zu ex- oder importieren bietet die Allplan Python API nicht und mir ist auch nicht bekannt, dass es in Zukunft geplant wäre.

Was ich jetzt als Workaround anbieten konnte, wäre ein VisualScript (im Anhang) der so eine Füllinie erzeugt. VisualScripts kann man mittlerweile mit Allplan Python API aufrufen. Das geht mit dem VisualScriptService. Ich würde also eine Interactor PythonPart schreiben, der Polylinie selektieren kann und diese dann als Parameter an das VisualScriptService weitergibt.
Mehr Infos zum Ansteuerung von VisualScripts findet man in
Allplan PythonParts documentation »Interactor PythonPart »Execute a PythonPart script created by VisualScripting
Beispiel dazu gibt es in:
...\Etc\PythonPartsExampleScripts\InteractorExamples\General\ExecuteVisualScript.py

Nachteil von dieser Lösung wäre es natürlich, dass so erzeugte "Füllinie" keine native Füllinie ist, sondern ein PythonPart. Sie lässt sich somit z.B. durch PunktMod nicht modifizieren.

Viele Grüße

Anhänge (1)

Typ: application/x-sqlite3
678-mal heruntergeladen
Größe: 132,00 KiB

Hallo!
Allplan Python API basiert auf Python 3.8.8, der bereits "vom Werk" einen Modul zu Bearbeitung von .xml Daten beinhaltet. Das Modul heißt auch xml und hier findet man die Dokumentation dafür. Darüber hinaus wird auch et_xmlfile zur Bearbeitung von großen xml dateien mit Allplan mitgeliefert. Und wenn einem das nicht genügt, lässt sich ein beliebiges Python Package mit dem InstallPythonPackage PythonPart installieren (in \etc\Examples\PythonParts\ToolsAndStartExamples).

Das direkte bearbeiten von Allplan Daten finde ich ein interessantes Workaround. Die Füllinie (FillLine) ist in Python API noch nicht exponiert, aber in der Roadmap bereits berücksichtigt.

Hallo

vielen Dank für die Antwort.

Wenn ich richtig verstehe, können "Allplan-XML" also nicht über die API importiert werden.
Ich dachte, dass es vielleicht etwas analog StringToValueConverter bzw. ValueToStringConverter gibt.
Damit kann ein Geometrie-Objekt anhand eines Strings generiert werden.

Hallo,

nein, die Möglichkeit diese Dateien zu ex- oder importieren bietet die Allplan Python API nicht und mir ist auch nicht bekannt, dass es in Zukunft geplant wäre.

Was ich jetzt als Workaround anbieten konnte, wäre ein VisualScript (im Anhang) der so eine Füllinie erzeugt. VisualScripts kann man mittlerweile mit Allplan Python API aufrufen. Das geht mit dem VisualScriptService. Ich würde also eine Interactor PythonPart schreiben, der Polylinie selektieren kann und diese dann als Parameter an das VisualScriptService weitergibt.
Mehr Infos zum Ansteuerung von VisualScripts findet man in
Allplan PythonParts documentation »Interactor PythonPart »Execute a PythonPart script created by VisualScripting
Beispiel dazu gibt es in:
...\Etc\PythonPartsExampleScripts\InteractorExamples\General\ExecuteVisualScript.py

Nachteil von dieser Lösung wäre es natürlich, dass so erzeugte "Füllinie" keine native Füllinie ist, sondern ein PythonPart. Sie lässt sich somit z.B. durch PunktMod nicht modifizieren.

Viele Grüße

Anhänge (1)

Typ: application/x-sqlite3
678-mal heruntergeladen
Größe: 132,00 KiB

Interessanter Workaround!

Für meinen Anwendungsfall jedoch nicht praktikabel. Ich benötige native Füll-Linien.
Die Generierung und der manuelle Import der XML-Datei funktionieren gut genug.

Gruss und Dank

Nun, in Python ist es nicht möglich, eine XML zu importieren. Mit Visual Basic (COM) hingegen sollte das funktionieren. Die allererste Version der Fassade hat es genauso gemacht: Ein XML erzeugt, und dieses
dann nach Allplan importiert. Die dafür benötigte Funktion sollte es also noch im der COM-Schnittstelle geben...