ich versuche nun seit Tagen einen 3D-Körper aus 2D-Faces zu erstellen (wird später genauer erläutert) und diesen als STEP oder IGES zu exportieren damit ich dieses Teil wiederum in ABAQUS (FEM-Software) importieren kann. Leider ist mein Bauteil beim Import oft "ungültig" also nicht korrekt oder hat mehr Kanten und Knoten (Vertices) als generiert (beim Import im ABAQUS). Lasse ich eine Fehleranalyse in FreeCAD laufen bekomme ich zwei primäre Fehler "BOPAlgo_InvalidCurveOnSurface" und "BOPAlgo SelfIntersect". Ich hoffe sehr ihr könnt mir helfen

Nun gehen wir mehr ins Detail:
Ich versuche für meine Abschlussarbeit eine Schaumstruktur zu erstellen. Da die Zellwände der Zellen sehr dünn sind wollte ich dieses als Flächen modellieren. Um dies zu erreichen habe ich mittels Python zwei verschiedene Ansätze versucht:
1) Ich erstelle zunächst alle Eckknoten der Zellwände, anschließend werden die Knoten definiert zu Kanten verbunden. Als letzten werden aus den Kanten eine Fläche gebildet.
Hier ist einmal ein beispielhaftes Skript zu finden:
App.newDocument("Unnamed")
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
App.ActiveDocument.recompute()
__objs__ = []
allfaces = []
stringVert = 'Vertex'
stringEdge = 'Edge'
stringFace = 'Face'
vertDic = {}
edgeDic = {}
# Alle Vertices der Zellwände erstellen (werden nicht doppelt erstellt)
for i in range(len(Vertices)):
currentVert = stringVert + str(i)
vert = App.ActiveDocument.addObject("Part::Vertex", currentVert)
vert.X = Vertices[i, 0]
vert.Y = Verticesi, 1]
vert.Z = Vertices[i, 2]
vert.Placement = Base.Placement(Base.Vector(0.00, 0.00, 0.00), Base.Rotation(0.00, 0.00, 0.00, 1.00))
vert.Label = currentVert
vertDic = vert
# Kanten der Zellwände bilden, indem die erstellen Punkte definiert verbunden werden
for j in range(len(PointsEdges)):
currentEdge = stringEdge + str(j)
point1 = PointsEdges[j, 0] # Punkt 1 der Kante
point2 = PointsEdges[j, 1] # Punkt 2 der Kaante
edge = Part.makeLine(vertDic[point1].Shape.Vertex1.Point, vertDic[point2].Shape.Vertex1.Point)
if edge.isNull(): raise RuntimeError('Failed to create edge')
App.ActiveDocument.addObject('Part::Feature', currentEdge).Shape = edge
edgeDic[j] = edge
# Flächen bilden durch Kanten
for F in Faces:
currentFace = stringFace + str(F)
edgeList = []
for l in ListeFlaechen[F]:
edgeList.append(edgeDic[l])
face = Part.makeFilledFace(Part.__sortEdges__(edgeList))
if face.isNull(): raise RuntimeError('Failed to create face')
App.ActiveDocument.addObject('Part::Feature',currentFace).Shape = face
allfaces.append(FreeCAD.getDocument("Unnamed").getObject(currentFace))
Draft.upgrade(allfaces,delete=True)
FreeCAD.ActiveDocument.recompute()
__objs__.append(FreeCAD.getDocument("Unnamed").getObject("Shell"))
App.ActiveDocument.recompute()
StepPath = Skript_Pfad + "\\foam.igs"
Part.export(__objs__, StepPath)
2) Bei der zweiten Variation habe ich direkt die Edges mit 2 Punkten erstellt und dann die Flächen gebildet:
for j in range(len(Edges)):
currentEdge = stringEdge + str(j)
p1 = Vertices[PointsEdges[j,0]]
p2 = Vertices[PointsEdges[j,1]]
edge = App.ActiveDocument.addObject("Part::Line",currentEdge)
edge.X1 = round(p1[0], 6)
edge.Y1 = round(p1[1], 6)
edge.Z1 = round(p1[2], 6)
edge.X2 = round(p2[0], 6)
edge.Y2 = round(p2[1], 6)
edge.Z2 = round(p2[2], 6)
edge.Placement = Base.Placement(Base.Vector(0.000000,0.000000,0.000000),Base.Rotation(0.000000,0.000000,0.000000,1.000000))
edge.Label = currentEdge
edgeDic[j] = edge
__objs__.append(FreeCAD.getDocument("Unnamed").getObject(currentEdge))
Zusätzlich habe ich mal alle Objecte ecportiert (Kanten, Flächen, Knoten) und mal nur die Flächen (einzelnt oder duch Upgrade als Shell). Leider treten die Fehler bei allen Variationen auf... Ich bin etwas verzweifelt und hoffe ihr könnt mir helfen.
im Voraus schonmal vielen Dank für eure Antworten und Hilfe.
Gruß Patrick