Takunojiの日記

自分が勉強したプログラム技術メモ

Blender python 開発メモ〜構成〜

Blender Image クラス

BlendDataImages(bpy_struct) — Blender 2.77.1 - API documentation


Blender Python Coock Book

Dev:Py/Scripts/Cookbook/Code snippets - BlenderWiki

マテリアル追加
bpy.ops.object.material_slot_add()
オブジェクト全選択
bpy.ops.mesh.select_all(action='TOGGLE')
スフィアのUV編集
bpy.ops.uv.sphere_project()

UV座標アクセス

me = bpy.data.meshes['MyMesh']
uv = me.uv_textures['UVMap']
for j,face in enumerate(me.faces):
  face_uv = uv.data[j]
  print(face.uv1)
  print(face.uv2)
  print(face.uv3)


ショートカット一覧

「オブジェクトモード」
Blender 3D: HotKeys/3D View/Object Mode - Wikibooks, open books for an open world

「エディットモード」

Blender 3D: HotKeys/3D View/Edit Mode - Wikibooks, open books for an open world


「変形関連」

Transform Orientations — Blender Manual


<サンプルコードの場所>

f:id:Takunoji:20180317165358p:plain


<ツールチップから参照オブジェクト>

f:id:Takunoji:20180316224010p:plain

画面コントロールツールチップに対象のオブジェクトが表示されるので
Pythonコンソールから探し出しす。

「クラス一覧」(bpy.types)

https://docs.blender.org/api/blender_python_api_2_77_0/bpy.types.html

 

「アドオンの構成」
⑴ *,py: 定義しているregister(), unregisterメソッドが走る
⑵ *.zip: フォルダ構成を作って一つのアドオンとしてBlenderにインストール可能

  1.基本要素

     bpy.types.Operator

          execute()→使用するプロパティを追加する
          @classmethod def register(cls) → プロパティなどを登録する
    <サンプルコード(register処理)>
    bpy.types.Scene.登録するプロパティ名 = BoolProperty(# 対応するもの
     name="Japanese or Engilish" →パネルに表示される
     ,description="Using Japanese or English"
     ,default=True)
  register() →ファイルに定義するメソッド、全てのアドオン用pyファイルに記載可

  unregister() →ファイルに定義するメソッド、全てのアドオン用pyファイルに記載可

   ※アノテーションがつくかつかないかで引数が変わる(有無)

     bpy.types.Panel

           draw()→初期、イベント時に走る
     self.layout.prop(context.scene, "登録したプロパティ名")
      @classmethod def register()→プロパティ登録のみでは使用しない?
      @classmethod def register()→登録したプロパティの削除
    例:bpy.utils.unregister_class(RootPanel)

  2.起動について

     register()で継承、作成したクラスを

    blenderに追加する

     ①classmethodのregisterと

     ②ファイル定義のregister

      メソッドがあり、①自身を登録する

      ②クラスで使用するオブジェクトを

       使用する時で使い分ける

 

UV座標の取得[サンプル]

me = bpy.data.meshes['MyMesh']
uv = me.uv_textures['UVMap']
for j,face in enumerate(me.faces):
face_uv = uv.data[j]
print(face.uv1)
print(face.uv2)
print(face.uv3)