9

Attached is an example in which difference modifier behaves like union.

Is this is a bug (I think so)? See this .blender example in which I tried to use boolean modifier difference (Child is subtracted from Parent so modifier is on Parent)

Behavior

In both, the expected behavior is difference, but actual behavior is union

Failed attempts

Before posting here I:

  1. Checked that my objects were manifolds
  2. Checked that normals are pointing outwards (Edit Mode -> Select All -> Ctrl N)
  3. No shared faces between any two objects
  4. Removing doubles (double vertices)
  5. Converting to triangles

I have read extensively on StackExchange and other forums, and watched guides, including this very relevant guide.

Any advice would be much appreciated.

Ben
  • 91
  • 1
  • 3
  • Blender Developer forum (See this bug), – Ben Jun 24 '15 at 16:27
  • I usually try to avoid the boolean modifier because it has bugs, I'll try and take a look a your .blend file later, if I don't see anything wrong with how you're setting up the boolean, I'll show you some (better imo) alternatives to the boolean modifier. – TARDIS Maker Jun 24 '15 at 18:03
  • Tips on removing doubles in BlenderArtist – Ben Jun 24 '15 at 19:19
  • Related: http://blender.stackexchange.com/q/5140/599, http://blender.stackexchange.com/q/14085/599, and http://blender.stackexchange.com/q/7910/599. Also see this bug report. – gandalf3 Jun 24 '15 at 20:14
  • I appended the child to a new .blend (so I just have the child by itself) and when I try to move it, it won't move. Is the object complex and it's not responding right away (lag), or is there another problem. I looked at the child to see if it's manifold, and CTRL-ALT-SHIFT-M shows it as manifold; however, I have another tool (3D Printing), which tries to fix non-manifold, and does nothing when an object is manifold (or so I've discovered so far on other projects), and that tool butchers it up, which means the 3D printing Non-manifold tool is treating the child like it's non-manifold. – Cyberchipz Aug 06 '15 at 15:27
  • I done some simple boolean modifications on some things, and I've discovered if the faces are perfectly aligned, meaning a face of A and a face of B are aligned such that there is no gap the boolean won't work. But, moving one face such that it overlaps by even a small amount, the boolean works. Usually the error caused by this is small enough in the overall design it makes no difference, even in printing, which is mostly what I design for, right now. Is this what you meant @gandalf3 – Cyberchipz Aug 06 '15 at 15:32
  • OK, disregard why the child won't resize or move, it's locked. My apologies, I never used the locks before; but I finally noticed that it's locked and that's why I can't transform the child. lol Sorry. – Cyberchipz Aug 06 '15 at 16:10
  • I think I found it; when I appended only the parent object, I discoverd that there is a child embedded in it; When I removed the second child, I was able to boolean difference a child object, and it worked. Because everything was locked, it was impossible to see the second child object as it matched perfectly with the parent. I'm not sure why I didn't see it in the Outliner. Yes, in the original file, open an outliner window and expand the parent, one can see the cylinder011 attached to the parent. – Cyberchipz Aug 06 '15 at 16:18
  • I've got to check what I'm saying better... For some reason, when I append the child, then append the parent separately, the parent carries the child with it. I'm a bit confused. To duplicate: Create new blend, library append child, unlock it and move it away. Library append the parent, and the child comes along. This seems normal if truely parent and child; but, I can't see how they're linked. (sigh... still a noob.) – Cyberchipz Aug 06 '15 at 18:00

2 Answers2

4

You are trying to use a simple plane as boolean operand here - which is by definition not manifold (a manifold surface must be closed, since all its edges have to have two and only two faces). Behavior of booleans in this case is never really ensured…

Also, your 3DView only shows objects enabled for rendering, and your 'ObjA' object is disabled for rendering, so it's completely hidden from 3DView.

Other than that, I see no issue with this .blend, if there are please be more specific.

mont29
  • 3,437
  • 14
  • 17
  • Thank you. I have revised the file such that all objects are selectable, renderable and visible in 3d View. I have also made solidified the plane such that now it is a manifold. The Problem remains: Boolean operator Difference is behaving like union – Ben Jun 24 '15 at 19:08
3

I could confirm the odd behaviour and found a way to work around it.

The coil shaped object has two edge loops that exists in the same space, the one on top and the one in the bottom.

So I selected the bottom one (Alt + right click) and moved it up a tiny tiny amount. G z 0.001

Now the boolean modifier works.

bottom edge loop nudged up

bottom loop in coil

Gunslinger
  • 6,392
  • 2
  • 28
  • 40
  • You beat me to it ;) – gandalf3 Jun 24 '15 at 20:28
  • Thank you for confirming the behavior (so that I can post a bug). How did you find which is the problematic loop? Did you have to change just one vertex or the whole coil? Thanks again. – Ben Jun 24 '15 at 20:46
  • I changed the bottom loop of the whole coil. See new screenshot. – Gunslinger Jun 25 '15 at 09:48
  • 1
    @Ben, manifold also means no self-intersection. It can also help to reduce the amount of geometry and use e.g. array after boolean. – user2859 Jun 25 '15 at 12:38
  • Same problem with simper geometries: In this example I am unable to substract ObjA from ObjB. See how Difference, Union, and Intersect - all perform unexpectedly.

    I still don't have a method of solving these.

    – Ben Jun 25 '15 at 15:33
  • I run into this issue all the time. It can be seen in simple objects like two cubes. If I make a cube 2x2x2 and duplicate it, and move it 2 along the X axis, I will have two cubes with two faces that are in the same space. Ideally, when one wants to join two objects, this would be the perfect solution as they'd make one 4x2x2 object. However the boolean operator won't allow this; and I also think it's a bug because theoretically the two faces should be non-existent after the boolean union, but mathematically 1&1=1 which would leave an inner face, and therefore non-manifold. – Cyberchipz Aug 06 '15 at 17:51
  • Either move it a bit, as suggested in this answer, or make the Parent a tiny bit smaller at both ends, or make the child a tiny bit bigger. I always make the part I'm subtracting bigger than the thing I want to subtract from. If your shrink the Parent cylinder so it exists between the top and bottom (Z) it will make your thread cuts perfectly. So, duplicate the child, move it up and join them (or boolean union) making sure threads align, then it should work perfectly for removal. – Cyberchipz Aug 06 '15 at 17:56