0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シーンにオブジェクトを作成する練習

Last updated at Posted at 2019-02-24

Cinema 4DのPython練習がてらシーンにダイナミックにオブジェクトを追加するスクリプトを作成しました.オブジェクトを追加するだけなので特にどうという機能でもないですが,例えばカスタムマテリアル用のプレビューシーンを独自に作成したい場合などに使えます.カスタムマテリアルを作成したら仮想シーン内にこれらのオブジェクトを追加してプレビューに使うなどですね.

import c4d
from c4d import gui

def main():


    doc = c4d.documents.GetActiveDocument()
    doc.StartUndo()

    # add plane
    plane = c4d.BaseObject(c4d.Oplane)
    plane.SetName("Object")
    plane[c4d.PRIM_PLANE_WIDTH]  = 100
    plane[c4d.PRIM_PLANE_HEIGHT] = 100
    plane[c4d.PRIM_PLANE_SUBW]   = 20
    plane[c4d.PRIM_PLANE_SUBH]   = 20
    plane[c4d.PRIM_AXIS] = c4d.PRIM_AXIS_YN
    plane[c4d.ID_BASEOBJECT_VISIBILITY_RENDER] = 1
    plane.SetAbsPos(c4d.Vector(0, 140, 0))
    doc.InsertObject(plane)
    plane.MakeTag(c4d.Ttexture)
    doc.AddUndo(c4d.UNDOTYPE_NEW, plane)

    # add hari object and set root object
    hairObj = c4d.BaseObject(c4d.Ohair)
    hairObj.SetName("Object")
    hairObj[c4d.HAIRSTYLE_LINK] = plane
    hairObj[c4d.HAIRSTYLE_HAIR_COUNT] = 100
    hairObj[c4d.HAIRSTYLE_HAIR_SEGMENTS] = 6
    hairObj[c4d.HAIRSTYLE_COUNT] = 10
    hairObj[c4d.HAIRSTYLE_LENGTH] = 230
    hairObj[c4d.HAIRSTYLE_SEGMENTS] = 5
    hairObj[c4d.HAIRSTYLE_ROOT_PLACEMENT] = c4d.HAIRSTYLE_ROOT_PLACEMENT_AREA
    doc.InsertObject(hairObj)
    doc.AddUndo(c4d.UNDOTYPE_NEW, hairObj)

    # hair material
    hairMat = c4d.BaseMaterial(c4d.Mhair)
    hairMat.SetName("Hair mat")
    hairMat[c4d.HAIRMATERIAL_USE_THICKNESS] = True
    hairMat[c4d.HAIRMATERIAL_THICKNESS_ROOT] = 3
    hairMat[c4d.HAIRMATERIAL_THICKNESS_TIP] = 1
    hairMat[c4d.HAIRMATERIAL_USE_BEND] = True
    hairMat[c4d.HAIRMATERIAL_BEND] = 0.4
    doc.InsertMaterial(hairMat)
    doc.AddUndo(c4d.UNDOTYPE_NEW, hairMat)

    # hair material tag
    hairMatTag = c4d.BaseTag(c4d.Thairmaterial)
    hairMatTag[c4d.HAIRMATERIAL_TAG_LINK] = hairMat
    hairObj.InsertTag(hairMatTag)
    hairObj.MakeTag(c4d.Ttexture)

    c4d.EventAdd()
    doc.EndUndo()

# Execute main()
if __name__=='__main__':
    main()

各行でやっていることはオブジェクトを作成して,必要なパラメータをセットした後に,ドキュメントに挿入しているだけです.Cinema 4Dではアンドゥの設定の仕方をきちんとしないといけません.アンドゥタイプによっては実行前に記述しなくてはいけないものもあり,いつも迷ってしまいます.

アンドゥに関するドキュメントはこちら

シーン内にオブジェクトやタグ,マテリアルを追加できるので,次のようにカスタムマテリアル専用のプレビューシーンなどをダイナミックに作成できます.単独では何に使うか迷ってしまいそうですが,他のプラグインやスクリプトと組み合わせることができますね.
20190224-2.jpg

また,シーンに挿入しないことも出来るので,スクリプト内で何かオブジェクトが必要になった時など,一時的に作成して使うといったこともできそうです.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?