コード例 #1
0
    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()
コード例 #2
0
    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()