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()
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
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()