Pythonの書き方

Xpressoやスクリプト、プラグインの作成に関する質問や自作のスクリプトやノードの紹介はこちらをお使いください
Post Reply
tofuji
Posts: 901
Joined: 2011年3月10日(Thu) 10時41分
Location: 東京都渋谷区

Pythonの書き方

Post by tofuji » 2018年9月11日(Tue) 15時28分

 勉強かたがた、CINEMA 4DでPythonを書く方法を記録しました。

1. CINEMA 4Dの中でPythonを書ける場所、およびPythonを書くための資料。
http://www2.11moon.com/sample_files2018 ... uction.mp4

 a. 「Python」はCINEMA 4Dの中のいろんな場所で書けるが、まずは「XPressoの中のPythonノード」、および「Pythonスクリプト」の形で書くといい。

 b. 「XPressoの中のPythonノード」は、いろんなきっかけで自動実行されるが、「Pythonスクリプト」を実行するにはメニューかショートカットで呼ぶ必要がある。

 c. 「Pythonノード」は「ライブラリ」や「Undo」を使えないが、「Pythonスクリプト」は使える。


2. オブジェクトの位置、スケール、角度をリセットするスクリプト
解説ムービー
http://www2.11moon.com/sample_files2018 ... /reset.mp4

Code: Select all

import c4d

def main():
    if not op:    print "please select an object";    return False

    doc.StartUndo()
    doc.AddUndo(c4d.UNDOTYPE_CHANGE_NOCHILDREN, op)

    op.SetRelPos(c4d.Vector(0.0,0.0,0.0))
    op.SetRelScale(c4d.Vector(1.0,1.0,1.0))
    op.SetRelRot(c4d.Vector(0.0,0.0,0.0))

    doc.EndUndo()

    c4d.EventAdd()

main()
3. 選択したポリゴンを複製するスクリプト
解説ムービー
http://www2.11moon.com/sample_files2018 ... /clone.mp4

Code: Select all

import c4d
from c4d import utils

def main():
    if not op: print "Please select an object";    return False
    if op.GetType() != 5100:    print "Please select polygon object";    return False

    doc.StartUndo()
    doc.AddUndo(c4d.UNDOTYPE_CHANGE_NOCHILDREN, op)

    settings= c4d.BaseContainer()
    settings[c4d.MDATA_CLONE_OFFSET]= 0.0
    settings[c4d.MDATA_CLONE_LOCALSCALE]= c4d.Vector(1.0,1.0,1.0)

    res= utils.SendModelingCommand(command= c4d.ID_MODELING_CLONE_TOOL,
                                    list= [op],
                                    mode= c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                    bc= settings,
                                    doc= doc)

    doc.EndUndo()

    c4d.EventAdd()

main()
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

tofuji
Posts: 901
Joined: 2011年3月10日(Thu) 10時41分
Location: 東京都渋谷区

Pythonノードの書き方

Post by tofuji » 2018年9月12日(Wed) 07時38分

 「Python」ノードと「減衰」ノードを使って、「ポリゴン選択範囲」を書き換えるXPressoを作りました。

 R20で「フィールド」という機能が付きましたが、これはXPressoを使えばR10の頃からできました。
 ただし、「頂点マップ」の変更は標準ノードだけでできるものの、「ポイント選択範囲」や「ポリゴン選択範囲」の変更は「Python」ノードを使わないとできません。
 実際、R20になってもXPressoには重要なノードが欠けています。新しいノードを作るぐらいなら、このような欠けたノードを先に作ってほしいものです。



1. R20で「頂点マップ」を「フィールド」を使って変更します。お手本です。
解説ムービー
http://www2.11moon.com/sample_files2018 ... field1.mp4

2. 同じことをR19のXPressoと「減衰」ノードで実行しています。「Python」ノードは要りません。
解説ムービー
http://www2.11moon.com/sample_files2018 ... field2.mp4

3. 「ポリゴン選択範囲」の場合、標準のXPressoノードではできないので、「Python」ノードを使います。
解説ムービー
http://www2.11moon.com/sample_files2018 ... field3.mp4
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

tofuji
Posts: 901
Joined: 2011年3月10日(Thu) 10時41分
Location: 東京都渋谷区

テキストデータをMoGraphに読み込む(Python版)

Post by tofuji » 2018年9月28日(Fri) 00時32分

 昔作った「テキストデータをMoGraphに読み込む」COFFEEイフェクターをPythonイフェクターに移植しました。
 元のページは以下の通りです。
viewtopic.php?f=4&t=543&hilit=テキストデータ

 また、このイフェクターは私が書いた「CINEMA 4D MoGraph/XPressoガイドブック」でも取り上げています。


0. 全体的な変更点、改良点、パラメーター等

a. 改行コードは「LF」
 COFFEEイフェクターでは改行コードを文字数で数えていたため、「LF(UNIX)」、「CR(MacOS)」のどちらでも動きました。
 しかしPythonの標準改行コードは「LF」なので、MacOSでテキストファイルを作る場合、必ず改行コードを「LF」にしてください。
 「CR + LF(Windows)」はそのままで動くと思います。
 Pythonでも「CR」で分割することはできますが、違う関数が必要で、おそらく遅くなるので使わないことにしました。

b. データ文字数の制限はなし
 COFFEEイフェクターではデータの文字数を数えて区切っていたため、データの文字数をそろえる必要がありました。
 しかし、Pythonでは指定した文字で区切る関数があるので、「 (半角スペース一個)」で区切るようにしました。
したがって、文字数をそろえる必要はありません。

c. テキストデータはファイル名で指定
 COFFEEイフェクターではテキストデータの場所をフルパスで指定していましたが、Pythonではファイル名で指定するように変更しました。
 テクスチャ等と違って、フルパスでの指定はできないので注意してください。
 テキストデータは、シーンファイルと同じ階層に置く必要があります。

以下、各イフェクターに共通するユーザーデータ
d. use falloff
 減衰(フィールド)を使用するかどうか指定します。
 R20以降イフェクターはデフォルトで減衰を持っていません(R19までは「無限」という減衰がデフォルトで働いていました)。
したがって、R20で減衰を追加せずに減衰の値を調べると常に「0」となり、イフェクターが働かなくなります。
というわけで、減衰を使わない場合は、必ずこのオプションを外してください。

e. filename
 テキストデータのファイル名を指定します。フルパスは指定できません。
 テキストデータは必ずシーンファイルと同じ階層に置いてください。



1. 位置(Position)
http://www2.11moon.com/sample_files2018 ... sition.zip


2. スケール(Scale)
http://www2.11moon.com/sample_files2018 ... _scale.zip

固有のユーザーデータ
a. matrix_mode
 スケールのモードを「相対」にするか「絶対」にするか指定します。
「相対」の場合、0で変化なし、1で2倍、-1で消滅となります。
「絶対」の場合、0で消滅、1で変化なしとなります。


3. 角度(Rotation)
http://www2.11moon.com/sample_files2018 ... tation.zip

固有のユーザーデータ
a. angle_mode
 角度の単位を「Degree(角度)」にするか「Radian(ラジアン)」にするか指定します。
 「Degree」の場合、360度で一回転になります。
 「Radian」の場合、2*piで一回転になります。


4. カラー(Color)
http://www2.11moon.com/sample_files2018 ... _color.zip

固有のユーザーデータ
a. blend_mode
 カラーの混合モードを「通常」、「加算」、「減算」、「乗算」から指定します。
 「通常」の場合、前のイフェクターのカラーは無視され、このイフェクターのカラーがそのまま使われます。
 「加算(減算、乗算)」の場合、前のイフェクターのカラーに対して、このイフェクターのカラーが加算(減算、乗算)されます。


5. ウエイト(Weight)
http://www2.11moon.com/sample_files2018 ... weight.zip

固有のユーザーデータ
a. blend_mode
 ウエイトの混合モードを「通常」、「加算」、「減算」、「乗算」から指定します。
 「通常」の場合、前のイフェクターのウエイトは無視され、このイフェクターのウエイトがそのまま使われます。
 「加算(減算、乗算)」の場合、前のイフェクターのウエイトに対して、このイフェクターのウエイトが加算(減算、乗算)されます。


6. 可視性(Visibility)
http://www2.11moon.com/sample_files2018 ... bility.zip

固有のユーザーデータ
a. logic_mode
 可視性のロジックを「Normal」、「AND」、「OR」から指定します。
 「Normal」の場合、前のイフェクターの可視性は無視され、このイフェクターの値がそのまま使われます。
 「AND」にすると、両方のイフェクターの可視性がTrueの場合だけ、True(見える)になります。
 「 OR」にすると、どちらかのイフェクターの可視性がTrueであれば、True(見える)になります。


7. UVW(UVW)
http://www2.11moon.com/sample_files2018 ... er_UVW.zip


8. クローンの順番(Clone)
http://www2.11moon.com/sample_files2018 ... _clone.zip


9. キーフレームアニメーションの時間オフセット(Time)
http://www2.11moon.com/sample_files2018 ... r_time.zip

固有のユーザーデータ
a. time_mode
 時間の単位を「秒」と「フレーム」から指定します。
 「フレーム」を指定した場合、ドキュメントで設定したフレームレートにより、フレームが内部で秒に変換されます。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

tofuji
Posts: 901
Joined: 2011年3月10日(Thu) 10時41分
Location: 東京都渋谷区

キーボードの値を読む

Post by tofuji » 2018年10月27日(Sat) 13時31分

Pythonを使ってキーボードの値を直接読み、それによってオブジェクトを動かす方法を説明しました。

動作ムービー
http://www2.11moon.com/sample_files2018 ... keys_s.mp4

解説ムービー
http://www2.11moon.com/sample_files2018 ... t_keys.mp4
サンプルファイル
http://www2.11moon.com/sample_files2018 ... t_keys.zip
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

tofuji
Posts: 901
Joined: 2011年3月10日(Thu) 10時41分
Location: 東京都渋谷区

キーボードの値を読む2

Post by tofuji » 2018年10月30日(Tue) 01時10分

Pythonを使って、キーボードでコントロールするゲームを作りました。

Image

解説ムービー
http://www2.11moon.com/sample_files2018 ... hopper.mp4

サンプルファイル
http://www2.11moon.com/sample_files2018 ... er_120.zip


0. 使用するキーは「Shift」、「F15」、「F16」の3個です。

1. F15とF16は左右の足に相当し、交互に押すことでジャンプできます。

2. 着地する直前にF15(F16)キーを押すと、より高くジャンプできます。

3. 地面がない部分に着地すると、落ちてやり直しになります。

4. ジャンプ中にShiftキーを押すと前進します。
 高くジャンプするほど速く前進できます。
 着地しているときは前進できません。

5. 100秒以内にゴールできないとタイムアップになります。


0. Use "Shift", "F15" and "F16" keys.

1. F15 and F16 keys are your legs, so push them one after the other.

2. Press F15 (F16) key just before landing to jump higher.

3. Landing on empty area (no ground), you have to restart before the area.

4. Push Shift key while jumping to go forward.
You can go faster when you jump heigher.
You can not go while landing.

5. Time up at 100 seconds.
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

Post Reply