def CreateSections(self): FreeCADVersion = FreeCAD.Version() if FreeCADVersion[0] == '0' and int(FreeCADVersion[1]) < 19: FreeCAD.Console.PrintError( "This feature is only available on versions > 0.18") return try: self.SectionsGroup = FreeCAD.ActiveDocument.Sections except: self.SectionsGroup = FreeCAD.ActiveDocument.addObject( "App::DocumentObjectGroup", 'Sections') self.SectionsGroup.Label = "Sections" GuideLineIndex = self.IPFui.GLGCB.currentIndex() if GuideLineIndex < 0: FreeCAD.Console.PrintMessage("No Guide Lines Group") return GuideLineName = self.GuideLinesList[GuideLineIndex] GuideLine = FreeCAD.ActiveDocument.getObject(GuideLineName).Group # GuideLinesGroup = FreeCAD.ActiveDocument.GuideLines.Group CopyMesh = FreeCAD.ActiveDocument.Surface.Mesh.copy() Base = CopyMesh.Placement.Base CopyMesh.Placement.move(Base.negative()) for Wire in GuideLine: CopyShape = Wire.Shape.copy() CopyShape.Placement.move(Base.negative()) Param1 = MeshPart.findSectionParameters(CopyShape.Edge1, CopyMesh, FreeCAD.Vector(0, 0, 1)) Param1.insert(0, CopyShape.Edge1.FirstParameter + 1) Param1.append(CopyShape.Edge1.LastParameter - 1) Param2 = MeshPart.findSectionParameters(CopyShape.Edge2, CopyMesh, FreeCAD.Vector(0, 0, 1)) Param2.insert(0, CopyShape.Edge2.FirstParameter + 1) Param2.append(CopyShape.Edge2.LastParameter - 1) Points1 = [CopyShape.Edge1.valueAt(i) for i in Param1] Points2 = [CopyShape.Edge2.valueAt(i) for i in Param2] Section = MeshPart.projectPointsOnMesh(Points1 + Points2, CopyMesh, FreeCAD.Vector(0, 0, 1)) Pwire = Draft.makeWire(Section) Pwire.Placement.move(Base) self.SectionsGroup.addObject(Pwire) FreeCAD.ActiveDocument.recompute()
def drawSecViews(self, pos): import math _position = pos _counter = 0 _buffer = 10000 GuideLineName = self.GuideLinesList[self.GuideLineIndex] guide_lines = FreeCAD.ActiveDocument.getObject(GuideLineName).Group multi_views_nor = math.ceil(len(guide_lines)**0.5) view_width = [] view_heigth = [] for guide_line in guide_lines: _origin = None for SelectedItem in self.IPFui.SelectSurfacesLW.selectedItems(): _surface = self.SurfacesList[SelectedItem.text()] _points = [] for _edge in guide_line.Shape.Edges: _params = MeshPart.findSectionParameters( _edge, _surface.Mesh, FreeCAD.Vector(0, 0, 1)) _params.insert(0, _edge.FirstParameter + 1) _params.append(_edge.LastParameter - 1) _values = [_edge.valueAt(i) for i in _params] _points += _values section_points = MeshPart.projectPointsOnMesh( _points, _surface.Mesh, FreeCAD.Vector(0, 0, 1)) sec_points_2d = self.convert2View(section_points, _origin) _section = Draft.makeWire(sec_points_2d) view_width.append([ min(i.x for i in sec_points_2d), max(i.x for i in sec_points_2d) ]) view_heigth.append([ min(i.y for i in sec_points_2d), max(i.y for i in sec_points_2d) ]) _section.Placement.move(_position) self.SectionsGroup.addObject(_section) _origin = section_points[0] if _counter == multi_views_nor: _dx = max(i[1] for i in view_width) - min(i[0] for i in view_width) _shifting = _position.x - pos.x + _buffer _reposition = FreeCAD.Vector(_dx + _shifting, 0, 0) _position = pos.add(_reposition) view_width.clear() view_heigth.clear() _counter = 0 else: _dy = max(i[1] for i in view_heigth) - min(i[0] for i in view_heigth) _reposition = FreeCAD.Vector(0, -(_dy + _buffer), 0) _position = _position.add(_reposition) view_heigth.clear() _counter += 1 FreeCAD.ActiveDocument.recompute()