3
$\begingroup$

I have a sphere with wall thickness that is separated for 3D print to 36 pieces that intersect a little. I need to randomly pierce it by holes. So I a made the 36 pieces a one object, model the cylinders also made them one object and then tried to subtract them from the sphere. As I expected, the Boolean went mad and it turned out badly. How to achieve the desired model with working Boolean or in other way?boolean Here is my file.

$\endgroup$

1 Answer 1

5
$\begingroup$

Answer A:
The reason it doesnt work is that you have a very bad (unecessarily huge and unstructered) topology (See 1). Using a fresh and nicely subdivided icosphere/uv-sphere the boolean operation should work better. (See 2) I'd also suggest to use simple topology cylinders with bevels instead of those highpoly triangled ones. I'd say build it from scratch and lowpoly, but if you dont want to, to keep your creases/trenches you could also try the new remeshing options (Voxel/ Quadriflow) to get some clean topology. Your specific modell is easily reproduced using a mirror-modifier workflow, after extracting the necessery parts from an UV-Sphere via Separate. (See 4, m-mod is not applied yet in image)

enter image description here

Answer B:
Workaround for unreliable boolean modifier when using a loose parts cutter objects - meaning the cutting objekt has multiple unconnected polygroups inside: Separate your cutting object by loose parts and apply to every loose part to be cut a boolean modifier per loose part cutting object.(per cylinder in this case) Doing this by hand is tedious! Here is a script to set boolean modifiers to the active object for every single object in a specified collection:

import bpy

#boolean modifier will be applyied to active object
obj_base = bpy.context.object
#per object in collection named "Coll_Cutter" the active objects gets one boolean modifier
collCutter_name = "Coll_Cutter"


for c in bpy.data.collections:
    print(c.name)
    if c.name == collCutter_name:
        cutterlist = c.all_objects

for cutter in cutterlist:
    bool_one = obj_base.modifiers.new(type="BOOLEAN", name="bool 1")
    bool_one.object = cutter
    bool_one.operation = 'DIFFERENCE'

enter image description here

$\endgroup$
11
  • $\begingroup$ Actually I started from a clean topology and the boolean didnt work as well. If I subtract from one sphere it is OK but as soon as I divide it to those 36 pieces and i add thickness it cause a mess. I can divide iso sphere as clean as normal uv sphere. $\endgroup$
    – Fowl
    Commented Jan 30, 2020 at 9:29
  • $\begingroup$ i dindt realise that the mesh has loose parts. 1 You could separate it by loose parts and apply the modifier via linking (Ctrl+L) to all the parts. 2. generally a rule of thumb that makes many things easier is working from simple to conplex: in this case id suggest to get the thickness with a solidify modifier, after cutting the holes. This way you would reduce the complexity of the boolean oeration, therefore strengthen its sucess, and also keep a clean topology. $\endgroup$
    – A M
    Commented Jan 30, 2020 at 9:58
  • $\begingroup$ Oh yes, that didn't come to my mind that I can separate them but keep the modifier for all of them. Or try thickness after the boolean. Will try, I guess the separation will do. $\endgroup$
    – Fowl
    Commented Jan 30, 2020 at 10:46
  • $\begingroup$ Hmm, it did the same thing as before :-/ $\endgroup$
    – Fowl
    Commented Jan 30, 2020 at 12:16
  • $\begingroup$ if you update the file i can take a look at it $\endgroup$
    – A M
    Commented Jan 30, 2020 at 12:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .