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
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)