def getExtrusionData(self, obj): "returns (shape,extrusion vector,placement) or None" if hasattr(obj, "CloneOf"): if obj.CloneOf: if hasattr(obj.CloneOf, "Proxy"): if hasattr(obj.CloneOf.Proxy, "getExtrusionData"): data = obj.CloneOf.Proxy.getExtrusionData(obj.CloneOf) if data: return data if obj.Base: if obj.Base.isDerivedFrom("Part::Extrusion"): if obj.Base.Base: base, placement = self.rebase(obj.Base.Base.Shape) extrusion = FreeCAD.Vector(obj.Base.Dir) if extrusion.Length == 0: extrusion = FreeCAD.Vector(0, 0, 1) else: extrusion = placement.inverse().Rotation.multVec( extrusion) if hasattr(obj.Base, "LengthForward"): if obj.Base.LengthForward.Value: extrusion = extrusion.multiply( obj.Base.LengthForward.Value) return (base, extrusion, placement) elif obj.Base.isDerivedFrom("Part::MultiFuse"): rshapes = [] revs = [] rpls = [] for sub in obj.Base.Shapes: if sub.isDerivedFrom("Part::Extrusion"): if sub.Base: base, placement = self.rebase(sub.Base.Shape) extrusion = FreeCAD.Vector(sub.Dir) if extrusion.Length == 0: extrusion = FreeCAD.Vector(0, 0, 1) else: extrusion = placement.inverse( ).Rotation.multVec(extrusion) if hasattr(sub, "LengthForward"): if sub.LengthForward.Value: extrusion = extrusion.multiply( sub.LengthForward.Value) placement = obj.Placement.multiply(placement) rshapes.append(base) revs.append(extrusion) rpls.append(placement) else: exdata = ArchCommands.getExtrusionData(sub.Shape) if exdata: base, placement = self.rebase(exdata[0]) extrusion = placement.inverse().Rotation.multVec( exdata[1]) placement = obj.Placement.multiply(placement) rshapes.append(base) revs.append(extrusion) rpls.append(placement) if rshapes and revs and rpls: return (rshapes, revs, rpls) return None
def getExtrusionData(self,obj): "returns (shape,extrusion vector,placement) or None" if hasattr(obj,"CloneOf"): if obj.CloneOf: if hasattr(obj.CloneOf,"Proxy"): if hasattr(obj.CloneOf.Proxy,"getExtrusionData"): data = obj.CloneOf.Proxy.getExtrusionData(obj.CloneOf) if data: return data if obj.Base: if obj.Base.isDerivedFrom("Part::Extrusion"): if obj.Base.Base: base,placement = self.rebase(obj.Base.Base.Shape) extrusion = FreeCAD.Vector(obj.Base.Dir) if extrusion.Length == 0: extrusion = FreeCAD.Vector(0,0,1) else: extrusion = placement.inverse().Rotation.multVec(extrusion) if hasattr(obj.Base,"LengthFwd"): if obj.Base.LengthFwd.Value: extrusion = extrusion.multiply(obj.Base.LengthFwd.Value) return (base,extrusion,placement) elif obj.Base.isDerivedFrom("Part::MultiFuse"): rshapes = [] revs = [] rpls = [] for sub in obj.Base.Shapes: if sub.isDerivedFrom("Part::Extrusion"): if sub.Base: base,placement = self.rebase(sub.Base.Shape) extrusion = FreeCAD.Vector(sub.Dir) if extrusion.Length == 0: extrusion = FreeCAD.Vector(0,0,1) else: extrusion = placement.inverse().Rotation.multVec(extrusion) if hasattr(sub,"LengthFwd"): if sub.LengthFwd.Value: extrusion = extrusion.multiply(sub.LengthFwd.Value) placement = obj.Placement.multiply(placement) rshapes.append(base) revs.append(extrusion) rpls.append(placement) else: exdata = ArchCommands.getExtrusionData(sub.Shape) if exdata: base,placement = self.rebase(exdata[0]) extrusion = placement.inverse().Rotation.multVec(exdata[1]) placement = obj.Placement.multiply(placement) rshapes.append(base) revs.append(extrusion) rpls.append(placement) if rshapes and revs and rpls: return (rshapes,revs,rpls) return None