2
$\begingroup$

I want to cut a model which otherwise would be too big to 3D print in 4 parts . I use the fastcarve add-on and use a plane to slice the model in 2 in the y-axis (|). When I then select a half and use another plane to slice it in the x-axis (-) the object isn't cut in half. Instead it seems like it seperates the part of the object that overlaps with the plane and cuts out those thin portions. What I'd like is a cut that seperates the upper from the lower portion (from each half).

The same happens when I join 2 planes to make a cutter (see images below).

How can I do this?

enter image description here enter image description here enter image description here

$\endgroup$
1
$\begingroup$

I don't know a lot about 3D print but maybe you could cut your object with the Boolean modifier (cut in half in my example to make it simple):

  • Create the object you want to cut, save a copy somewhere on a layer.
  • Create a cube, put it on the left side of your object.
  • Duplicate the whole thing (object + cube) with a shiftDenter.
  • Click M to put the duplications on layer 2.
  • Stay in layer 1, select your object and give it a Boolean modifier with the cube as Object.
  • Go in layer 2, duplicate the cube and stick it to the right of the first cube with the help of the Snap option (Vertex/Closest modes). Delete the left cube of this second layer.
  • Same thing as layer 1, give your layer 2 object a Boolean modifier, with the cube as Object.
  • Now you can apply the booleans, your object will be cut in half (half left and half right), and these two halves will perfectly match.
  • To divide by 4 you can duplicate 4 cubes (last picture), then duplicate these 4 cubes and the object 4 times in 4 layers, then keep one cube per layer and use a Boolean > Intersect mode on each object of each layer, you'll get 4 quarters.

enter image description here

| improve this answer | |
$\endgroup$
  • $\begingroup$ Thanks, I did something similar. I extrude the plane so i got a box and used the "interesect" option in the fast-carve addon (same thing as using a boolean modifier)...Weird that it will slice on the vertical axis but not on the horizontal... $\endgroup$ – apyl Feb 28 '19 at 13:36
4
$\begingroup$

Segment an object in X, Y and Z


Using a script written for blender 2.80

enter image description here Split this thing 4 in x 3 in z

I've been playing around with a bmesh bisect script that is a lot quicker, but unfortunately doesn't fill in the slices like a boolean. Here is a boolean modifier version.

The method is similar in using the bounding box to align the planes.

  1. Add a bisect plane, make it solid by adding a solidify modifier and thickness. Use the object dimensions to make sure it is both way bigger and thicker.
  2. Slice along the bounding box, shave a piece off as a dupe, flip the direction of thickness and shave that piece off original. By shave I am using boolean difference modifier enter image description here Example of reversing the boolean by negating the thickness of the solidify modifier
  3. Add a boolean difference modifer to object, make the plane the modifier object.

  4. Move the Plane to each cut location and repeat the process on result meshes for each axis.

  5. Clean up, remove the plane

.

The script. Edit segments_x, segments_y, segments_z to suit. (Splits in local coordinates)

import bpy
from mathutils import Matrix, Vector
context = bpy.context
ob = context.object
size = 4 * max(ob.dimensions)
mw = ob.matrix_world

def bbox(ob):
    return (Vector(b) for b in ob.bound_box)

def bbox_center(ob):
    return sum(bbox(ob), Vector()) / 8

def bbox_axes(ob):
    bb = list(bbox(ob))
    return tuple(bb[i] for i in (0, 4, 3, 1))

o, x, y, z = bbox_axes(ob)        

bpy.ops.mesh.primitive_plane_add(
        location=mw @ bbox_center(ob),
        size=size)
chopper = context.object
m = chopper.modifiers.new("Sol", type='SOLIDIFY')
m.thickness = size


chopper.select_set(False)

def chop(ob, start, end, segments):
    slices = []
    planes = [(f, start.lerp(end, f / segments)) 
            for f in   range(1, segments)]

    for i, p in planes:
        m.thickness = -size
        bm = ob.modifiers.new("BOOL",type="BOOLEAN")
        bm.object = chopper
        bm.operation = 'DIFFERENCE'
        M = (mw @ end - mw @ start).to_track_quat('Z', 'X').to_matrix().to_4x4()
        M.translation = mw @ p

        chopper.matrix_world = M
        cp = ob.copy()
        cp.data = cp.data.copy()
        context.scene.collection.objects.link(cp)
        bpy.ops.object.modifier_apply({"object" : cp}, modifier="BOOL")
        slices.append(cp)
        m.thickness = size
        bpy.ops.object.modifier_apply(
                {"object" : ob}, modifier = 'BOOL')
    slices.append(ob)
    return slices

segments_x = 4
segments_y = 1
segments_z = 3

for ox in chop(ob, o, x, segments_x):
    for oy in chop(ox, o, y, segments_y):
        chop(oy, o, z, segments_z)

bpy.data.objects.remove(chopper)
| improve this answer | |
$\endgroup$
  • $\begingroup$ Sorry for the late reply but I have been caught up in other things..Nonetheless thanks for sharing. I'll try this out one of these days. $\endgroup$ – apyl Mar 24 '19 at 19:32

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.