« そう言えば、以前作成したC.O.F.F.E.E.プラグイン[CamMapCalib]は、C4D R12では… | トップページ | C.O.F.F.E.E. SDK R12は、ドコが変わったんだい…2 »

C.O.F.F.E.E. SDK R12は、ドコが変わったんだい…

えぇ…C4Dの使い方忘れたぁ…
手が勝手に動いてくれない…

と言うありさまで…

で、C.O.F.F.E.E. SDK R12の変更点は…

C.O.F.F.E.E.SDK R11からR12への変更点SDKより

  • 全ての基本色(WPREF_..._COL)がVIEWCOLOR_...へ変更。
  • BaseDocumentクラスのInsertRenderData()のパラメータにparentが追加されました。
  • BaseList4Dクラスは、BaseList2Dクラスに統合されました。
  • BaseList2DクラスのSearchNext()が廃止されました。
  • VariableTagのタイプThermite2DがTangentへ変更。
  • BaseTagのタイプTanchor、Tkinematic、Tfixexpression、Tikexpressionは削除された。
  • SplineObjectクラスのInitLength()、FreeLength()、GetLength()、UniformToNatural()は、新しいSplineLengthDataクラスへ移行した。
  • VolumeDataクラスのlhitは削除された。
  • BaseObjectクラスのOhypernurbsは削除され、代わりにOsdsを使用する。
  • BaseSequenceクラス、BaseKeyクラス、BaseTrackクラスは削除され、代わりにCCurveクラス、CKeyクラス、CTrackクラスを使用する。
  • Markerクラスは、GeMarkerクラスへ変更。
  • AnimationPlugins(PluginTrack、 PluginKey、 PluginSequence)は、もうサポートしていない。
  • C.O.F.F.E.E.はもう、アニメーションキーにオーバーロードができない。
  • PLAKeyクラスは削除された。
  • UNDO_...が、UNDOTYPE_...へ変更。
  • KinematicTagが廃止されたので、例題のIkrecord.cofを削除した。
  • DA_Flagsは互換性を維持するために残してあるが、将来的には廃止される予定なのでDRAWFLAGSを使用してください。
  • GeModalDialogとGeDialogの派生階層は訂正された。
  • C4D R12の「軸のゼロ化(デュアルトランスフォーム)」の為の、BaseObjectクラスに新しいメンバーが追加:GetAbsPos, SetAbsPos, GetAbsScale, SetAbsScale, GetAbsRot, SetAbsRot, GetFrozenPos, SetFrozenPos, GetFrozenScale, SetFrozenScale, GetFrozenRot, SetFrozenRot, GetRelPos, SetRelPos, GetRelScale, SetRelScale, GetRelRot, SetRelRot, GetFrozenMln, GetRelMln, GetRelMl, SetRelMl, CopyMatrixTo

ザックリ書いたので、間違っていたらゴメンなさい…

基本色のIDの変更

COFFEEを使ってこれらにアクセスすることが無かったので飛ばします。
触れる機会があれば…その時にでも…

BaseDocumentクラスのInsertRenderData()の変更

レンダリング設定は、階層的に設定できるようになっています。

Renderdata_01

既に作成されているレンダリング設定の子として配置できるように対応したのでしょう…

BaseDocument::InsertRenderData([RenderData]rd, [RenderData]prev = NULL, [RenderData]parent = NULL)

rdは追加するRenderData。
prevに既存のRenderDataを指定すると、prevの次の位置に配置される。
parentに既存のRenderDataを指定すると、parentの子として配置される。
prev,parent共にNULLを指定すると、リストのトップに配置される。

と言う具合だろう…

では、スクリプトマネージャにてテストをしてみよう。
C4D R12Demoだけどね…購入できる人は、是非買って擦り切れるぐらい使い込んでください。
新規のRenderDataを作成し現在アクティブなRenderDataの子として配置してみます。

//R12 BaseDocument::InsertRenderData()のテスト
main(doc , op)
{
  var rd = renderdata(); //アクティブなレンダリング設定を取得
  println(rd->GetName());//アクティブなレンダリング設定の名前をコンソールに表示

  var add_rd = new(RenderData);//新規のレンダリング設定を作成
  add_rd->SetName("add DATA"); //新規レンダリング設定の名前を「add DATA」に変更
  doc->InsertRenderData(add_rd, NULL, rd);//アクティブなレンダリング設定の子としてレンダリング設定「add DATA」を配置する
}
______ C
[FAIL] Script 'TEST' Line 9 : Too many parameters

InsertRenderData()の「パラメータが多すぎる」とエラーが出たが…
もしかして、C4D R12のC.O.F.F.E.E.はR12ではないのかなぁ…
COFFEEは、日本語に対応していないのかな…
ま、Demo版だからね…

使い方が間違っているかもね…
パラメータ2個ならエラーは出ないけど…

BaseList2DクラスのSearchNext()が廃止され、BaseList4Dクラスが統合された

class BaseList2D
{
public:
  BaseList2D();

  [CTrack] GetFirstCTrack();//new
  [bool] InsertTrackSorted([CTrack] track, [CTrack] track);//new

  [int] GetType();
  [int] GetDiskType();

  [GeMarker] GetMarker();

  [BaseList2D] GetNext();
  [BaseList2D] GetPrev();
  [BaseList2D] GetUp();  //Old BaseList4D
  [BaseList2D] GetDown();//Old BaseList4D

  [bool] InsertBefore([BaseList2D] bl);
  [bool] InsertAfter([BaseList2D] bl);
  [bool] InsertUnder([BaseList2D] parent);//Old BaseList4D

  [bool] Remove();

  [bool] SetBit([int] bit);
  [bool] GetBit([int] bit);
  [bool] DelBit([int] bit);
  [bool] ToggleBit([int] bit);

  [int] GetAllBits(, );
  [bool] SetAllBits([int] bits);

  [int] GetColor();
  [bool] SetColor([int] col);

  [bool] Message([int] type, [anytype] data  =  NULL);
};

SearchNext()が廃止された…
これは、リスト上のアクティブなもの等を探す時に使っていたものなので…
パラメータにbitを設定して使用して次々と該当したものを取得する…

複数のアクティブなオブジェクトやタグを取得するのに使っていましたが…

アクティブなオブジェクトならSearchNext(BIT_AOBJ)、アクティブなタグならSearchNext(BIT_ATAG)という具合だったね…

今ではGeneral functionsのobject(),tag()を使用するわけです。

下のオブジェクトマネージャのように、オイルタンクと球体を選択して…

Searchnext_01

スクリプトマネージャでobject()を試すなら…こんな具合だろう…

//アクティブなオブジェクトの名前をコンソールに表示
main(doc , op)
{
  var i;
  for(i = 0; object(i); i++)
  {
    println(object(i)->GetName());
  }
}
オイルタンク
球体

結果は上のようにコンソールに表示されるはず。
オブジェクトの階層は関係なくリストの上から順に取得されます。

アクティブなタグは、こんな具合…

Searchnext_02

//アクティブなタグの名前を取得
main(doc , op)
{
  var i;
  for(i = 0; tag(i); i++)
  {
    println(tag(i)->GetName());
  }
}
Xpresso
表示
モーションブラー

tag()を使用すると、オブジェクトに関係なくリストの上から順にアクティブタグを取得します。

これでSearchNext()が無くても、アクティブなオブジェクトやタグが取得できるので問題ないだろう…

…?

VariableTagのタイプThermite2DがTangentへ変更

スプラインのハンドルデータが格納されている不可視なタグで…
直接操作する事は滅多に無いだろう…
SplineObjectクラスのGetTangents()、SetTangents()で操作できるし…ん?

これは、VariableTagをアロケートする時に必要か…
でも、スプラインオブジェクトのタイプ:線形/3次/アキマ/…を変更してスプラインを更新すると、自動的に操作されるけどね…

BaseTagのタイプTanchor、Tkinematic、Tfixexpression、Tikexpressionは削除

C4D R12からアンカータグ、IKタグ、固定エクスプレッションタグ、IKエクスプレッションタグが廃止されたからだね…

SplineObjectクラスのInitLength()、FreeLength()、GetLength()、UniformToNatural()は、新しいSplineLengthDataクラスへ移行

class SplineObject : PointObject
{
public:
  SplineObject();

  [int] GetSegmentCount();
  [array] GetSegments();
  [bool] SetSegments([array] s);

  [array] GetTangents();
  [bool] SetTangents([array] t);

  [vector] GetSplinePoint([float] x, [int] segment);
  [vector] GetSplineTangent([float] x, [int] segments);
};
class SplineLengthData
{
public:
  SplineLengthData();

  [bool] Init([SplineObject] op, [int] segm  =  0);//old InitLength()
  [void] Free();//old FreeLength()

  [float] UniformToNatural([float] pos);
  [float] GetLength();
  [float] GetSegmentLength([int] a, [int] b);//new
};

単純に2つに分けた状態だね…
SplineLengthDataクラスのGetSegmentLength()が追加されただけなので、他の使い方は以前と変わりないようだ…

これは、後日に…

VolumeDataクラスのlhitは削除

シェーダを開発しない人には全く関係ない物だね…
自分も詳しくわかりません。

BaseObjectクラスのOhypernurbsは削除され、代わりにOsdsを使用

こんな風に書くと、なんだかOsdsはOhypernurbsの代用品みたいに感じるけど…
Ohypernurbsは古いバージョンR8とかR9の互換の為に残されていただけで、最近のバージョンはOsdsだったかと…

確か、HyperNURBSにウェイトが掛けられる以前のバージョンがOhypernurbsでウェイト設定が可能になったときにOsdsが追加されたんじゃなかったかなぁ…
定かではないけど…

スクリプトマネージャでOsdsを試すなら…

//HyperNURBSをオブジェクトマネージャに追加
main(doc , op)
{
  var obj = AllocObject(Osds);
  doc->InsertObject(obj, NULL, NULL);
}

これで、オブジェクトマネージャのリストのトップにHyperNURBSが追加されます。

他のオブジェクトタイプ
http://villager-and-c4d.cocolog-nifty.com/blog/coffee-allocobject.html

C.O.F.F.E.E.でシーンにオブジェクトを追加する方法
http://villager-and-c4d.cocolog-nifty.com/blog/2010/01/c4d-insertobjec.html

途中ですが、久々に書いたので疲れました…
内容は、間違っているかもね…
残りは後日…

|

« そう言えば、以前作成したC.O.F.F.E.E.プラグイン[CamMapCalib]は、C4D R12では… | トップページ | C.O.F.F.E.E. SDK R12は、ドコが変わったんだい…2 »