def METHOD_NAME(self,obj):
    if self.props_changed_placement_only(obj) \
            or not obj.Base \
            or not obj.File \
            or not obj.Pattern \
            or not obj.Scale \
            or not obj.Pattern in self.getPatterns(obj.File) \
            or not obj.Base.isDerivedFrom("Part::Feature") \
            or not obj.Base.Shape.Faces:
        self.props_changed_clear()
        return
    import Part
    import TechDraw
    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)
    self.props_changed_clear()