メッシュ・データを調べる
メッシュのデータ構造
メッシュは突き詰めれば点の集まりで、点と点を結んで線を作り、線と線を結んで面を作る。点は頂点、線はエッジ、面はフェイスと呼ばれる。呼び名が和洋でちゃんぽんなのが日本らしいけど、慣例にしたがってその様に呼ぶ。
Blenderでは頂点の集まりをverticesプロパティで表現し、エッジの集まりをedgesプロパティ、フェイスの集まりをpolygonsプロパティで表現している。Polygonは多角形という意味だったかなと思うけど、慣例ということで、ここでもちゃんぽんで使うことになると思う。
polygons
polygonsプロパティは、面の情報が集められている。Cubeオブジェクトは正6面体なので、四角いポリゴンが6面ある。
ポリゴンの枚数は、lenメソッドを使って調べることができる。
>>> print(len(bpy.data.meshes["Cube"].polygons))
6
edges
edgesプロパティは、線の情報が集められている。Cubeオブジェクトには12のエッジがある。エッジの数は先ほどのスクリプトをちょっと修正すれば調べられる。
>>> print(len(bpy.data.meshes["Cube"].edges))
12
vertices
verticesプロパティは、メッシュ・データから参照できるものと、polygonsプロパティ、edgesプロパティから参照できるものがある。
頂点としての情報を持っているのは、メッシュ・データから参照できるもので、Cubeオブジェクトであれば8つの頂点を持っている。
>>> print(len(bpy.data.meshes["Cube"].vertices))
8
頂点座標を参照したければ、coプロパティ(coordinateの略)を見ればいい。Vector型の値が返ってくる。
>>> bpy.data.meshes["Cube"].vertices[0].co
Vector((1.0, 1.0, 1.0))
polygonsプロパティから参照できるverticesプロパティには、フェイスを構成する4つの頂点の情報が入る。
>>> print(len(bpy.data.meshes["Cube"].polygons[0].vertices))
4
ただし、頂点そのものの情報が入っているのではないので、coプロパティを参照するとエラーとなる。
>>> bpy.data.meshes["Cube"].polygons[0].vertices[0].co
Traceback (most recent call last):
File "<blender_console>", line 1, in <module>
AttributeError: 'int' object has no attribute 'co'
中身を参照してみると、数値が入っていることを確認することができる。この値は頂点のサブスクリプト(Subscript、添字)なので、bpy.data.meshes["Cube"].verticesを参照する際に利用できる。
>>> bpy.data.meshes["Cube"].polygons[0].vertices[0]
0
edgesプロパティから参照できるverticesプロパティもpolygonsプロパティのものと同様に、頂点のサブスクリプトが入っている。エッジは2点から構成されるので、参照できる頂点の数もかならず2となる。
>>> print(len(bpy.data.meshes["Cube"].edges[0].vertices))
2
同じプロパティ名なのに入っている情報が異なっているので憶えにくいけれど、まぁそういうものかなと思って憶えるしかなさそう。
edges_keyプロパティ
エッジの情報はpolygonsプロパティからも参照することができる。こちらにはフェイスを構成するエッジの情報が入っていて、頂点サブスクリプトのタプルが格納されている。
>>> bpy.data.meshes["Cube"].polygons[0].edge_keys
[(0, 4), (4, 6), (2, 6), (0, 2)]
エッジ・キーは、フェイスを構成するエッジの情報なので、エッジ・キーの総数は各フェイスのもつエッジ・キーの数となる。
Cubeオブジェクトは四角いフェイスが6面あるので、4×6で24のエッジがあることになる。edgesプロパティの数は12だったので、1つのエッジが2つのフェイスを共有していることになる。
構成イメージ
ここまでの情報をイメージにすると次のようになる。
この記事が気に入ったらサポートをしてみませんか?