Beschreibung |
---|
Mit diesem Makro kann eine Reihe von Objekten ausgewählt werden, die Höhenkonturen enthalten, und daraus einen Arch Grundstück erstellt werden. Die Konturen können in einer beliebigen Anzahl von Objekten gruppiert werden und müssen keine geschlossenen Linien bilden. All dies wird vom Makro übernommen. Intern wird aus jeder Kontur eine B-Spline erstellt, dann werden zwischen den Konturen Regelflächen erstellt, diese Regelflächen werden zu einem Hüllen-Objekt zusammengefasst und schließlich wird ein Arch Grundstück erstellt, die diese Shell als Terrain verwendet. Versionsmakro : 1.0 Datum der letzten Änderung : 2018-08-30 FreeCAD version : Alle Herunterladen : ToolBar Icon Autor: yorik |
Autor |
yorik |
Herunterladen |
ToolBar Icon |
Links |
Makros Rezepte Wie installiere ich Makros So passen Sie Symbolleisten an |
Macro-Version |
1.0 |
Datum der letzten Änderung |
2018-08-30 |
FreeCAD-Version(s) |
Alle |
Standardverknüpfung |
None |
Siehe auch |
None |
Mit diesem Makro kann man eine Reihe von Objekten auswählen, die Höhenkonturen enthalten, und daraus eine Bogenfläche erstellen. Die Konturen können in einer beliebigen Anzahl von Objekten gruppiert werden und müssen keine geschlossenen Linien bilden. All dies wird vom Makro übernommen. Intern wird aus jeder Kontur eine B-Spline erstellt, dann werden zwischen den Konturen Regelflächen erstellt, diese Regelflächen werden zu einem Shell-Objekt zusammengefasst und schließlich wird eine Arch Site erstellt, die diese Shell als Terrain verwendet.
Macro Site From Contours.FCMacro
# This macro builds an Arch Site object out of different level curves. # It doesn't matter how many object contain the curves or if they # are connected into wires or not. import FreeCAD,FreeCADGui,Part,Draft,DraftGeomUtils,Arch # first build a list of edges from selected objects edges = [] for obj in FreeCADGui.Selection.getSelection(): edges.extend(obj.Shape.Edges) # sort our edges into connected wires wires = DraftGeomUtils.findWires(edges) # build a bspline for each wire bsplines = [] for wire in wires: points = [] for vert in wire.Vertexes: points.append(vert.Point) bspline = Draft.makeBSpline(points) bsplines.append(bspline) # hide the bsplines for bspline in bsplines: bspline.ViewObject.hide() # sort the bsplines by elevation (we use the z of their first point to sort) bsplines.sort(key=lambda b: b.Points[0].z) # build one ruled surface from each pair of bsplines ruledsurfaces = [] for i in range(len(bsplines)-1): ruled = FreeCAD.ActiveDocument.addObject('Part::RuledSurface', 'TerrainSection') ruled.Curve1 = (bsplines[i],['']) ruled.Curve2 = (bsplines[i+1],['']) ruledsurfaces.append(ruled) # hide the ruled surfaces for ruled in ruledsurfaces: ruled.ViewObject.hide() # at this stade we need to recompute to build all the shapes before getting the faces FreeCAD.ActiveDocument.recompute() # make a shell object out of all the ruled surfaces faces = [] for ruled in ruledsurfaces: faces.extend(ruled.Shape.Faces) shell = Part.Shell(faces) terrain = FreeCAD.ActiveDocument.addObject('Part::Feature', 'Terrain') terrain.Shape = shell # make a site object using our shell as terrain site = Arch.makeSite() site.Terrain = terrain # recompute one last time FreeCAD.ActiveDocument.recompute()
Die Diskussion im Forum Create Toposurface from DXF