I have loaded an stl file and want to do some boolean stuff on it using python API (see code below). First I create the bevel spline and move the end points where I want them. Then I create a boolean modifier and try to union with the bevel-curve. After that want to subtract the union from a cube to make a hole.
But the curve can't be assigned as the object of the union; not even manually and I don't even get an error. Nothing happens. I can set the surrounding cube as the object and that works fine.
So is there something wrong with using bezier curves in boolean modifiers or am I doing something else wrong.
# ------- Model stuff ------- #bpy.ops.import_mesh.stl(filepath="K:/PQJ/Mold Generator/Blender test/Sphere_Full_40.stl", filter_glob="*.stl", files=[{"name":"Sphere_Full_40.stl", "name":"Sphere_Full_40.stl"}], directory="K:/PQJ/Mold Generator/Blender test") bpy.ops.import_mesh.stl(filepath="K:/PQJ/Mold Generator/Blender test/898L-OutputModel-SLA[]_09.stl", filter_glob="*.stl", files=[{"name":"898L-OutputModel-SLA[]_09.stl", "name":"898L-OutputModel-SLA[]_09.stl"}], directory="K:/PQJ/Mold Generator/Blender test") model = bpy.context.active_object # ------- Mold stuff ------- mold_size = (20,30,30) mold_displace = (mold_size[0]/2.0,mold_size[1]/2.0,mold_size[2]/2.0) #mold_displace = (10,10,15) bpy.ops.mesh.primitive_cube_add(enter_editmode=False, align='WORLD', location=mold_displace, scale=mold_size) mold = bpy.context.active_object # New objects are selected by default # ------- In- and outflow stuff ------- bpy.ops.curve.primitive_bezier_curve_add(radius=10, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1)) curve = bpy.context.active_object bpy.ops.curve.primitive_bezier_circle_add(radius=0.5, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1)) profile = bpy.context.active_object curve.data.bevel_object = bpy.data.objects["BezierCircle"] curve.data.splines[0].bezier_points[0].co = (-0.01, mold_size[1]/2, mold_size[2]/2) curve.data.splines[0].bezier_points[0].handle_left = (-1, curve.data.splines[0].bezier_points[0].co[1], curve.data.splines[0].bezier_points[0].co[2]) curve.data.splines[0].bezier_points[0].handle_right = ( 1, curve.data.splines[0].bezier_points[0].co[1], curve.data.splines[0].bezier_points[0].co[2]) curve.data.splines[0].bezier_points[1].co = (5,13,10) curve.data.splines[0].bezier_points[1].handle_left = ( 1, curve.data.splines[0].bezier_points[1].co[1], curve.data.splines[0].bezier_points[1].co[2]) curve.data.splines[0].bezier_points[1].handle_right = (-1, curve.data.splines[0].bezier_points[1].co[1], curve.data.splines[0].bezier_points[1].co[2]) # ------- Boolean ------- bool_model = model.modifiers.new(type="BOOLEAN", name="bool mold") # create and store a modifier bool_model.object = curve bool_model.operation = 'UNION' #model.hide_viewport = True #bool_mold = mold.modifiers.new(type="BOOLEAN", name="bool mold") # create and store a modifier #bool_mold.object = model #bool_mold.operation = 'DIFFERENCE' #model.hide_viewport = True !!! EDIT: I see the same when I try manually. I find this totally bizarre. I have subtracted large objects from stl with 50000 faces each. So why can't I use bool on a simple bend cylinder? It is even meshed! I just happen to know even more about it than just the mesh. So just forget that it's a curved bevel and just use the mesh.


