Blenderスクリプトでチョコレートブロック(その2)

旧Blender

「Blenderスクリプトでチョコレートブロック(その1)」の続きです。

チョコレートを受けるグラスを作ります。

回転体の元になるカーブから作ります。
各ポイントの座標は、手で先にグラスの形を作って求めると簡単です。

xyzs = [
( 0,       0, 0),
( 0,       0, 0),
(-2.19903, 0, -0.01731),
(-1.70155, 0, 0.29024),
( 0.14407, 0, 0.32944),
(-1.077,   0, 1.02418),
( 0.40246, 0, 2),
(-3.19444, 0, 2.09537),
(-3.52777, 0, 4.90455)]

回転体にして、

bpy.ops.object.modifier_add(type="SCREW")

厚みを持たせて、

bpy.ops.object.modifier_add(type="SOLIDIFY")

MESHに変換します。

bpy.ops.object.convert(target="MESH")

MESHにしたら、剛体設定を、チョコレートブロックを設定した時と同じく設定し、今度はPASSIVEに。

bpy.ops.rigidbody.object_add(type='PASSIVE')

あとこのままだと、チョコレートが宙に浮いてしまうので、collision_shapeをMESHにしておきます。

cube.rigid_body.collision_shape='MESH'

全スクリプトです。

import bpy

xyzs = [
( 0,       0, 0),
( 0,       0, 0),
(-2.19903, 0, -0.01731),
(-1.70155, 0, 0.29024),
( 0.14407, 0, 0.32944),
(-1.077,   0, 1.02418),
( 0.40246, 0, 2),
(-3.19444, 0, 2.09537),
(-3.52777, 0, 4.90455)]

cv=bpy.data.curves.new('Curve', type='CURVE')
cv.dimensions = '3D'
cv.resolution_u = 2

line = cv.splines.new('NURBS')
line.points.add(len(xyzs))
for i, xyz in enumerate(xyzs):
    x,y,z = xyz
    line.points[i].co = (x, y, z, 1)

o = bpy.data.objects.new('Curve', cv)

bpy.context.scene.objects.link(o)
bpy.context.scene.objects.active = o
o.select = True

bpy.ops.object.modifier_add(type="SCREW")
bpy.ops.object.modifier_add(type="SOLIDIFY")
bpy.ops.object.convert(target="MESH")

bpy.ops.rigidbody.object_add(type='PASSIVE')
cube.rigid_body.collision_shape='MESH'

コメント

  1. […] ← Blenderスクリプトでチョコレートブロック(その2) […]

タイトルとURLをコピーしました