示例#1
0
 def __init__(self, shaft, blade, n_blades):
     self.shaft_solid = shaft.generate_solid()
     blade.apply_transformations(reflect=True)
     blade_solid = blade.generate_solid(max_deg=2, 
                                        display=False, 
                                        errors=None)
     blades = []
     blades.append(blade_solid)
     for i in range(n_blades-1):
         blade.rotate(rad_angle=1.0*2.0*np.pi/float(n_blades))
         blade_solid = blade.generate_solid(max_deg=2, display=False, errors=None)
         blades.append(blade_solid)
     blades_combined = blades[0]
     for i in range(len(blades)-1):
         boolean_union = BRepAlgoAPI_Fuse(blades_combined, blades[i+1])
         boolean_union.Build()
         if not boolean_union.IsDone():
             raise RuntimeError('Unsuccessful assembling of blade')
         blades_combined = boolean_union.Shape()
     boolean_union = BRepAlgoAPI_Fuse(self.shaft_solid, blades_combined)
     boolean_union.Build()
     result_compound = boolean_union.Shape()
     sewer = BRepBuilderAPI_Sewing(1e-2)
     sewer.Add(result_compound)
     sewer.Perform()
     self.sewed_full_body = sewer.SewedShape()
示例#2
0
    def from_boolean_union(cls, A, B) -> 'BRep':
        """Construct a BRep from the boolean union of two other BReps.

        Parameters
        ----------
        A : :class:`~compas_occ.brep.BRep`
        B : :class:`~compas_occ.brep.BRep`

        Returns
        -------
        :class:`~compas_occ.brep.BRep`

        """
        fuse = BRepAlgoAPI_Fuse(A.shape, B.shape)
        if not fuse.IsDone():
            raise Exception("Boolean union operation could not be completed.")
        brep = BRep()
        brep.shape = fuse.Shape()
        return brep
示例#3
0
def occ_pair_union(a, b):
    algo = BRepAlgoAPI_Fuse(a, b)
    algo.Build()
    if not algo.IsDone():
        raise Exception("warn: union algotithm failed\n")
    return algo.Shape()