![見出し画像](https://assets.st-note.com/production/uploads/images/55753766/rectangle_large_type_2_ed601662316aef71de379333e43c82e7.png?width=800)
【Blender Python】平面でオブジェクトを切断する
平面でオブジェクトを切断する方法を紹介します。
流石にこれだけでは芸がないので、必要なオブジェクトだけ切断する例を作ってみました。
Blenderのバージョンは2.93 LTSです。
1. コード
import bpy
# 既存のメッシュオブジェクトを削除
for msh in bpy.data.meshes:
bpy.data.meshes.remove(msh)
# 3つの立方体を配置
bpy.ops.mesh.primitive_cube_add(location=(-3, 0, 0))
my_cube1 = bpy.context.object
my_cube1.name = 'cube_a_1'
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 0))
my_cube2 = bpy.context.object
my_cube2.name = 'cube_b'
bpy.ops.mesh.primitive_cube_add(location=(3, 0, 0))
my_cube3 = bpy.context.object
my_cube3.name = 'cube_a_2'
# 平面を配置
verts = [[-5, -2, -1], [5, -2, -1], [5, 2, 1], [-5, 2, 1]]
faces1 = [[3, 2, 1, 0]]
msh1 = bpy.data.meshes.new("cubemesh1") #Meshデータの宣言
msh1.from_pydata(verts, [], faces1) # 頂点座標と各面の頂点の情報でメッシュを作成
my_plane1 = bpy.data.objects.new("plane1", msh1) # メッシュデータでオブジェクトを作成
bpy.context.scene.collection.objects.link(my_plane1) # シーンにオブジェクトを配置
# 必要なオブジェクトだけ切断する
for obj in bpy.data.objects:
if 'cube_a' in obj.name:
# Modifierを追加
mod1 = obj.modifiers.new('bool1', 'BOOLEAN')
mod1.operation = 'DIFFERENCE'
mod1.object = my_plane1
mod1.solver = 'EXACT'
# Modifierを適用
bpy.context.view_layer.objects.active = obj
bpy.ops.object.modifier_apply(modifier='bool1')
# 不要な平面を除去
bpy.data.objects.remove(my_plane1, do_unlink=True)
名前に 'cube_a' が含まれているオブジェクトのみ切断します。
切断した後にどちら側が残るのかは平面の向きによるので、平面を作成するときには方向に気を付けましょう。
平面の作り方は前回の記事
とは違いますが、どちらのやり方でも同じように動きます。
2. 実行結果
真ん中の立方体(cube_b)は切断されていないのが分かりますね。
まとめ
今回は平面でオブジェクトを切断する方法を紹介しました。
切断面の形状がどんな風になっているか知りたい、みたいなときに使えるかと思います。
この記事が気に入ったらサポートをしてみませんか?