« C4D Python R12 テスト:ポリゴンオブジェクトと線分の交点…GeRayCollider()をグダグダと… | トップページ | C4D Python R12 テスト:閉じたスプラインをポリゴンへ変換? »

C4D Python R12 テスト:SendModelingCommand()編集可能にする

編集可能にするのSendModelingCommand()のC4D Python テストコード

C4dpythonsendmodelingcommand_036

Python
'''
編集可能にする
'''


import c4d
from c4d import utils


def main():
    if not isinstance(op, c4d.BaseObject): return

    #現在選択されているオブジェクトの前もしくは親のオブジェクトを取得
    pre_obj = op.GetPred()
    up_obj = op.GetUp()

    bc = c4d.BaseContainer()

    doc.StartUndo()

    objs = utils.SendModelingCommand(c4d.MCOMMAND_MAKEEDITABLE, [op],
 c4d.MODELINGCOMMANDMODE_ALL, bc, doc,
                    c4d.MODELINGCOMMANDFLAGS_CREATEUNDO)
    if not objs:return

    #SendModelingCommand()から返されたオブジェクトをオブジェクトマネージャの元の位置へ追加
    if pre_obj: objs[0].InsertAfter(pre_obj)
    elif up_obj: objs[0].InsertUnder(up_obj)
    else:doc.InsertObject(objs[0])

    doc.AddUndo(c4d.UNDOTYPE_NEW, objs[0])
    doc.EndUndo()


if __name__=='__main__':
    main()
    c4d.EventAdd()

「編集可能にする」MCOMMAND_MAKEEDITABLEを実行すると、指定したオブジェクトはオブジェクトマネージャから削除されます。
代わりに、SendModelingCommand()から編集可能になったオブジェクトのリストが返されます。

SendModelingCommand()実行後、返されたオブジェクトをオブジェクトマネージャに追加しなければなりません。

オブジェクトマネージャへのオブジェクトの追加は…

  • BaseDocument.InsertObject()
  • GeListNode.InsertUnder()
  • GeListNode.InsertAfter()
  • GeListNode.InsertBefore()

等があります。

モード

処理対象 選択 非選択
c4d.MODELINGCOMMANDMODE_ALL ---- ----
c4d.MODELINGCOMMANDMODE_POINTSELECTION ---- ----
c4d.MODELINGCOMMANDMODE_POLYGONSELECTION ---- ----
c4d.MODELINGCOMMANDMODE_EDGESELECTION ---- ----

ポイント/ポリゴン/エッジ等の選択/非選択にかかわらず、どのモードでも渡したオブジェクトはポリゴンオブジェクトに変換されます。

|

« C4D Python R12 テスト:ポリゴンオブジェクトと線分の交点…GeRayCollider()をグダグダと… | トップページ | C4D Python R12 テスト:閉じたスプラインをポリゴンへ変換? »

コメント

コメントを書く



(ウェブ上には掲載しません)




« C4D Python R12 テスト:ポリゴンオブジェクトと線分の交点…GeRayCollider()をグダグダと… | トップページ | C4D Python R12 テスト:閉じたスプラインをポリゴンへ変換? »