Esempio n. 1
0
 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
Esempio n. 2
0
 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