トップページに戻る
 
  スレッド一覧 | 新規スレッド | 留意事項 | ワード検索 | 過去ログ | 管理用 |
icon コントロールポイントの座標について
日時: 2005/06/07 17:45
名前: はる  メールを送る

コントロールポイントの座標抽出方法を知っている方いらっしゃいますか。
xmldshd形式でエクスポートすることで、座標を読み取ることはできるのですが、
その座標は、基本形の座標らしく、回転などによるmove後の状態には対応していないようです。
move後のコントロールポイントの座標抽出方法を教えてください。
メンテ
Page: [1] [2]

file Re: コントロールポイントの座標について ( No.4 )
日時: 2005/06/07 23:43
名前: 管理人

>正直いうとスクリプトでは、ワールド座標値を得ることは不可能と思います。

最新のShadeを持ってないので、あまり自信を持って言えないのですが、
少なくともShade6ではグローバル座標値が得られています。

スクリプトで得られる座標値はむしろグローバルの方が多いのではないでしょうか。
一部のプロパティ(sphere_object_centerやdisk_object_centerなど)では、
なぜかローカル座標値を返すものもあるようです。
↓関連スレッド
http://www2u.biglobe.ne.jp/~k_hiray/ps_db/bbs2/patio.cgi?mode=view&no=41

スキン設定されているポイントをジョイントで動かした場合でも、
普通にanchor_pointでグローバル座標値が得られるようです。
メンテ
file Re: コントロールポイントの座標について ( No.5 )
日時: 2005/06/08 00:26
名前: まさ メールを送る

>スクリプトで得られる座標値はむしろグローバルの方が多いのではないでしょうか。
そうですか。ちょっと安易に書いてしまったようです。
スクリプトから遠ざかってしまったもので、思い込みをしてたかもしれません。
実は、大分前に最初tclでスクリプトを書いてましたが、shade5?6?あたりから Python スクリプトが
提供されるようになって、tclに比べはるかに記述がし易くなったので Python に切り替えてしまいました。
そこで、リファレンスには、座標値は「全てローカルです」と記述があったので思い込んでしまったようです。
しかし、python のメソッドおよびアトリビュートの仕様が shade7からまったく違ったものになったため
全てのスクリプトが動作不良になってしまったのでスクリプトからは遠ざかってしまいました。
(↑これは、愚痴)
ただ、気になるのは、それ以外のスクリプトはあまり仕様が変わらず、あまりメンテナンスされてない
ようなので、スキンの重みが0.5などの1.0でない場合果たして正しいワールド値を返しているのか
とても気になるのです。本来なら確認すべきところですが、最新のリファレンスが提供されてないので
今は手を付けてません。
メンテ
file Re: コントロールポイントの座標について ( No.6 )
日時: 2005/06/08 12:29
名前: 管理人

>全てのスクリプトが動作不良になってしまったのでスクリプトからは遠ざかってしまいました。

え、そうなんですか。
Shadeほど使えるスクリプトの種類が多い3DCGソフトはないと思うし、
そうしたスクリプトで作業が便利にできるというのがShadeの大きな魅力のひとつだと思っているのですが、
動作不良じゃ困りますね。リファレンスも公開されてないのですか。

>ただ、気になるのは、それ以外のスクリプトはあまり仕様が変わらず、

新しい機能が追加されるというのは大歓迎なのですが、同じ名前のコマンドやプロパティが
別の動作をしたり、違う値を返すようになると、けっこう大変だったりします。
Shade6でのUTF-8にからむ文字コードの問題も大きかったですね。

>スキンの重みが0.5などの1.0でない場合果たして正しいワールド値を返しているのかとても気になるのです。

気になるようでしたら、以下のようなスクリプトで確認してみてはいかがでしょう。
スキン設定されている線形状を選んだ状態で実行し、取得した座標値のリストから
新たに線形状を描きます。線形状が同じところにできたら、
正しいというか、見た目通りの座標値を返しているといえると思います。Tclです。
Shade6ではウェイトが1.0でない場合も、見た目通りの座標値を返しているようです。

set co_list {}
for {set i 0} {$i < $number_of_anchor_points} {incr i} {
    lappend co_list [list [anchor_point $i] [inhandle $i] [outhandle $i]]
}
select_all
start_polygon closed 1
foreach co $co_list {
    append_point at [lindex $co 0] in_absolute [lindex $co 1] out_absolute [lindex $co 2]
}
finish_polygon
メンテ
file Re: コントロールポイントの座標について ( No.7 )
日時: 2005/06/08 13:12
名前: はる

平山さん、Junさん、まささん、ありがとうございます。

私が、コントロールポイントの座標値を必要としている理由は、
MAVS7.0でshadeで作成した物体を表現したいからです。

MAVS7.0ファイルの書式が

4       //要素数
x1、y1、z1
x2、y2、z2
x3、y3、z3
x4、y4、z4
4



であり、四角形のパネルで表現することを目的としています。
ですので、平山さんに教えて頂いたスクリプトのようにファイルに書き出しを行いたいのです。

そこで、質問なのですが、

>set file_ID [open "${file_name}.txt" w]
>puts $file_ID $co
>close $file_ID

の行に入ると、

"Tclをインストールしてください。" という警告が出てきます。

tcl84.dll があることは確認しているのですが、これは、何が原因なのでしょうか。
私は7.5を使用しているのですが、verによるものなのでしょうか。





メンテ
file Re: コントロールポイントの座標について ( No.8 )
日時: 2005/06/08 13:50
名前: Jun

はる様。

Macをお使いでしたら、ファイルアクセスはAppleScriptがベストです。

set fileNum to open for access file "ファイルパス" with write permission
write "記入したい文字をかく" to fileNum
close access fileNum

Windowsでは、Basic言語でファイルの書き出しができたと思うのですが、具体的にはよく分かりません。

>MAVS7.0ファイル
これは、OpenGL関係でしょうか。
もしそうであれば、変数にリストで値を入れて、こんな事をされてはいかがですか。(Objective-Cです。)

glFrontFace(GL_CW);
GLdouble a1[] = {x1,y1,z1};
GLdouble a2[] = {x2,y2,z2};
GLdouble a3[] = {x3,y3,z3};
GLdouble a4[] = {x4,y4,z4};
glBegin(GL_QUADS);
glVertex3dv(a1);
glVertex3dv(a2);
glVertex3dv(a3);
glVertex3dv(a4);
glEnd();

私はOpenGLはあまりよく分からないのですが、少なくとも上のコードでOpenGLViewに描画を行ったら、四角形は見えると思います。
メンテ
file Re: コントロールポイントの座標について ( No.9 )
日時: 2005/06/08 19:19
名前: 管理人

>"Tclをインストールしてください。" という警告が出てきます。
え、そうなんですか。該当行は新たにファイルを作って座標値を書き込むということを
やってるんですが、7.5では使えないんですか。tcl84.dllでやっていると思ってましたが・・・。

うーん、それじゃVBScriptでやってみてください。(Windowsなら)
VBScriptでもファイル書き出しができないということはまず無いと思います。
VBScriptほとんど忘れてますが・・・

nap = XShade.NumberOfAnchorPoints
ReDim cap(nap-1, 2)
For i = 0 To nap-1
    For j = 0 To 2
        cap(i, j) = XShade.AnchorPoint(i, j)
    Next
Next

Set v_FS = CreateObject("Scripting.FileSystemObject")
Set fld_s = v_FS.CreateTextFile("write_ap_co.txt", True)
fld_s.WriteLine(nap & "    //要素数")
For i = 0 To nap-1
    fld_s.WriteLine(cap(i, 0) & "," & cap(i, 1) & "," & cap(i, 2))
Next
fld_s.WriteLine(nap)
fld_s.Close

ところで
7.5ってメッセージウインドウに表示された文字がコピーできるようになったんでしたっけ。
メンテ
file Re: コントロールポイントの座標について ( No.10 )
日時: 2005/06/09 15:51
名前: はる メールを送る

Junさん、平山さんありがとうございます。
お伝え遅れましたが、私はwindows xp で、shade7.5 を使用しております。

> 7.5ってメッセージウインドウに表示された文字がコピーできるようになったんでしたっけ。
7.5では、ショートカットコマンドを使用して、コピー&ペーストができます。

>うーん、それじゃVBScriptでやってみてください。(Windowsなら)
>VBScriptでもファイル書き出しができないということはまず無いと思います。
ファイルに出力ができるようになりました!ありがとうございます。
さまざまな MAVS 書式を書けるように、まだまだ、勉強しなきゃなと思っております。

初歩的な質問で申し訳ないのですが、VBScript for shade のリファレンスは、どこかからダウンロードできるものなのでしょうか。
基本構文などはVBscriptのユーザーズガイド(msdn)で勉強しようと思っているのですが、
shade用の関数のリファレンスはあるのでしょうか。

メンテ
file Re: コントロールポイントの座標について ( No.11 )
日時: 2005/06/09 16:35
名前: Jun

はる様
VBScriptはWindows scriptの一種ですよね?
では、Shade 6用ですが、ここからダウンロードできそうです。
http://shade.e-frontier.co.jp/download/dev_6script20.html

私には分かりかねますが、Shade 6と7.5のスクリプトは大して変わっていないのではないか、と思います。
デバッグ機能があるエディタを使用されているなら、少しコマンドが違っていたら警告してくれるので、6のマニュアルで7.5用を作るのは結構簡単だと思います。
メンテ
file Re: コントロールポイントの座標について ( No.12 )
日時: 2005/06/09 18:20
名前: はる

Junさん、ありがとうございます。

以前にも、ご提示いただいていたのですが、それが自分の求めているリファレンスだということを認識できていませんでした。お恥ずかしいばかりです。

これからしっかり勉強していきたいと思います。ありがとうございました。
メンテ
file Re: コントロールポイントの座標について ( No.13 )
日時: 2005/06/09 19:03
名前: Jun

はる様
説明が手に入ってよかったですね。
Visual StudioというWindowsのソフトを使えば、VBScriptにGUIを付けられるそうなので、結構拡張性があると思います。
ただ、速度的な面では完璧な開発環境とは言えないので、いろいろと細工をしてスピードアップをしないと処理時間がえらく長くなってしまう事もありますので注意が必要です。

スクリプトでも、様々な方法でスピードアップが出来ますので、それを書いておくので参考になさってください。
1,形状作成や、選択の変更などを行う場合は、そのコマンドの塊をinhibit updateとallow updateで囲む。
2,要らなくなった変数は、まとめて消去する。
3,Windowsではどうか分かりませんが、Macでは沢山あるイベントを1つのイベントとして送る。
4,特に理由が無い限り、リアルタイムは追求しない。
などなど...
メンテ

親記事を見る

Page: [1] [2]
マークトップページに戻る スレッド一覧 | 新規スレッド | 留意事項 | ワード検索 | 過去ログ | 管理用 |

題名 スレッドをトップへソート
名前
E-Mail
スパムメール対策のため、[表示]にしてもメールアドレスが直接表示されることはありませんが、サンプルのようなメールフォームでメールを受け取ることができます。
メールフォームサンプル サンプル  メールヘッダについて
URL
投稿キー (投稿時 投稿キー を入力してください)
添付ファイル (最大300KBまで gif jpeg png text zip pdf midi swf)
コメント (^^) (^_^) (+_+) (^o^) (^^;) (^_-) (;_;)

(改行、インデントが反映されます)

   クッキー保存    パスワード  (記事メンテ時に使用)