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$

2 Answers 2

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

$\endgroup$
1
  • $\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
    Commented Feb 28, 2019 at 13:36
8
$\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)

Related

Create Cross Sections and 2D planes in Blender

Render 2D cross sections of 3D Objects

Python: Bisect mesh into n parts, without separate 'LOOSE'

$\endgroup$
1
  • $\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
    Commented Mar 24, 2019 at 19:32

You must log in to answer this question.

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