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
Beispiel #6
0
    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
Beispiel #9
0
    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