def noCollision(ftrs): ftrs = ftrlist(ftrs) shps = [] for ftr in ftrs: if isDerivedFrom(ftr, ("Part::Compound", Compound)): shps.append(Shapes.fuse(outftr.Shape for outftr in ftrlist(ftr.OutList))) else: shps.append(ftr.Shape) vol_sum = sum(shp.Volume for shp in shps) vol_fus = Shapes.fuse(shps).Volume return fuzzyCompare(vol_sum, vol_fus)
def execute(self, obj): V = getattr(obj, "ViewBox", None) mbb = boundBoxOf(V) if V is not None else None expr = self.getSymPyExpression(obj) if isDerivedFrom(obj, "Part::FeaturePython"): shape = Shapes.construct(expr, mbb) obj.Shape = Shapes.reshape(shape) elif isDerivedFrom(obj, "Mesh::FeaturePython"): mesh = Meshes.construct(expr, mbb) obj.Mesh = Meshes.remesh(mesh) else: raise TypeError
def _trace(obj, outobjs=None, N=4): if outobjs is None: outobjs = ftrlist(obj.OutList) outinds = Shapes.trace(obj.Shape, [outobj.Shape for outobj in outobjs], N) links = [subFaceLinksOf(outobj) for outobj in outobjs] outlinks = [links[ind[0]][ind[1]] if ind is not None else None for ind in outinds] return outlinks
def massOf(obj): if obj is None: return 0.0 elif isDerivedFrom(obj, "Part::Feature"): return Shapes.mass(obj.Shape) elif isDerivedFrom(obj, "Mesh::Feature"): return Meshes.mass(obj.Mesh) else: raise TypeError
def centerOf(obj): if obj is None: return FreeCAD.Vector() elif isDerivedFrom(obj, "Part::Feature"): return Shapes.center(obj.Shape) elif isDerivedFrom(obj, "Mesh::Feature"): return Meshes.center(obj.Mesh) else: raise TypeError
def execute(self, obj): if obj.Origin is None: obj.Shape = Part.Shape() return if isDerivedFrom(obj.Origin, "Part::Compound"): ftrs = obj.Origin.Links elif isDerivedFrom(obj.Origin, Compound): ftrs = obj.Origin.Sources else: raise TypeError if isDerivedFrom(obj, "Part::FeaturePython"): shapes = [] for ftr in ftrs: shape = Shapes.reshape(ftr.Shape) center = Shapes.center(shape) if center is None: R = FreeCAD.Vector(0,0,0) else: R = center - obj.Base shift = R*obj.Ratio - R shape.Placement = FreeCAD.Placement(shift, FreeCAD.Rotation()) shapes.append(shape) obj.Shape = Shapes.compound(shapes) obj.Outfaces = trace(obj) if P.autotrace else [] elif isDerivedFrom(obj, "Mesh::FeaturePython"): meshes = [] for ftr in ftrs: mesh = meshOf(ftr, remeshed=True) center = Meshes.center(mesh) if center is None: R = FreeCAD.Vector(0,0,0) else: R = center - obj.Base shift = R*obj.Ratio - R mesh.translate(*shift) meshes.append(mesh) obj.Mesh = Meshes.compound(meshes) else: raise TypeError
def execute(self, obj): if isDerivedFrom(obj, "Part::FeaturePython"): obj.Shape = Shapes.compound(s.Shape for s in obj.Sources) obj.Placement = FreeCAD.Placement() obj.Outfaces = trace(obj) if P.autotrace else [] elif isDerivedFrom(obj, "Mesh::FeaturePython"): obj.Mesh = Meshes.compound(meshOf(s) for s in obj.Sources) obj.Placement = FreeCAD.Placement() else: raise TypeError
def execute(self, obj): if isDerivedFrom(obj, "Part::FeaturePython"): obj.Shape = Shapes.reshape(obj.Source.Shape) obj.Placement = spexpr2fcexpr(self.getSymPyTransformation(obj)) obj.Outfaces = trace(obj) if P.autotrace else [] elif isDerivedFrom(obj, "Mesh::FeaturePython"): obj.Mesh = meshOf(obj.Source, remeshed=True) obj.Placement = spexpr2fcexpr(self.getSymPyTransformation(obj)) else: raise TypeError
def execute(self, obj): if isDerivedFrom(obj, "Part::FeaturePython"): obj.Shape = Shapes.common([obj.Origin.Shape, obj.Masker.Shape]) obj.Placement = FreeCAD.Placement() obj.Outfaces = trace(obj) if P.autotrace else [] elif isDerivedFrom(obj, "Mesh::FeaturePython"): obj.Mesh = Meshes.common([meshOf(obj.Origin), meshOf(obj.Masker)]) obj.Placement = FreeCAD.Placement() else: raise TypeError