def expandplacements(obj,placement): ownplacement=placement.multiply(obj.Placement) if obj.isDerivedFrom('Part::FeaturePython') and isinstance(obj.Proxy,MatrixTransform): #expandplacementsmatrix(obj,ownplacement.toMatrix()) expandplacementsmatrix(obj,placement.toMatrix()) elif likeprimitive(obj,False): obj.Placement=ownplacement elif obj.isDerivedFrom('Part::Mirroring'): import OpenSCADUtils mm = OpenSCADUtils.mirror2mat(obj.Normal,obj.Base) #todo: set the base to 0,0,0 innerp=FreeCAD.Placement(mm * ownplacement.toMatrix() *mm) expandplacements(obj.Source,innerp) obj.Placement=FreeCAD.Placement() else: for outobj in obj.OutList: if obj.isDerivedFrom('Part::Extrusion'): obj.Dir=ownplacement.Rotation.multVec(obj.Dir) elif obj.isDerivedFrom('Part::Revolution'): obj.Axis=ownplacement.Rotation.multVec(obj.Axis) #obj.Base=ownplacement.Rotation.multVec(obj.Base) expandplacements(outobj,ownplacement) obj.Placement=FreeCAD.Placement()
def expandplacements(obj,placement): ownplacement=placement.multiply(obj.Placement) if obj.isDerivedFrom('Part::FeaturePython') and isinstance(obj.Proxy,MatrixTransform): #expandplacementsmatrix(obj,ownplacement.toMatrix()) expandplacementsmatrix(obj,placement.toMatrix()) elif likeprimitive(obj,False): obj.Placement=ownplacement elif obj.isDerivedFrom('Part::Mirroring'): import OpenSCADUtils mm = OpenSCADUtils.mirror2mat(obj.Normal,obj.Base) #TODO: set the base to 0,0,0 innerp=FreeCAD.Placement(mm * ownplacement.toMatrix() *mm) expandplacements(obj.Source,innerp) obj.Placement=FreeCAD.Placement() else: for outobj in obj.OutList: if obj.isDerivedFrom('Part::Extrusion'): obj.Dir=ownplacement.Rotation.multVec(obj.Dir) elif obj.isDerivedFrom('Part::Revolution'): obj.Axis=ownplacement.Rotation.multVec(obj.Axis) #obj.Base=ownplacement.Rotation.multVec(obj.Base) expandplacements(outobj,ownplacement) obj.Placement=FreeCAD.Placement()