Support Forum

[Frage] Umgang mit BReps3dList

Schlagworte:
  • PythonParts
  • Pythonpart
  • Python Parts
  • Python
  • Brep
  • Brep3d
  • Brep3dlist

Moin!

Ich hätte eine Frage zur Python Codierung bzw. habe die Vermutung, dass ich da etwas falsch verwende bzw. verstehe.

Ich habe eine Pfahlkopfplatte als Python Part geschrieben, bei der man Pfahlabstände und Neigungen ändern und die Abmessungen des Fundamentes anpassen kann (siehe Bild). So weit, so gut.

Dieses Python Part kann man entweder als Python Part oder als Geometrisches Objekt ablegen.
Wenn man es als Python Part ablegt, ich es eins (logisch, weil man es darüber im nachhinein noch anpassen kann). Wenn man es als Geometrisches Objekt ablegt, möchte ich, dass das Fundament und jeder Pfahl ein Objekt sind.

Das Fundament und die Pfähle habe ich nun schon voneinander trennen können, indem ich einfach auf das "MakeUnion" verzichtet habe.
Die Pfähle werden jedoch in einer Funktion über mehrere Schleifen erstellt und am Ende zusammengefügt und dann ausgegeben:

<Codeauszug Start>
pfaehle = None

[...]

#make Union
if pfaehle == None:
pfaehle = brep2
else:
pfaehle = AllplanGeo.MakeUnion(pfaehle, brep2)[1]

return pfaehle
<Codeauszug Ende>

Meine Idee war jetzt, statt mit "MakeUnion" zu arbeiten, eine BRep3DList zu erstellen und die einzelenen Pfähle jeweils über den "append"-Befehl hinzuzufügen und am Ende die ganze Liste ausgeben zu lassen:

<Codeauszug Start>
pfaehle = AllplanGeo.BRep3DList()

[...]

pfaehle.append(brep2)

return pfaehle
<Codeauszug Ende>

Dies führt leider dazu, das ich gar keine Pfähle mehr bekomme (siehe Bild). Ich vermute, dass ich den "BRep3dList"-Befehl bzw. den "append"-Befehl falsch verwende, kann aber auch kein Beispiel finden, das mir weiter hilft. Kann mir da jemand helfen?

Vielen Dank schonmal!

VG Melita

Anhänge (2)

Typ: image/png
47-mal heruntergeladen
Größe: 71,15 KiB
Typ: image/png
34-mal heruntergeladen
Größe: 2,68 KiB

..im ersten Fall wird ein einzelnes BRep zurückgegeben, im zweiten Fall eine Liste von BReps!
Da muss natürlich die aufrufende Funktion entspr. angepasst werden, um die ankommende Liste zu verarbeiten. Manchmal ist es eben doch Mist, wenn Python der Vereinfachung halber keine sauberen Funktions-Deklarationen fordert. Da kann man alles Mögliche in eine Funktion "reinreichen", und auch wieder zurückgeben, ohne daß man das beim Kompilieren merkt. Erst zur Laufzeit passiert dann irgendwas komisches :-)

if isinstance(pfaehle, BRep3DList):
   for pfahl in pfaehle:
     #make ModelElement with pfahl
if isinstance(pfaehle, BRep3D):
     #make ModelElement with pfaehle