スレッド表示 | 古いものから 投稿するには登録が必要です | 前のスレッド | 次のスレッド | 下へ |
投稿者 | スレッド |
---|---|
投稿数: 13
|
投稿日時: 2010-11-04 15:55 Re: コントロールポイントの座標取得に関して教えて下さい。 |
結果報告です。
取得したポイントやハンドルの座標を教えていただいた xshade.scene().world_to_user_matrix xshade.scene().active_shape().local_to_world_matrix 変換して移動量を計算、座標を出してから xshade.scene().user_to_world_matrix xshade.scene().active_shape().world_to_local_matrix 変換した座標にポイントやハンドルを移動して整列 このような形にしました。 これで、Shade V12に移行できます。 ありがとうございました。 | |
投稿数: 13
|
投稿日時: 2010-10-30 21:02 Re: コントロールポイントの座標取得に関して教えて下さい。 |
加藤さん
色々試してみます。ありがとうございます。 | |
投稿数: 189
|
投稿日時: 2010-10-30 17:14 Re: コントロールポイントの座標取得に関して教えて下さい。 |
すみません、たいへん失礼しました。
「 MASA_さんの指摘どおり… 」と書くべき所、「 さん 」が抜けてしまいました。 | |
投稿数: 189
|
投稿日時: 2010-10-30 13:38 Re: コントロールポイントの座標取得に関して教えて下さい。 |
引用:
ジョイント類や自由曲面の matrix 扱いは基本的にパートのそれと同じですから、 ・ 直線移動 ・ 回転 ・ 拡大縮小 ・ 均等拡大縮小 ・ ボールジョイント ・ パスジョイント いずれがどのように入れ子関係になっていても先の script で大丈夫ですよ。 ただし、MASA_ の指摘どおり、スキンはダメなようです。 以下に前記3)のスクリプトを自由曲面に対する処理を含めて書き直しておきます。 それとサンプルファイルも添付しておきます。 サンプルファイルでは local 座標下で色々なジョイント類を入れ子にして最下層に線形状と自由曲面を入れてあります。 下記のスクリプトで position を get してみて下さい。 100.zip
また、ジョイント類の内、「 スイッチジョイント 」に対しては ・スイッチジョイント内の 線形状/自由曲面 を選択しての position get は OK ・スイッチジョイントで指定されているオブジェクトの position get ならば、 次のようにして指定されているオブジェクトを取得できます。
| |
投稿数: 13
|
投稿日時: 2010-10-30 10:32 Re: コントロールポイントの座標取得に関して教えて下さい。 |
MASA_さん、加藤さん
色々と教えていただき、ありがとうございます。 ローカル座標系での作業もあり、ボールジョイント等も使用しています。 頻繁に使用するツールなのですが、すべての場合で作動するのは大変そうなので どのように対応するか、よく考えてみたいと思います。 分からない事が出ましたら、よろしくお願いします。 | |
投稿数: 189
|
投稿日時: 2010-10-28 23:23 Re: コントロールポイントの座標取得に関して教えて下さい。 |
< 追加 >
dummy パートを利用する方法の場合、対象が自由曲面であれば、 4)複製したオブジェクトを dummy パート内に移動 の後に追加で 4-2)複製した自由曲面に reset transformation をかける としておきます。 | |
投稿数: 189
|
投稿日時: 2010-10-28 21:16 Re: コントロールポイントの座標取得に関して教えて下さい。 |
MASA_さん、こんにちわ、
御指摘の通り、自由曲面を選択した場合はそのとおりですね。 ありがとうございます。 local_to_world_matrix は Shade 内部で逆マトリックス計算をして答えを出しているので、どうしても誤差が生じてしまいます。 まあそんなことをいちいち気にする必要があるかどうかは別にして、少しでも精度を上げようと思えば、次のような方法もありますね。 個人的にはいつもはこちらの方法を使っています。 1)当該オブジェクトの複製を作る 2)dummy パートを作成する。 3)dummy パートに cancel transformation をかける 4〕複製したオブジェクトを dummy パート内に移動 → これで複製オブジェクトには一切の上位マトリックスはかからなくなります。 5)position を get する 6)dummy part を中に入れた複製オブジェクト共々削除 7)選択状態を復帰 アニメーションをやっていないのでスキンは使ったことがないのですが、なんとなく面倒くさそうな感じはありありですね。 | |
投稿数: 308
|
投稿日時: 2010-10-28 13:56 Re: コントロールポイントの座標取得に関して教えて下さい。 |
加藤さんからの説明に、注意点を2点追加します。
1.自由曲面パートでは、パートを選択した状態で、パートに変換が掛かっている場合は、さらにパートの変換マトリックスを掛ける計算を追加する必要があります。面倒なので、自由曲面の場合、その子の線形状のShapeクラスで計算する手も有ります。 2.もし、そのポイントにスキンが掛かっている場合、ポイントは、最初のバインドジョイントの変換マトリックスの影響下に入り単純には計算できなくなります。 この場合は、ポイントのskinクラスでのskin_world_matrix を利用してworld位置を取得する必要があります。 この切り替えは、skinバインドがあるかどうか調べないと分からないので結構面倒です。 これらの計算を全部纏めて実行する関数を作ろうかなと思ってましたが、作るより検証の方が大変なので躊躇してます。 | |
投稿数: 13
|
投稿日時: 2010-10-28 09:19 Re: コントロールポイントの座標取得に関して教えて下さい。 |
加藤様
applescriptの時は、この辺りを考えなくても結果オーライで動いていました。 大変助かります、ありがとうございました。・・・・・感謝!感謝! | |
投稿数: 189
|
投稿日時: 2010-10-27 20:42 Re: コントロールポイントの座標取得に関して教えて下さい。 |
ついでですが、
ローカルマトリックスを使用した場合、ロクロとローカルマトリックスは処理としては同じなので( たぶん )、 ・回転パート内に入っていて ・上位マトリックスがかかっていて ・ローカルマトリックスがかかっていて ・ロクロがかかっている ような場合でも、下記3)のプログラムで見かけの座標を得ることができますよ。 | |
投稿数: 189
|
投稿日時: 2010-10-27 20:08 Re: コントロールポイントの座標取得に関して教えて下さい。 |
< ごめんなさい、再訂正です >
しんじさん、こんにちわ 御質問の件ですが、 1)上位マトリックスがある場合、あるいは回転パート内に入っている場合 active_shape() の local_to_world_matrix を取得してそれを乗じてやります。
2)ロクロ機能を使用したとき scene()) の world_to_user_matrix を取得してそれを乗じてやります。
3)両方がある場合、 active_shape() の local_to_world_matrix を乗じてから scene()) の world_to_user_matrix を乗じてやります。
| |
投稿数: 189
|
投稿日時: 2010-10-27 20:00 Re: コントロールポイントの座標取得に関して教えて下さい。 |
< 訂正版 >
しんじさん、こんにちわ 御質問の件ですが、 1)上位マトリックスがある場合、あるいは回転パート内に入っている場合 active_shape() の local_to_world_matrix を取得してそれを乗じてやります。
2)ロクロ機能を使用したとき scene()) の world_to_user_matrix を取得してそれを乗じてやります。
3)両方がある場合、 active_shape() の local_to_world_matrix を乗じてから scene()) の world_to_user_matrix を乗じてやります。
| |
投稿数: 189
|
投稿日時: 2010-10-27 19:57 Re: コントロールポイントの座標取得に関して教えて下さい。 |
失礼
訂正します | |
投稿数: 189
|
投稿日時: 2010-10-27 19:55 Re: コントロールポイントの座標取得に関して教えて下さい。 |
しんじさん、こんにちわ
御質問の件ですが、 1)上位マトリックスがある場合、あるいは回転パート内に入っている場合 active_shape() の local_to_world_matrix を取得してそれを乗じてやります。
2)ロクロ機能を使用したとき scene()) の world_to_user_matrix を取得してそれを乗じてやります。
3)両方がある場合、 active_shape() の local_to_world_matrix を乗じてから scene()) の world_to_user_matrix を乗じてやります。
| |
投稿数: 13
|
投稿日時: 2010-10-27 10:49 コントロールポイントの座標取得に関して教えて下さい。 |
これまで、ポイントやハンドルの整列をapplescript(Xcode)で作っていました。
これをPython(widgets)で作成しようとすると座標取得がうまく行かなくて困っています。 対処方法を教えて下さい。 xshade.scene().active_shape().control_point(i).position xshade.scene().active_shape().control_point(i).in_handle を使用してコントロールポイントやハンドルの座標を取得する時、 一つは、線形状を含む自由曲面や上位パートのマトリクスに影響される事。 もう一つは、 同じような感じですが、回転パート等で移動しても移動前の座標になる事。 また、ろくろ機能を使用したとき、 線形状を正面に持って来たときの見せかけ?の座標が取得できない事。 説明が下手で申し訳ありません。よろしくお願いします。 | |
スレッド表示 | 古いものから 投稿するには登録が必要です | 前のスレッド | 次のスレッド | トップ |