« C4D C.O.F.F.E.E. スプラインのポイント間の長さが取得できるようになったので、ベジェスプラインに勾配を付けてみる。 | トップページ | C4D 座標マネージャ等の入力の単位を表示させていますか?単位の表示のOn/Offスクリプトです。 »

C4D C.O.F.F.E.E. スナップツール

ポイントの操作をしている時に、スナップ機能をOn/Offの切り替えをするよね…
そんな時、キーボードの 'P' を押すと…

Snaptool_01

メニューが出てくるのだけど…

1回クリックすると消えちゃうんだよね…
例えば、ポイントと軸にスナップさせたければ…
'P'押してポイント…
'P'押して軸…

2回も 'P' を押して…面倒臭いのだ…

この際だから、C.O.F.F.E.E.で何とかしようと…

分かっている人は…

「なんて、マヌケな村人さんなんだ。なんでもC.O.F.F.E.E.でやれば良い、と思っているんだろうな。」

そう思ったに違いない。

きちんとマニュアルを読めば、こんな事は起こらないのだが…

Snaptool_02_2

Snaptool_04

Snaptool_03

'P'を押して出てきたメニューの上の部分をクリックするとパレットになり…
項目をクリックしても消えなくなるのだ…

場所を取るのがいやならば、小アイコンにして、レイアウトに組み込めば、いつでも使えるわけだ…

Snaptool_05

アイコンがあるのだから、コマンドマネージャで管理ができるわけだよね…

Snaptool_06

なんだったら、ショートカットにする事もできるわけだね…

そう言えば、以前…
オブジェクト軸の表示の切り替えのスクリプトを作りました。
たった1行のスクリプトでした。

これも、Alt + D で表示の切り替えができる事に気づいていなかったのでした。

まあ救いなのは、この手のOn/Offの切り替えだけのプラグインを作らなかった事だろう…

On/Offの切り替えは、スクリプトで簡単にできます。

Plugin IDを取得する程の物ではないのです。

多分、MAXONもそう思ったに違いない。
だから、スクリプトマネージャを作ったのだろう。
ユーザスクリプトに割り振るIDは、ユーザスクリプト用のID領域にC4Dが自動発行する。
無駄にP
lugin IDを発行しないようにする為に…

なんちゃって…

冗談は、この辺にしておいて…

では、今回のネタはボツなのか?

スナップツールの項目にアクセスしてみよう。

Snaptool_07

C.O.F.F.E.E.でスナップツールの項目にアクセスするには?

BaseDocument::GetSnapTool()

BaseDocumentクラスと言う事は、スナップツールの設定は、ドキュメント毎に格納されるのか…

/*
スナップツールの設定を表示
2009.6.26
*/


main(doc,op)
{
  var st = doc->GetSnapTool();
  var type = new(array , 3);
  type[0] = "2D スナップ";
  type[1] = "2.5D スナップ";
  type[2] = "3D スナップ";

  var bools = new(array , 2);
  bools[0] = "false";
  bools[1] = "TRUE";

  println("スナップ設定 ■■■■■■■■■■");
  println("スナップを有効にする : " , bools[st#ID_SNAPSETTINGS:SNAP_ENABLE]);
  println("作業平面 : " , bools[st#ID_SNAPSETTINGS:SNAP_PLANE]);

  println("スナップ ---------------");
  println("タイプ : " , type[st#ID_SNAPSETTINGS:SNAP_METHOD]);
  println("半径 : " , st#ID_SNAPSETTINGS:SNAP_RADIUS);
  println("ポイント : " , bools[st#ID_SNAPSETTINGS:SNAP_POINT]);
  println("エッジ : " , bools[st#ID_SNAPSETTINGS:SNAP_EDGE]);
  println("ポリゴン : " , bools[st#ID_SNAPSETTINGS:SNAP_POLYGON]);
  println("ポリゴン中心 : " , bools[st#ID_SNAPSETTINGS:SNAP_FACECENTER]);
  println("中点 : " , bools[st#ID_SNAPSETTINGS:SNAP_MIDPOINT]);
  println("グリッド : " , bools[st#ID_SNAPSETTINGS:SNAP_GRID]);
  println("グリッド線 : " , bools[st#ID_SNAPSETTINGS:SNAP_GRIDLINE]);
  println("正接 : " , bools[st#ID_SNAPSETTINGS:SNAP_TANGENT]);
  println("スプライン : " , bools[st#ID_SNAPSETTINGS:SNAP_SPLINE]);
  println("スプライン分割 : " , bools[st#ID_SNAPSETTINGS:SNAP_SPLINEGRID]);
  println("軸 : " , bools[st#ID_SNAPSETTINGS:SNAP_AXIS]);
  println("垂直 : " , bools[st#ID_SNAPSETTINGS:SNAP_PERPENDICULAR]);
  println("分割数 : " , st#ID_SNAPSETTINGS:SNAP_SPLINESUB);

  println("量子化 ---------------");
  println("移動 : " , bools[st#ID_SNAPSETTINGS:SNAP_LOCAL_MOVEENABLE]);
  println(st#ID_SNAPSETTINGS:SNAP_LOCAL_MOVE);
  println("スケール : " , bools[st#ID_SNAPSETTINGS:SNAP_LOCAL_SCALEENABLE]);
  println(st#ID_SNAPSETTINGS:SNAP_LOCAL_SCALE);
  println("回転 : " , bools[st#ID_SNAPSETTINGS:SNAP_LOCAL_ROTATEENABLE]);
  println(st#ID_SNAPSETTINGS:SNAP_LOCAL_ROTATE);
  println("テクスチャ : " , bools[st#ID_SNAPSETTINGS:SNAP_LOCAL_TEXTUREENABLE]);
  println(st#ID_SNAPSETTINGS:SNAP_LOCAL_TEXTURE);
  println("ツール : " , bools[st#ID_SNAPSETTINGS:SNAP_LOCAL_TOOLENABLE]);
  println(st#ID_SNAPSETTINGS:SNAP_LOCAL_TOOL);
  println(" ");
}

スナップツールの設定を、ただただコンソールに表示するスクリプトです。

実行すると、スナップツールの設定がコンソールに表示されます。

スナップ設定 ■■■■■■■■■■
スナップを有効にする : TRUE
作業平面 : TRUE
スナップ ---------------
タイプ : 3D スナップ
半径 : 10
ポイント : false
エッジ : false
ポリゴン : false
ポリゴン中心 : false
中点 : false
グリッド : TRUE
グリッド線 : TRUE
正接 : false
スプライン : false
スプライン分割 : false
軸 : false
垂直 : false
分割数 : 4
量子化 ---------------
移動 : false
10.000000
スケール : false
0.100000
回転 : false
0.087266
テクスチャ : TRUE
0.005000
ツール : false
5.000000

スナップツールの設定が取得できました。
設定の変更も簡単にできます。

例えば、スナップツールの有効をOn/Offするスクリプトならば…

/*
スナップツールのOn/Off
2009.6.26
*/


doc->GetSnapTool()#ID_SNAPSETTINGS:SNAP_ENABLE = !doc->GetSnapTool()#ID_SNAPSETTINGS:SNAP_ENABLE;

実行文は1行のみ。
実行するたび、現在の値を反転します。

これだと、既に存在しているので、作る意味がありません。
でも、よく使う組み合わせの設定をスクリプトにしておけば、実行1つで設定ができますね。

例えば、ポリゴン、ポリゴンの中心、中点の設定をOnにします。
この場合は複数あるので、現在の設定を反転するのは、好ましくありません。

/*
スナップツール:ポリゴン/ポリゴンの中心/中点をOn
2009.6.26
*/


doc->GetSnapTool()#ID_SNAPSETTINGS:SNAP_POLYGON = TRUE;
doc->GetSnapTool()#ID_SNAPSETTINGS:SNAP_FACECENTER = TRUE;
doc->GetSnapTool()#ID_SNAPSETTINGS:SNAP_MIDPOINT = TRUE;

もし、On/Offタイプにしたいのなら、

/*
スナップツール:ポリゴン/ポリゴンの中心/中点をOn/Off
2009.6.26
*/


var st = doc->GetSnapTool();
var a = st#ID_SNAPSETTINGS:SNAP_POLYGON;
var b = st#ID_SNAPSETTINGS:SNAP_FACECENTER;
var c = st#ID_SNAPSETTINGS:SNAP_MIDPOINT;

if(!a || !b || !c){
  st#
ID_SNAPSETTINGS:SNAP_POLYGON = TRUE;
  st#
ID_SNAPSETTINGS:SNAP_FACECENTER = TRUE;
  st#
ID_SNAPSETTINGS:SNAP_MIDPOINT = TRUE;
}
else{
  st#
ID_SNAPSETTINGS:SNAP_POLYGON = FALSE;
  st#
ID_SNAPSETTINGS:SNAP_FACECENTER = FALSE;
  st#
ID_SNAPSETTINGS:SNAP_MIDPOINT = FALSE;
}

これで、3つの内、どれか1つでもOffの状態だと全てがOnになり、全てがOnの時には全てがOffになります。

|

« C4D C.O.F.F.E.E. スプラインのポイント間の長さが取得できるようになったので、ベジェスプラインに勾配を付けてみる。 | トップページ | C4D 座標マネージャ等の入力の単位を表示させていますか?単位の表示のOn/Offスクリプトです。 »