Beispiel #1
0
    def execute(self, obj):

        import Part
        import TechDraw

        if not obj.Base:
            return
        if not obj.File:
            return
        if not obj.Pattern:
            return
        if not obj.Scale:
            return
        if not obj.Pattern in self.getPatterns(obj.File):
            return
        if not obj.Base.isDerivedFrom("Part::Feature"):
            return
        if not obj.Base.Shape.Faces:
            return

        pla = obj.Placement
        shapes = []
        for face in obj.Base.Shape.Faces:
            face = face.copy()
            if obj.Translate:
                bpoint = face.CenterOfMass
                norm = face.normalAt(0, 0)
                fpla = FreeCAD.Placement(
                    bpoint, FreeCAD.Rotation(FreeCAD.Vector(0, 0, 1), norm))
                face.Placement = face.Placement.multiply(fpla.inverse())
            if obj.Rotation:
                face.rotate(FreeCAD.Vector(), FreeCAD.Vector(0, 0, 1),
                            obj.Rotation)
            shape = TechDraw.makeGeomHatch(face, obj.Scale, obj.Pattern,
                                           obj.File)
            if obj.Rotation:
                shape.rotate(FreeCAD.Vector(), FreeCAD.Vector(0, 0, 1),
                             -obj.Rotation)
            if obj.Translate:
                shape.Placement = shape.Placement.multiply(fpla)
            shapes.append(shape)
        if shapes:
            obj.Shape = Part.makeCompound(shapes)
            obj.Placement = pla
Beispiel #2
0
    def execute(self, obj):

        import Part
        import TechDraw

        if not obj.Base:
            return
        if not obj.File:
            return
        if not obj.Pattern:
            return
        if not obj.Scale:
            return
        if not obj.Pattern in self.getPatterns(obj.File):
            return
        if not obj.Base.isDerivedFrom("Part::Feature"):
            return
        if not obj.Base.Shape.Faces:
            return

        shapes = []
        for face in obj.Base.Shape.Faces:
            if face.findPlane():  # Only planar faces.
                face = face.copy()
                if obj.Translate:
                    mtx = None
                    w = face.normalAt(0, 0)
                    # Try to base a matrix on the first straight edge with
                    # a reasonable length (> 0.001):
                    for e in face.Edges:
                        if geomType(e) == "Line":
                            sta = e.firstVertex().Point
                            end = e.lastVertex().Point
                            u = end.sub(sta)
                            if u.Length > 0.001:
                                u = u.normalize()
                                v = w.cross(u)
                                mtx = App.Matrix(u.x, v.x, w.x, sta.x, u.y,
                                                 v.y, w.y, sta.y, u.z, v.z,
                                                 w.z, sta.z, 0.0, 0.0, 0.0,
                                                 1.0)
                                break
                    # If no suitable straight edge was found use a default matrix:
                    if not mtx:
                        cen = face.CenterOfMass
                        rot = App.Rotation(App.Vector(0, 0, 1), w)
                        mtx = App.Placement(cen, rot).Matrix
                    face = face.transformGeometry(mtx.inverse()).Faces[0]
                if obj.Rotation.Value:
                    face.rotate(App.Vector(), App.Vector(0, 0, 1),
                                -obj.Rotation)
                shape = TechDraw.makeGeomHatch(face, obj.Scale, obj.Pattern,
                                               obj.File)
                if obj.Rotation.Value:
                    shape.rotate(App.Vector(), App.Vector(0, 0, 1),
                                 obj.Rotation)
                if obj.Translate:
                    shape = shape.transformGeometry(mtx)
                shapes.append(shape)
        if shapes:
            obj.Shape = Part.makeCompound(shapes)