« C4D Python R12 テスト:ポリゴンオブジェクトのポイントを削減する? | トップページ | C4D Python R12 テスト:SendModelingCommand()スプラインアウトラインを作成 »

C4D Python R12 テスト:SendModelingCommand()スプライン投影

スプラインの投影のSendModelingCommand()のC4D Python テストコード

C4dpythonsendmodelingcommand_013

Python
'''
スプライン 投影
'''


import c4d
from c4d import utils


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

    bc = c4d.BaseContainer()
    bc.SetData(c4d.MDATA_SPLINE_PROJECTMODE, c4d.MDATA_SPLINE_PROJECT_MODE_SPHERICAL) #モード:放射状
    # ビュー : c4d.MDATA_SPLINE_PROJECT_MODE_VIEW
    #XY平面 : c4d.MDATA_SPLINE_PROJECT_MODE_XY
    #ZY平面 : c4d.MDATA_SPLINE_PROJECT_MODE_ZY
    #XZ平面 : c4d.MDATA_SPLINE_PROJECT_MODE_XZ
    #  X軸  : c4d.MDATA_SPLINE_PROJECT_MODE_X_AXIS
    #  Y軸  : c4d.MDATA_SPLINE_PROJECT_MODE_Y_AXIS
    #  Z軸  : c4d.MDATA_SPLINE_PROJECT_MODE_Z_AXIS
    #放射状 : c4d.MDATA_SPLINE_PROJECT_MODE_SPHERICAL


    utils.SendModelingCommand(c4d.MCOMMAND_SPLINE_PROJECT, [op],
                c4d.MODIFY_ALL, bc, doc,
                c4d.MODELINGCOMMANDFLAGS_CREATEUNDO)


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

スプラインをオブジェクトに投影するんで、isinstance()でスプラインオブジェクト以外を除外していますが…
ポリゴンオブジェクトをSendModelingCommand(c4d.MCOMMAND_SPLINE_PROJECT...へ渡してもエラーは起きないね。

スプラインを「投影」で処理する場合、MODIFY_ALL / MODIFY_POINTSELECTION / MODIFY_POLYGONSELECTION / MODIFY_EDGESELECTION この4つのどのタイプでも処理をするようだ。

ポイントが選択されていれば、MODIFY_POINTSELECTION で選択されているポイントが対象でそれ以外は、全てのポイントが対象になるようだ。

C4D Python SDKを読んだら…

  Python COFFEE
全てのポイント/ポリゴン MODELINGCOMMANDMODE_ALL MODIFY_ALL
現在の選択ポイントのみ MODELINGCOMMANDMODE_POINTSELECTION MODIFY_POINTSELECTION
現在の選択ポリゴンのみ MODELINGCOMMANDMODE_POLYGONSELECTION MODIFY_POLYGONSELECTION
現在の選択エッジのみ MODELINGCOMMANDMODE_EDGESELECTION MODIFY_EDGESELECTION

どちらも値は同じようですが…
C4D Pythonで使うなら MODELINGCOMMANDMODE_~の方を使ったほうが良いのだろう。

最後のパラメータは、Undoのようなんだけど、うまくUndoが記録されないようなんだけど…
未だに、よくわからない。

実行前 実行後 取消し

Mcommand_spline_project_01

Mcommand_spline_project_02

Mcommand_spline_project_03

もしかすると、BaseDocument.StartUndo()とBaseDocument.EndUndo()で挟んであげないとダメなのかな…

Python
'''
スプライン 投影
'''


import c4d
from c4d import utils


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

    bc = c4d.BaseContainer()
    bc.SetData(c4d.MDATA_SPLINE_PROJECTMODE, c4d.MDATA_SPLINE_PROJECT_MODE_SPHERICAL) #モード:放射状
    # ビュー : c4d.MDATA_SPLINE_PROJECT_MODE_VIEW
    #XY平面 : c4d.MDATA_SPLINE_PROJECT_MODE_XY
    #ZY平面 : c4d.MDATA_SPLINE_PROJECT_MODE_ZY
    #XZ平面 : c4d.MDATA_SPLINE_PROJECT_MODE_XZ
    #  X軸  : c4d.MDATA_SPLINE_PROJECT_MODE_X_AXIS
    #  Y軸  : c4d.MDATA_SPLINE_PROJECT_MODE_Y_AXIS
    #  Z軸  : c4d.MDATA_SPLINE_PROJECT_MODE_Z_AXIS
    #放射状 : c4d.MDATA_SPLINE_PROJECT_MODE_SPHERICAL


    doc.StartUndo()

    utils.SendModelingCommand(c4d.MCOMMAND_SPLINE_PROJECT, [op],
                                c4d.MODELINGCOMMANDMODE_POINTSELECTION,
                                bc, doc, c4d.MODELINGCOMMANDFLAGS_CREATEUNDO)

    doc.EndUndo()


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

Undoが、まともに記録されたような…

実行前 実行後 取消し

Mcommand_spline_project_01

Mcommand_spline_project_02

Mcommand_spline_project_01

c4d.documentsモジュールをインポートしていないけど、c4d.BaseDocumentが使えてるね…?

|

« C4D Python R12 テスト:ポリゴンオブジェクトのポイントを削減する? | トップページ | C4D Python R12 テスト:SendModelingCommand()スプラインアウトラインを作成 »