« C4D 表計算等から吐き出したCSV/TSVファイルをXPresso内で読み込むC.O.F.F.E.E.ノードを作ってみた… | トップページ | C4D 2chで質問している ipod touchの習作中の方がいる… »

C4D 「InsertObject」を検索された方がいたので、「C.O.F.F.E.E.でシーンにオブジェクトを追加する。」

以前にも、C.O.F.F.E.E.でのシーンにオブジェクトの追加は取り上げたと思いますが…

ユーザスクリプトを使って、ヌルオブジェクトをシーンに追加する簡単なテストを行います。
C.O.F.F.E.E.エクスプレッションやXPressoのC.O.F.F.E.E.ノードでは実行しないでください。
イベントが起こる度にオブジェクトが追加され続けます。

まずは代表的な追加方法です。

BaseDocument::InsertObject(追加するオブジェクト , 親オブジェクト , 前オブジェクト);

これは、C4Dに読み込まれているシーンファイルの親オブジェクト、又は前オブジェクトを指定してシーンのヒエラルキの任意の位置にオブジェクトを追加します。
このBaseDocumentクラスのInsertObject()メンバ関数で全てが事足ります。

シーンの先頭に追加する場合は、親オブジェクトと前オブジェクトの指定を共にNULLにします。

/*
シーンの先頭にヌルオブジェクトを追加する
*/


main(doc , op)
{
  var obj = AllocObject(Onull);        //ヌルオブジェクトの割り当て
  doc->InsertObject(obj , NULL , NULL);//オブジェクトの追加
}

オブジェクトを割り当てる関数AllocObject()を使ってオブジェクトを生成します。
main()関数に渡されたシーンであるdoc。そのメンバ関数InsertObject()メンバ関数を使いオブジェクトを追加します。

Addobject_01

Addobject_07

Addobject_02

選択しているオブジェクトの子オブジェクトとして追加する場合は、親オブジェクトを指定し、前オブジェクトをNULLにします。

/*
選択されたオブジェクトの子オブジェクトとしてヌルオブジェクトを追加する
*/


main(doc , op)
{
  var obj = AllocObject(Onull);      //ヌルオブジェクトの割り当て
  doc->InsertObject(obj , op , NULL);//オブジェクトの追加
}

main()関数に渡された選択オブジェクトopを親に指定し、ヌルオブジェクトを追加しました。

Addobject_03

Addobject_07

Addobject_04

選択しているオブジェクトの次オブジェクトとして追加する場合は、前オブジェクトを指定し、親オブジェクトにNULLにします。

/*
選択されたオブジェクトの次オブジェクトとしてヌルオブジェクトを追加する
*/


main(doc , op)
{
  var obj = AllocObject(Onull);      //ヌルオブジェクトの割り当て
  doc->InsertObject(obj , NULL , op);//オブジェクトの追加
}

もう、説明は要らないと思います。

Addobject_03 Addobject_07

Addobject_05

このInsertObject()メンバ関数は、BaseDocumentクラスのものです。
もちろん使用するには、現在C4Dに読み込まれているシーンを取得する必要があります。
幸いにも、ユーザスクリプトのmain()関数には、現在のシーンであるdocと、1つの選択オブジェクトが渡されるので、わざわざ取得する必要がありません。

次は、任意のオブジェクトの前後に追加する方法です。

BaseList2D::InsertBefore(目標とするオブジェクト);
BaseList2D::InsertAfter(目標とするオブジェクト);

追加するオブジェクトを目標とするオブジェクトの前オブジェクトとして、または次オブジェクトとしての追加です。
これには、C4DのシーンであるBaseDocumentが必要ありません。

では、選択したオブジェクトの前に追加します。

/*
選択したオブジェクトの前オブジェクトとしてヌルオブジェクトを追加
*/


main(doc , op)
{
  if(!op)return;               //選択されたオブジェクトがなければ中断

  var obj = AllocObject(Onull);//ヌルオブジェクトの割り当て
  obj->InsertBefore(op);        //選択されたオブジェクトopの前にobjを追加
}

InsertBefore()メンバ関数には、オブジェクトを渡さないとC.O.F.F.E.E.エラーがでます。
使用する前に、オブジェクトなのかを判定してから実行してください。
ここでは、main()関数に渡されるopは選択オブジェクトかNullの何れかなので、Nullなのか判定して、そうであれば処理を中断しています。

Addobject_06

Addobject_07 Addobject_05

続いて、選択したオブジェクトの後に追加します。

/*
選択したオブジェクトの次オブジェクトとしてヌルオブジェクトを追加
*/


main(doc , op)
{
  if(!op)return;               //選択されたオブジェクトがなければ中断

  var obj = AllocObject(Onull);//ヌルオブジェクトの割り当て
  obj->InsertAfter(op);        //選択されたオブジェクトopの次にobjを追加
}

InsertAfter()メンバ関数は、InsertBefore()メンバ関数同様なので説明は省きます。

Addobject_03 Addobject_07

Addobject_05

最後に、任意のオブジェクトの子オブジェクトとして追加する方法です。

BaseList4D::InsertUnder(目標とするオブジェクト);

これも、InsertBefore()とInsertAfter()と同様で、C4DシーンであるBaseDocumentを必要としません。
ただし、InsertBefore()やInsertAfter()はBaseList2Dクラスのメンバ関数ですが、InsertUnder()はBaseList4D()クラスのメンバ関数です。
クラスが違う事を強調しているように書きましたが、シーンのオブジェクトを扱うヒエラルキリストの操作では特に意識する必要はありません。

/*
選択したオブジェクトの子オブジェクトとしてヌルオブジェクトを追加
*/


main(doc , op)
{
  if(!op)return;               //選択されたオブジェクトがなければ中断

  var obj = AllocObject(Onull);//ヌルオブジェクトの割り当て
  obj->InsertUnder(op);        //選択されたオブジェクトopの子としてobjを追加
}

InsertUnder()メンバ関数は、InsertBefore()メンバ関数とInsertAfter()メンバ関数同様なので説明は省きます。

Addobject_03

Addobject_07

Addobject_04

これでシーンにオブジェクトを追加する方法がわかっていただけたと思います。

軽くおさらいです。

InsertObject()メンバ関数は、C4Dシーンが主体で、追加するオブジェクトとヒエラルキリスト上の目標となるオブジェクトを渡します。
目標となるオブジェクトはNullでも問題はありません。

他のInsertBefore(),InsertAfter(),InsertUnder()メンバ関数は、追加するオブジェクト主体でヒエラルキリスト上の目標となるオブジェクトを渡します。
目標となるオブジェクトがNullだとエラーが起こります。

C.O.F.F.E.E.スクリプト内でC4D既存のオブジェクトを割り当てる。

新規でオブジェクトを割り当てるAllocObject()関数へ渡す定数です。
C.O.F.F.E.E.SDKより抜粋です。
全てのオブジェクトが網羅されているわけではありません。

AllocObject()への引数 オブジェクト
Offd FFD. FFDオブジェクト
Osds Hyper NURBS. HyperNURBS(サブディビジョンサーフェス)
Oatomarray Atom array object. アトム
Oinstance Instance. インスタンス
Oparticle Particle emitter. エミッタ
Ooiltank Oil-tank object. オイルタンク
Ocapsule Capsule object. カプセル
Ocamera Camera. カメラオブジェクト
Osplinecycloid Cycloid spline object. サイクロイドスプライン
Osweep Sweep NURBS. スイープ NURBS
Oheadphone Headphone. ステレオマイク
Ostage Stage. ステージオブジェクト
Ospline Spline object. スプラインオブジェクト
Osplinedeformer Spline deformer object. スプラインデフォーマ
Osplinerail Spline rail object. スプラインレールデフォーマ
Oshear Shear deformer. せん断デフォーマ
Oturbulence Particle turbulence. タービュランスモディファイア
Otube Tube object. チュープ
Otwist Twist deformer. ツイストデフォーマ
Odisc Disc object. ディスク
Osplinetext Text spline object. テキストスプライン
Otaper Taper deformer. テーパーデフォーマ
Otorus Torus object. トーラス
Onull Null object. ヌルオブジェクト
Opyramid Pyramid object. ピラミッド
Ofigure Figure object. フィギュア
Oboole Boolean. ブール
Osplinecontour Contour spline object. ベクター化
Obezier Bezier NURBS. ベジェ NURBS
Osinglepoly Single polygon object. ポリゴン
Opolygon Polygon object. ポリゴンオブジェクト
Opolyreduction Polygon reduction object. ポリゴンリダクション
Obone Bone. ボーンデフォーマ
Omicrophone Microphone. マイク
Ometaball Metaball. メタボール
Omelt Melt deformer. メルトデフォーマ
Olight Light. ライトオブジェクト
Oloudspeaker Loadspeaker. ラウンドスピーカー
Osplinehelix Helix spline object. らせんスプライン
Owrap Wrap deformer. ラップデフォーマ
Orelief Relief object. レリーフ
Oloft Loft NURBS. ロフト NURBS
Oattractor Particle attractor. 引力モディファイア
Osplinecircle Circle spline object. 円形スプライン
Ocone Cone object. 円錐
Ocylinder Cylinder object. 円柱
Oextrude Extrude NURBS. 押し出し NURBS
Osplineflower Flower spline object. 花形スプライン
Olathe Lathe NURBS. 回転 NURBS
Orotation Particle rotation. 回転モディファイア
Oenvironment Environment. 環境オブジェクト
Ospherify Spherify object. 球状化デフォーマ
Osphere Sphere object. 球体
Osky Sky.
Obend Bend deformer. 屈曲デフォーマ
Ofriction Particle friction. 減速モディファイア
Osplinearc Arc spline object. 弧スプライン
Oconplane Construction plane. 作業平面
Ospline4side 4-sided spline object. 四辺形スプライン
Osplinecogwheel Wheel spline object. 歯車スプライン
Osplinecissoid Cissoid spline object. 疾走線スプライン
Ogravitation Particle gravitation. 重力モディファイア
Ofloor Floor. 床オブジェクト
Odestructor Particle destructor. 消滅モディファイア
Osplineformula Formula spline object. 数式スプライン
Oformula Formula deformer. 数式デフォーマ
Osplinestar Star spline object. 星型スプライン
Oplatonic Platonic object. 正多面体
Oselection Selection object. 選択
Oforeground Foreground. 前景
Osplinenside N-sided spline object. 多角形スプライン
Osymmetry Symmetry object. 対称
Osplineprofile Profile spline object. 断面形スプライン
Ofractal Fractal object. 地形
Osplinerectangle Rectangle spline object. 長方形スプライン
Obackground Background. 背景
Oarray Array. 配列
Oexplosionfx Explosion FX object. 爆発FXデフォーマ
Oexplosion Explosion deformer. 爆発デフォーマ
Odeflector Particle deflector. 反射モディファイア
Owinddeform Wind deformer. 風デフォーマ
Owind Particle wind. 風モディファイア
Oshatter Shatter deformer. 粉砕デフォーマ
Oplane Plane object. 平面
Obulge Bulge deformer. 膨張デフォーマ
Ocube Cube object. 立方体

今回は、C.O.F.F.E.E.内で割り当てたオブジェクトをシーンのヒエラルキリストに追加するテストです。
既にヒエラルキリストに追加されているオブジェクトの操作には、別の注意点があります。

|

« C4D 表計算等から吐き出したCSV/TSVファイルをXPresso内で読み込むC.O.F.F.E.E.ノードを作ってみた… | トップページ | C4D 2chで質問している ipod touchの習作中の方がいる… »