0
$\begingroup$

My goal is to generate a model composed of many partially overlapping cubes. But I need to get rid of the parts where they overlap, so I have a single mesh without any intersections. One of the purposes is 3D printing. With the boolean modifier I can make it work sometimes, but often the resulting model is totally corrupt (missing parts, weird geometry, non-manifold). BMesh and Carve both have issues. I've had the same experience with the boolean modifier in e.g. Sketchup.

So my question here is how would I manually connect these cubes and remove the overlap? Eventually I will have to do this in Python, but I can't program it if I don't know how to do it to begin with...

Image of example model with partially overlapping cubes:

Image of example model with partially overlapping cubes

Image showing inside of example model with internal geometry removed:

Image showing inside of example model with internal geometry removed

Rules:

  • Each cube has the same height (Z scale)
  • Each cube belongs to a certain 'floor'
  • Therefore each 'floor' has the same height
  • The difference in Z location between two following floors is the same (floors are distributed evenly)
  • Every cube on a higher floor is supported by at least one cube from the floor directly below it (meaning no cube will float in the air, except for cubes on floor 0)
  • Cubes on the same floor may intersect each other (I didn't show this in the example images)

Basically it's a tower of cubes with dedicated 'floors', like a building. But each floor is pushed down a little to overlap the floor below it.

The way I think I should tackle this is as follows:

  1. Place all the cubes in correct position, but without pushing down each floor (so no overlap, only touching)
  2. Calculate the places where the faces touch using the Shapely for Blender Python module (using 2D boolean operations)
  3. Cut a hole with the Knife project for each of these parts where the faces touch
  4. Somehow merge/connect the vertices which surround the newly cut hole - this should connect the previously separate floors
  5. Continue with 2, 3 and 4 until finished
  6. Select the faces that face down (except for the faces of floor 0) and pull them down a bit to create the overlap which we didn't make at step 1

I hope I'm on the right track here. I can do step 1 and 2 but from step 3 I don't know how. It sure would have been nice if the Bool Tool Auto Boolean Union would have worked for me but unfortunately that's not the case. I've included a simple example Blend file, as well as a complex one where the Bool Tool fails.

I'm using Blender Version 2.78c.

$\endgroup$
0
$\begingroup$

Turns out Python+Blender is not the right tool for the job. I used Python+OpenSCAD instead and so far I have not experienced any issues with the union boolean modifier. Glad to find out there's an easy solution that just works and that there's no need to do any complex stuff in Blender.

From OpenSCAD I can export to STL and import in Blender if I need to do some manual adjustments.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.