Oct 04, 2009

Scripting 001b - 'Duplicate Face' - 番外

つぶやきに反応してちょっと書いてみた。

同位置に重なってポリゴンがある場合、Cheetah3D の 3D ビュー上では汚く見えるので、ビューのタイトルバーで "表示" -> "裏面を描画しない" を設定しておくのがいいでしょうね。

追記:UV をセットするコードがまちがっていたので、修正 (Foot in mouth)



// ツールスクリプト : ~/Library/Application Support/Cheetah3D/scripts/Tool フォルダにコピー // 選択したポリゴンを同位置に複製し、法線を反転するスクリプトのサンプル // ツールのプロパティを設定、ツールスクリプトの場合、必須関数 function buildUI( tool ) { // プロパティビューにパラメータを追加、 tool.addParameterInt('poly sel', 0, 0, 15, false, false); // プロパティビューに実行ボタンを追加、クリックで duplicateFace 関数を実行 tool.addParameterButton('duplicate', 'apply', 'duplicateFace'); } // ボタンをクリックした時に呼び出される関数。パラメータのボタンから呼び出された関数の場合、引数はこのツールオブジェクト自身 function duplicateFace( tool ) { // ドキュメントから選択されたオブジェクトを取得 var obj = tool.document().selectedObject(); // ローポリゴンオブジェクトでない場合、終了 // この type 関数で取得できる変数は、ヘルプファイル Constants の項を参照 if (obj.type() != POLYGONOBJ ) return false; // 現在の選択セットを保持しておく(そのまま設定に使用するとエラーが出るため int 型に変換) var polyNum_bk = parseInt( obj.getParameter('activePolySelection') ); // ポリゴン操作用のコアオブジェクト (PolyCore) を取得 // モディファイア・ボーン適用後のメッシュ情報が欲しい場合は、modCore 関数を使う // 今回直接ポリゴンを複製するので、core 関数を使用 var core = obj.core(); // var i, j; // 捜査用にポリゴン数を取得 var polyCount = core.polygonCount(); for (i = 0;i < polyCount;i++) { if ( core.polygonSelection(i) ) { // ポリゴンが選択されている場合、ポリゴンを複製 // ポリゴンのサイズ(ポイント数)を取得 var size = core.polygonSize( i ); // ポイントと UV 情報保持のための変数を定義 var vertices = []; var uvs = []; for (j = 0;j < size;j++) { // ポリゴンとコーナー(ポイント)のインデックスから、ポイント(バーテックス)のインデックスを取得し [vertexIndex] 、それを使用して位置情報 Vec3D を取得 [ vertex ]、その位置情報 Vec3D を保持 vertices.push( core.vertex( core.vertexIndex( i, j ) ) ); // ポリゴンとコーナー(ポイント)のインデックスから、UV 情報を取得し、その情報を保持 uvs.push( core.uvCoord( i, j ) ); } // 新規ポリゴンを作成 (ポイントを共有する(ポリゴンの表裏を接合する)場合は、第2引数を true にする)戻り値は追加したポリゴンのインデックス var pi = core.addPolygon( size, false, vertices); // 4.6 では、UV を個別にセット(エラーが出るため)##ここのインデックス指定が間違ってました i -> pi ## for (j = 0;j < size;j++) { core.setUVCoord( pi, j, uvs[j] ); } // 5.0 の場合、バグが直っているので、addPolygon の第4引数で、 uvs を渡してやった方が簡単 // var pi = core.addPolygon( size, false, vertices, uvs ); // 追加したポリゴンの法線を逆にする core.flipWinding( pi ); // ポリゴン選択セットを、ツールのプロパティで設定した値にセット(エラーが出るため int 型に変換) core.setActivePolygonSelection( parseInt(tool.getParameter('poly sel')) ); // 選択状態にしておく core.setPolygonSelection( pi, true ); // ポリゴン選択セットを、戻す core.setActivePolygonSelection( polyNum_bk ); } } // 3D ビューをアップデート obj.update(); }

iPhone 関係、ちょこちょこ参考書は読んでるんだけど、なんせ手が遅いんだよね。 (Foot in mouth)

2 Comments

Re: Scripting 001b - 'Duplicate Face' - 番外

はじめましてkabaと申します。
昨年の初め頃にCheetah3Dを購入しました。Macでの3Dは、いろいろ試したのですが上手くいきませんでした。その中でCheetah3Dは、とてもいい感じです。
先日、Cheetah3D 5.0 registration number!!!のメールが届きました。新しいバージョンでもいろいろ参考にさせていただきます。 よろしくです(Smile)

From : kaba @ 2009-10-07 11:36:30 Edit

Re: Scripting 001b - 'Duplicate Face' - 番外

コメントどうもです。

アップデートもそろそろですね。4.0 の時にも思った事ですが、5.0 盛り上がるといいなぁ。

気まぐれな更新ですが、こちらこそ、よろしくお願いします。 (Smile)

From : tg @ 2009-10-07 17:33:56 Edit

Post Your Comment


(Smile) (Wink) (Laugh) (Foot in mouth) (Frown) (Gasp) (Cool) (Tongue) (Ambivalent) (Angry) (Cry) (Sealed) (Touched) (Undecided) (Yum)

You must fill all *s. e-mail won't be publicized.