« C4D C.O.F.F.E.E. SendModelingCommand()でポイントやポリゴンを削除する。 | トップページ | C4D C.O.F.F.E.E. スプラインのポイント間の長さって? »

C4D C.O.F.F.E.E. SendModelingCommand()とCallCommand()。どっちを使う?

CallCommand()は、コマンドマネージャからスクリプトマネージャエクスプレッションエディタコマンドラインにドラッグ&ドロップでID付で自動記述され簡単に使えます。
なんて便利なんだ…以前のバージョンは手打ちだけに…
「CallCommand()ぐらい、手打ちでも苦ではないだろう。」そう言いたい人もいると思いますが…
コマンドマネージャにある大量ツールが、気軽に使える…

では、SendModelingCommand()の方はというと、コマンドIDをSDKから…
コマンドオプションを使わなくても、カラのコンテナを用意して…
ポイント/ポリゴンモードを設定して…
CallCommand()より少し手間がかかり手軽では、ないのだ。
しかも、コマンドIDが見当たらなければ、使いたいツールが使えない…

じゃぁコマンドオプションを使わなければ、CallCommand()だけで十分だろうか?

それでは、スプラインの選択された区間だけを取得するとします。

Call_sendmodeling_01

Call_sendmodeling_05

Call_sendmodeling_02

そうすると…方法は複数あります。
今回は…必要な部分を残して削除。

  1. ポイントの選択を反転
  2. 反転した選択ポイントを削除

そうすると、CallCommand()の場合は…

/*
CallCommand()で選択されたポイント以外を削除
2009.6.23
*/


CallCommand(12479);//選択範囲を反転
CallCommand(12109);//ポイントの削除

大げさに説明しましたが、CallCommand()、2行で完成…

では、SendModelingCommand()の場合は…

/*
SendModelingCommand()で選択されたポイント以外を削除
2009.6.23
*/


var ct = new(BaseContainer);

SendModelingCommand(MCOMMAND_SELECTINVERSE , doc , op , ct , MODIFY_POINTSELECTION);//選択範囲を反転
SendModelingCommand(MCOMMAND_DELETE , doc , op , ct , MODIFY_POINTSELECTION);     //ポイントの削除

行数は大差ないのですが、ゴチャゴチャして見づらい…そんな事が問題ではないんだけどね。

SendModelingCommand()に渡す引数が、CallCommand()より沢山ある…ま、こんな事も問題ではないのだ。

ま、問題が無いとは言いましたが、CallCommand()に比べると、手軽ではありませんね。

では、実際にスプラインの…ん?この2つのスクリプトは、ポリゴンオブジェクトでも使うことが可能ですね。

今回は、スプラインに実行します。

まずは、CallCommand()から。

Call_sendmodeling_01

CallCommand()実行後

Call_sendmodeling_02

問題ありませんね。
最後はポイントが選択されていた方が良いのだろうか?

では、あまり重要視されなく、見落とされる事。
それは、Undo(取り消し)

1回、取り消してみます。

Call_sendmodeling_03

もう1回取り消してみます。

Call_sendmodeling_04

CallCommand()の場合は、CallCommand()実行毎にUndo記録されます。
ですから、スクリプト実行前に戻るには、CallCommand()を実行した回数分、取り消しを実行しなければいけません。

では、SendModelingCommand()です。

Call_sendmodeling_01

SendModelingCommand()実行後。

Call_sendmodeling_02

CallCommand()と変わりません。

では、1回取り消します。

Call_sendmodeling_04

SendModelingCommand()の場合は、スクリプト実行前に1回で戻りました。

いかがでしょか?
CallCommand()で、スクリプトを作るには手軽なのですが、Undoが無駄に記録されます。
SendModelingCommand()はCallCommand()より引数の数が多く、コマンドオプションを使わなくても、コンテナを用意しなければいけない。

あなたは、CallCommand()?それともSendModelingComand()?どっちを使います?

と言うか…
普通、「あなたは、どっちを使うか?」ではなく、時と場合によって使い分ければ良いだけの事ですよね。

|

« C4D C.O.F.F.E.E. SendModelingCommand()でポイントやポリゴンを削除する。 | トップページ | C4D C.O.F.F.E.E. スプラインのポイント間の長さって? »