コンテンツにスキップ

Data-Block をスクリプトから確認

まず、BlenderFile に含まれている Data-Block の構造を UI 上で確認する。

Blend ファイル内の DataBlock はこのようになっている。

この Data-Block は、Maya でいうところの「ノード」が近い。
Brushes や Cameras 等が、ノードの種類にあたり
それぞれが、それぞれの機能を持っている。

スクリプトからアクセスする

Blender の Data-Block は、 bpy.types.BlendData というクラスを継承した
各 Data-BLock のクラスオブジェクトを利用してアクセスする。
自分の取得したい Data-Block の BlendData オブジェクトを取得する場合は、

# -*- coding: utf-8 -*-

import bpy
from mathutils import *
D = bpy.data
C = bpy.context

for i in D.objects:
    print(i)

bpy.data.<取得したい Data-Block> このように書く。
タイプ名は
https://docs.blender.org/api/blender2.8/bpy.types.BlendData.html
公式 Help の BlendData を確認。

BlendData の構造

BlendData クラスは、

このような構造になっている。
Data-Block の種類ごとに Class が存在しているので
取得したい値や関係する Data-Block は
指定のクラスのメソッドから取得できる。

ID

この ID クラスは、すべての Data-Block の基本の型になっている。
この ID が

  • ユニークネーム
  • 他ライブラリからのリンク
  • ガベージコレクション

などの、BlendData のノードのリンク関係の管理をしている。

各 Data-Block

Object、Light、Mesh などの Data-Block は、BlendData - ID のクラスを継承している。
Data-Block の数分クラスがあるので
自分がアクセスしたいタイプのクラスのメソッドを
確認することで、いろいろと操作できる。

Blend ファイル内にある Mesh の情報を取得

Mesh アクセスは
https://docs.blender.org/api/blender2.8/bpy.types.Mesh.html#bpy.types.Mesh
ここにあるので、実際にアクセスしてみる。

# -*- coding: utf-8 -*-

import bpy
from mathutils import *

D = bpy.data # Data-Blockの作成・取得は bpy.dataから。

for ob in D.objects:
    print(ob.type)

for i in D.meshes:  # bpy.types.bpy_prop_collection いわゆるData-Blockを取得用の配列
    print(i.name)
    print(i.users)
    # アサインされてるMaterialsを取得
    for mat in i.materials:
        print(mat)
    # 頂点取得
    print(i.vertices)
    # Edge取得
    print(i.edges)

参考


最終更新日: 2019-02-09 07:47:53