Support Forum

[Frage] Zusammengesetzte 2D Profile extrudieren, Polyhedron aus 2D Polygon [Gelöst]


Hallo,

gibt es die Möglichkeit aus einem zusammengesetzten 2D Profil (Kreise + Linien) einen 3D Körper zu extrudieren?
Gefunden habe ich die Möglichkeit aus einem 2D Polygon ein Polyhedron zu erzeugen.
Im Beispiel wird jedoch auch nur ein Rechteck verwendet.

Ich denke bei den Smartparts wäre das die Funktion Extrude, in der Doku der PPs wird hier auch Polyhedron als entsprechende Funktion beschrieben.

Im Grunde stelle sich somit die Frage, wie bekomme ich Kreissegmente in das 2D Polygon bekomme...

Danke für Rückmeldungen!

VG
Marcus

Lösung anzeigen Lösung verbergen

Hallo,

1. runder Körper mit BRep:
Linien und Kreise als 3D-Elemente erzeugen und zu einem Path3D verbinden.
Mit diesem Path3D ein planares BRep erstellen (CreatePlanarBRep3D).
Das planare BRep zu einem Körper "Loften"(CreateLoftedBRep3D) oder "Sweepen" (CreateSweptBRep3D).

2. Polygonisierung eines 2D-Kreises:
Scheinbar im Allplan-Python-Wrapper nicht implementiert.
Aber in meinem eigenen Python-Plugin schon :-)
Wenn Interesse besteht, bitte PM an mich...

Gruß Jörg

1 - 10 (12)

Hallo,

1. runder Körper mit BRep:
Linien und Kreise als 3D-Elemente erzeugen und zu einem Path3D verbinden.
Mit diesem Path3D ein planares BRep erstellen (CreatePlanarBRep3D).
Das planare BRep zu einem Körper "Loften"(CreateLoftedBRep3D) oder "Sweepen" (CreateSweptBRep3D).

2. Polygonisierung eines 2D-Kreises:
Scheinbar im Allplan-Python-Wrapper nicht implementiert.
Aber in meinem eigenen Python-Plugin schon :-)
Wenn Interesse besteht, bitte PM an mich...

Gruß Jörg

Hallo Jörg,

das bringt ein bisschen Licht ins Dunkel, danke!

Du hast dir ein eigenes Plugin geschrieben? Respekt!

Merci+Gruß
Marcus

VG
Marcus

Hallo Jörg,

jetzt muss ich nochmal nachhaken.
Beim Versuch das Brep aus den 3D Profilen zu erzeugen scheitere ich.
Es gibt 2 Möglichkeiten ein "CreateSweptBRep3D" zu definieren. Beide habe ich ausprobiert.
Die Print Ausgabe des breps ergibt einen Geometry Error...
Im Anhang habe ich die beiden Dateien welche ich verwende.
Vielleicht kannst du mir da noch einen Hinweis geben.
Die pyp Datei ist eine unveränderte Datei aus den Beispielen welche ich nur zum Starten meines Skripts verwende...

Ist bekannt irgendjemand bbekannt, ob es in nächster Zeit noch erweiterte Dokumentation und/ oder Schulungen in irgendeiner Form zur Erstellung von PPs geben wird?
Es gibt zwar viele gute Beispiele und die API Dokumentation. Das ist aus meiner Sicht jedoch recht spartanisch gehalten.
Gut programmieren ist auch nicht meine Erwerbstätigkeit...
Trotzdem wöre es toll einen leichteren Zugang zu erhalten bekommen.

Danke und Grüße
Marcus

VG
Marcus

Anhänge (2)

Typ: application/xml
1433-mal heruntergeladen
Größe: 27,18 KiB
Typ: text/plain
1577-mal heruntergeladen
Größe: 2,46 KiB

Hallo,

Python hat ein hat leider keine Typprüfung: Das wird auch als "Ducktyping" bezeichnet, und hat sicher für Anfänger Vorteile.
Daraus ergeben sich aber auch schwierig zu findende Laufzeitfehler! (C++ würde eine Typfehlerzur Compilierungszeit merken!)
In dem vorliegenden Fall ist es so, dass CreateSweptBRep3D als die erste beiden Parameter einen Path3D bzw. eine List[Path3D]erwartet. Der übergebene Parameter ist allerdings vom falschen Typ BRep3D bzw. Linie3D.

Folgende Änderungen für path sollten funktionieren (ungetestet):

path = AllplanGeo.Path3D()
path += AllplanGeo.Line3D(AllplanGeo.Point3D(0,0,0), AllplanGeo.Point3D(0,0,100))
...
profiles = [base_path]
brep = AllplanGeo.CreateSweptBRep3D(profiles, path, closegaps, railrotation, axis, 1)

oder

brep = AllplanGeo.CreateSweptBRep3D(base_path, path, railrotation, axis)

Gruß Jörg

Hallo,

danke für deine rasche Rückmeldung.
Auch nach Einarbeitung deiner Vorschläge bleibt die Ausgabe noch ohne Resultat.

        base_path = AllplanGeo.Path3D()
        base_path += AllplanGeo.Line3D(AllplanGeo.Point3D(0,0,0), AllplanGeo.Point3D(100,0,0))
        base_path += AllplanGeo.Line3D(AllplanGeo.Point3D(100,0,0), AllplanGeo.Point3D(100,100,0))
        base_path += AllplanGeo.Line3D(AllplanGeo.Point3D(100,100,0), AllplanGeo.Point3D(0,100,0))
        base_path += AllplanGeo.Line3D(AllplanGeo.Point3D(0,100,0), AllplanGeo.Point3D(0,0,0))
        axis = AllplanGeo.Vector3D(0,0,100)
        path = AllplanGeo.Path3D()
        path += AllplanGeo.Line3D(AllplanGeo.Point3D(0,0,0), AllplanGeo.Point3D(0,0,100))
        railrotation = False
        closegaps = False
        brep = AllplanGeo.CreateSweptBRep3D(base_path, path, railrotation, axis)
        print(brep)
        com_prop = AllplanBaseElements.CommonProperties()
        com_prop.GetGlobalProperties()
        return AllplanBasisElements.ModelElement3D(com_prop, brep)

Gibt es evtl. noch Fehler?
Testweise habe ich mal ein Polyhedron (Polyhedron3D.CreateCuboid) aus der Methode übergeben, dass hat auf Anhieb funktioniert...

Gruß
Marcus

VG
Marcus

Anhänge (3)

Typ: image/jpeg
242-mal heruntergeladen
Größe: 28,03 KiB
Typ: application/xml
1511-mal heruntergeladen
Größe: 313,00 B
Typ: text/plain
1655-mal heruntergeladen
Größe: 2,33 KiB

..probier mal Kombinationen mit:
axis = AllplanGeo.Vector3D(0,100,0)
(bei einer vertikalen Extrusion mach sonst ein vertikaler Ausrichtungsvector keinen Sinn!)
und
railrotation = True

Gruß Jörg

Ich dachte die Rotationsachse des Profils sollte lotrecht zum Profil stehen...
Bei axis = AllplanGeo.Vector3D(0,100,0) füllt sich das Brep lt. print Ausgabe mit Werten!!
Soweit ich das herauslesen kann, scheinen die Infos auch meine quadratische Extrusion wieder zu geben.
(Siehe Anhang)
Gezeichnet wird aber nichts.

Danke und Gruß
Marcus

VG
Marcus

Anhänge (1)

Typ: image/jpeg
221-mal heruntergeladen
Größe: 25,50 KiB

...die Rotationsachse steht in diesem Fall lotrecht zum Pfad.

In 2017 kann/muss man beim BRep die Anzalh der U-V-Curven mit angeben.
In meinem Pythonpart hat folgendes funktioniert:

surf=Basis.TextureDefinition("alu")
return AllplanBasisElements.ModelElement3D(com_prop, surf , 0,0, brep )

Gruß Jörg

Ergänzt habe ich:
surf = AllplanBasisElements.TextureDefinition("alu")
return AllplanBasisElements.ModelElement3D(com_prop, surf, 0,0 ,brep)
Du hast als "Basis" das NemAll_Python_BasisElements Modul gemeint, oder?
Mein Import AllplanBasisElements.

Verändert hat sich dadurch nichts...

Sind die Änderungen von 2016 auf 2017 irgendwo dokumentiert?
Im Prinzip für mich auch nur in Verbindung mit den Beispielen interessant da ich erst jetzt den Einstieg versuche...

Gruß
Marcus

VG
Marcus

1 - 10 (12)