Opis |
---|
To makro pozwala wybrać serię obiektów zawierających linie poziomic i utworzyć na ich podstawie Arch Site. Linie poziomic mogą być pogrupowane w dowolną liczbę obiektów i nie muszą tworzyć zamkniętych przewodów — wszystko to zostanie automatycznie obsłużone przez makro. Wewnątrz makra z każdej poziomicy zostanie utworzona krzywa B-spline, następnie między poziomicami zostaną wygenerowane powierzchnie prostokreślne, które zostaną połączone w obiekt typu shell. Na koniec zostanie utworzony Arch Site, wykorzystujący tę powłokę jako teren. Macro version: 1.0 Last modified: 2018-08-30 FreeCAD version: All Download: Ikona paska narzędzi Autor: yorik |
Autor |
yorik |
Do pobrania |
Ikona paska narzędzi |
Odnośniki |
Przepisy na makropolecenia Jak zainstalować makrodefinicje Dostosowanie pasków narzędzi |
Wersja Makrodefinicji |
1.0 |
Data zmian |
2018-08-30 |
Wersja FreeCAD |
All |
Domyślny skrót |
Brak |
Zobacz również |
- |
To makro pozwala wybrać serię obiektów zawierających linie poziomic i utworzyć na ich podstawie Arch Site. Poziomice mogą być pogrupowane w dowolną liczbę obiektów i nie muszą tworzyć zamkniętych przewodów — wszystko to zostanie automatycznie obsłużone przez makro. Wewnątrz makra z każdej poziomicy zostanie utworzona krzywa B-spline, następnie między poziomicami zostaną wygenerowane powierzchnie prostokreślne, które zostaną połączone w obiekt typu shell. Na końcu zostanie utworzony Arch Site, wykorzystujący tę powłokę jako teren.
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()
Dyskusja na forum Create Toposurface from DXF