2012年2月29日水曜日

blender - 2.6 - pythonで面の面積

前回のを改造して面の面積を求めて見ます。

三角形の面積というと、
2Dでは、底辺x高さ÷2
3Dでは、外積の大きさ÷2
です。

BlenderはOpenGLで面の頂点番号もOpenGLと同じく、反時計回りです。

0
|
|
1---2

といった感じで三角形になっています。
よって、選択した三角形の面積を表示するなら次のようになります。


import bpy

context = bpy.context

if (context.active_object != None):
object = bpy.context.active_object

if (object.type == "MESH"):
faces = object.data.faces
vertices = object.data.vertices
for f in faces:
if (f.select):
vi = f.vertices
a = vertices[vi[2]].co - vertices[vi[1]].co
b = vertices[vi[0]].co - vertices[vi[1]].co
c = a.cross(b)
print(c.length / 2)



で、これをもっと簡単にして、さらに四角形にも対応させると、次のようになります。


import bpy

context = bpy.context

if (context.active_object != None):
object = bpy.context.active_object

if (object.type == "MESH"):
faces = object.data.faces
vertices = object.data.vertices
for f in faces:
if (f.select):
print(f.area)


さすがBlender、計算するまでもないですね!
(続く)

0 件のコメント: