Shade online フォーラム
ログイン
ユーザ名:

パスワード:

IDとパスワードを記憶

パスワード紛失
| 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | 下へ
投稿者 スレッド
投稿数: 422
投稿日時: 2006-09-20 18:16
Re: Appleスクリプト・・・
ShadeからAppleScriptへ渡すデータを最適化することができるのなら・・・。
投稿数: 189
投稿日時: 2006-09-20 17:38
Re: Appleスクリプト・・・
どうもスクリプトエディターがらみで、あながち Shade 側だけの問題ではないみたいですね。
色も少し変わってしまいますか、って、なんともコメントのしようが‥‥
投稿数: 422
投稿日時: 2006-09-20 17:15
Re: Appleスクリプト・・・
最近のAppleScriptはを実行はできるがコンパイルはできないようです
以前のAppleScriptでコンパイルしてShade8.5のその他から実行はできるが
IntelMacに付属のAppleScriptエディターはコンパイルができない
それとレインンボウスクリブトで指定した色は再度レインンボウスクリブトが動作したときには指定した色よりも少し色指定のポイントが中に移動しているようです
3行を省いた方でも同じように安全色に調節されているようです。
投稿数: 422
投稿日時: 2006-09-20 16:28
Re: Appleスクリプト・・・
数回色を変えて試しましたがどちらででも作動しました。
これも保存版に・・・。
投稿数: 189
投稿日時: 2006-09-20 16:11
Re: Appleスクリプト・・・
修正版です

引用:

コンパイルエラーになってしまいました
"then"などがあるべきところですがunknown tokenが見つかりました。
というアラートが出ました。


Apple Script で使われる一文字で表される >= が送信すると文字化けしちゃってました。
ということで、一文字で表される >= を使わない書き方で書き改めました。


--- ここからチョッキン ---

tell application "Shade 8 professional"
-- 入力ダイアログ
activate
begin dialog 200 -- dialog ID には適当な数字を入れてください

set n_color to 4 -- 色を指定するダイアログの数を与えます。(2以上の数であれば自由に指定できます)

repeat n_color times -- RGB ダイアログを n_color 個作成
append RGB dialog item "色"
end repeat

set colorL to {} -- 入力ダイアログで指定される色を格納するリストを空リストとして作成
if ask dialog then
repeat with i from 1 to n_color
set colorL to colorL & {(get RGB property value (i - 1))} -- colorL にユーザーが指定する色を順次格納
end repeat
end dialog
else
return

end if

-- 処理
inhibit update
if object type = part object then -- 選択オブジェクトがパート(自由曲面やジョイント類を含む)なら
set n_Child to (number of sons of shape 1 of active objects of scene 1) -- 選択されているオブジェクトの子の数を調べる
if n_Child > 1 then -- 子オブジェクトが2個以上存在する (n_child = 1 だと SetColor() の中でエラーとなってしまう)
select child
set counter to 1 -- 何番目の子であるかを示すカウンター
set base color to my SetColor(n_color, colorL, n_Child, counter) -- SetColor() で決定される拡散反射色をセットする
repeat (n_Child - 1) times
select brother
set counter to (counter + 1) -- カウンターを一つ進ませる
set base color to my SetColor(n_color, colorL, n_Child, counter)
end repeat
select parent
end if
end if
allow update
end tell


on SetColor(n_color, colorL, n_Child, counter) -- 色を設定する sub-routine
-- n_color : 指定された色の数
-- colorL : 指定された色を格納したリスト
-- n_child : 子オブジェクトの総数
-- counter : 現在の子の番号(1から始まる)

set d to (n_color - 1) / (n_Child - 1)
set pos to d * (counter - 1) -- 4つの色が指定された場合、子オブジェクトの番号に応じて 0〜3( = 4 - 1) の数字を pos として割り当てる
set item_1 to (pos div 1) + 1 -- (pos div 1) で切り捨てとなる、例えば、pos = 0.5 ならば切り捨てられて 0、それに1を加えて結果 item_1 = 1 となる
if item_1 ≠ n_color then -- 選択されている子オブジェクトへの色を指定された色の間で定義するが、その際に使用される左側の色番号
set item_2 to (item_1 + 1) -- 選択されている子オブジェクトへの色を指定された色の間で定義するが、その際に使用される右側の色番号
else
set item_2 to item_1
end if

set pos to (pos - (pos div 1)) -- pos から自身を切り捨てた数値を引く、すなわち pos の小数点以下をあらためて pos として再定義
set color_1 to (item item_1 of colorL) -- 左側の色番号に従って colorL の中から左側の色を取り出す
set color_2 to (item item_2 of colorL) -- 右側の色番号に従って colorL の中から右側の色を取り出す

set red to ((item 1 of color_1) + pos * ((item 1 of color_2) - (item 1 of color_1))) -- color_1, color_2 の間で pos を使って中間の色の赤成分を決定
set green to ((item 2 of color_1) + pos * ((item 2 of color_2) - (item 2 of color_1))) -- 同上の緑成分
set blue to ((item 3 of color_1) + pos * ((item 3 of color_2) - (item 3 of color_1))) -- 同乗の青成分

set red to (red * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた
set green to (green * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた
set blue to (blue * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた

return {red, green, blue} -- RGB color としてリスト形式で返す
end SetColor
投稿数: 189
投稿日時: 2006-09-20 15:58
Re: Appleスクリプト・・・
引用:

コンパイルエラーになってしまいました
"then"などがあるべきところですがunknown tokenが見つかりました。
というアラートが出ました。



むむむ、送信した段階で何かおかしくなってますね。
しばし、お待ちを
投稿数: 422
投稿日時: 2006-09-20 15:53
Re: Appleスクリプト・・・
移動スクリプトを等比にすると途中からオブジェクトが消えてしましました
これはやっぱり有効桁数の問題かもしれませんね。
投稿数: 422
投稿日時: 2006-09-20 15:51
Re: Appleスクリプト・・・
加藤さんありがとうございます。
以前に使っていたレインボウスクリプトが動作しなくなってましたのでこれが動けばスクリプトの環境が改善されます。

コンパイルエラーになってしまいました
"then"などがあるべきところですがunknown tokenが見つかりました。
というアラートが出ました。
set base color to my SetColor(n_color, colorL, n_Child, counter) -- SetColor() で決定される拡散反射色をセットする
の行の Child, の部分に選択の印がついていました。
投稿数: 189
投稿日時: 2006-09-20 15:27
Re: Appleスクリプト・・・
おまけ( 後編 )

一つ前の script の続きです。


指定するカラーの数は 4 にしていますが、6行目の n_color の数を変更すれば、いくつでも増やせます。

set n_color to 4 ← この 4 を好きな数に変更する


RGB カラー情報の有効桁数をわざと制限してあります。
IntelMac で動けばめっけものですが、この処理を加えていてもダメなら原因は有効桁数以外にある可能性が強くなります。
もし IntelMac で動いたなら、試しに RGB の有効桁数を制限した部分を取り除いて動かしてみてください。
その状態でエラーとなれば、IntelMac での不具合の原因は有効桁数にある可能性が強くなります。

on SetColor(n_color, colorL, n_Child, counter)
‥‥
‥‥
set red to (red * 1000000 div 1) / 1000000 ← この行を取り除く
set green to (green * 1000000 div 1) / 1000000 ← この行を取り除く
set blue to (blue * 1000000 div 1) / 1000000 ← この行を取り除く

return {red, green, blue}
end SetColor
投稿数: 189
投稿日時: 2006-09-20 15:25
Re: Appleスクリプト・・・
おまけ(前編)


引用:

※移動ツールだけではなくて表面材質(グラデーション)など様々なカスタマイズが考えられます。


warp さんのやってみたいことを想像して作ってみました。
選択したパートの中のオブジェクト(2個以上必要)の拡散反射色にレインボーカラーを割り当てます。


---- ここから下をはさみでチョッキン ----

tell application "Shade 8 professional"
-- 入力ダイアログ
activate
begin dialog 200 -- dialog ID には適当な数字を入れてください

set n_color to 4 -- 色を指定するダイアログの数を n_color で与えます( 2以上の数であれば自由に指定できます。)

repeat n_color times -- RGB ダイアログを n_color 個作成
append RGB dialog item "色"
end repeat

set colorL to {} -- 入力ダイアログで指定される色を格納するリストを空リストとして作成
if ask dialog then
repeat with i from 1 to n_color
set colorL to colorL & {(get RGB property value (i - 1))} -- colorL にユーザーが指定する色を順次格納
end repeat
end dialog
else
return
end if

-- 処理
inhibit update
if object type = part object then -- 選択オブジェクトがパート(自由曲面やジョイント類を含む)なら
set n_Child to (number of sons of shape 1 of active objects of scene 1) -- 選択されているオブジェクトの子の数を調べる
if n_Child ? 2 then -- 子オブジェクトが2個以上存在する (n_child = 1 だと SetColor() の中でエラーとなってしまう)
select child
set counter to 1 -- 何番目の子であるかを示すカウンター
set base color to my SetColor(n_color, colorL, n_Child, counter) -- SetColor() で決定される拡散反射色をセットする
repeat (n_Child - 1) times
select brother
set counter to (counter + 1) -- カウンターを一つ進ませる
set base color to my SetColor(n_color, colorL, n_Child, counter)
end repeat
select parent
end if
end if
allow update
end tell


on SetColor(n_color, colorL, n_Child, counter) -- 色を設定する sub-routine
-- n_color : 指定された色の数
-- colorL : 指定された色を格納したリスト
-- n_child : 子オブジェクトの総数
-- counter : 現在の子の番号(1から始まる)

set d to (n_color - 1) / (n_Child - 1)
set pos to d * (counter - 1) -- 4つの色が指定された場合、子オブジェクトの番号に応じて 0〜3( = 4 - 1) の数字を pos として割り当てる
set item_1 to (pos div 1) + 1 -- (pos div 1) で切り捨てとなる、例えば、pos = 0.5 ならば切り捨てられて 0、それに1を加えて結果 item_1 = 1 となる
if item_1 ≠ n_color then -- 選択されている子オブジェクトへの色を指定された色の間で定義するが、その際に使用される左側の色番号
set item_2 to (item_1 + 1) -- 選択されている子オブジェクトへの色を指定された色の間で定義するが、その際に使用される右側の色番号
else
set item_2 to item_1
end if

set pos to (pos - (pos div 1)) -- pos から自身を切り捨てた数値を引く、すなわち pos の小数点以下をあらためて pos として再定義
set color_1 to (item item_1 of colorL) -- 左側の色番号に従って colorL の中から左側の色を取り出す
set color_2 to (item item_2 of colorL) -- 右側の色番号に従って colorL の中から右側の色を取り出す

set red to ((item 1 of color_1) + pos * ((item 1 of color_2) - (item 1 of color_1))) -- color_1, color_2 の間で pos を使って中間の色の赤成分を決定
set green to ((item 2 of color_1) + pos * ((item 2 of color_2) - (item 2 of color_1))) -- 同上の緑成分
set blue to ((item 3 of color_1) + pos * ((item 3 of color_2) - (item 3 of color_1))) -- 同乗の青成分

set red to (red * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた
set green to (green * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた
set blue to (blue * 1000000 div 1) / 1000000 -- 本来は不必要だが試しに入れてみた

return {red, green, blue} -- RGB color としてリスト形式で返す
end SetColor
投稿数: 422
投稿日時: 2006-09-20 15:06
Re: Appleスクリプト・・・
最後の部分を
on action(trans, theta, k) -- 移動回転処理
tell application "Shade 8 professional"
if k = 0 then -- 移動→回転
move object around center translate trans
move object around center rotate theta
else -- 回転→移動
move object around center rotate theta
move object around center translate trans
end if
end tell
end action

にしたら私の考えている通りになりました。
これは保存版にさせていただきます。
投稿数: 189
投稿日時: 2006-09-20 14:24
Re: Appleスクリプト・・・
引用:

最後のスクリプトまでになったらもうありがたく使わせていただく意外手が見つかりませんが、少しずつ解読-応用ができるようになっていきたいと思います。


非常に情報不足ですから script を最初から勉強される方は大変だと思います。

今行おうとしていることが Shade 特有の機能が必要なのか、Apple Script に備わっている機能が必要なのか、その区分けが初心者の方にはさっぱりだということも、学習を阻害する大きな要因です。

やはりダイアログを開いて云々というレベルのものまで作ろうと思うと、Apple script に限らずプログラムの書き方に対する馴れのようなものがないと苦しいですね。

私が紹介したサンプルもちょっと長いですが、少しスクリプトをかじった方なら、プログラムの流れは直ぐに理解できると思います。
が、その域に達するまでに時間がかかってしまいます。

こういうのは向き不向きがあり、感覚として受け入れられそうだと思えば、ハチマキ締めてやれば覚えられますから、紹介したサンプル見て、覚悟を決めて取り組むか、やっぱり諦めて recording で満足するか、そのどちらかを決めていただければいいと思います。

script に割かれる時間と作品づくりの生産性と、その天秤具合を判断するのはとても難しいですし、そもそも初心者の方にとってはこの天秤具合を判断することができないというのが苦しいです。

ちなみにかく言う私も tcl は見る気もおきない、python はだいたい読めるけど、書く気までにはとうていなれないという程度です。





投稿数: 189
投稿日時: 2006-09-20 13:21
Re: Appleスクリプト・・・
引用:

弟位置のオブジェクトそれぞれの中心を順に取得して、そこを起点にそれぞれのオブジェクトひとつひとつに拡大縮小・移動・回転ができたら予想通りになるような感じがしています.


center で選択オブジェクトの中心座標が取得できます。

中心を指定しての拡大縮小と回転は次のようになります。
move object around {10,10,10} scale {2,2,2} -- 座標 {10,10,10} を中心としてX, Y, Z 方向に2倍に拡大
move object around {10,10,10} rotate {0, 20, 0} -- 座標 {10,10,10} を中心として Y 回りに20度回転

ですからオブジェクトの中心回りの拡大縮小と回転は
move object around center scale {2,2,2}
move object around center rotate {0, 20, 0}

投稿数: 422
投稿日時: 2006-09-20 12:49
Re: Appleスクリプト・・・
年齢 " "視力 " "名前 " "座標 " のスクリプトIntelMacではエラーになってしまいます。
これもやっぱりIntelMacの仕業でしょうか。
帰ってPowerbookでやってみます。
投稿数: 422
投稿日時: 2006-09-20 12:43
Re: Appleスクリプト・・・
加藤さん微に入り細に入りありがとうございます。
最後のスクリプトまでになったらもうありがたく使わせていただく意外手が見つかりませんが、少しずつ解読-応用ができるようになっていきたいと思います。

ダイアログボックスに入れた数値と予想がちょっと違う感じになってしまいます。
弟位置のオブジェクトそれぞれの中心を順に取得して、そこを起点にそれぞれのオブジェクトひとつひとつに拡大縮小・移動・回転ができたら予想通りになるような感じがしています

昔のスクリプトから (get center)なるコマンドを見つけました
どういう形で入れてよいのやら分かりませんがどこかに挟み込んだらその場で回転とかができるようになるかと思いました。
それぞれのオブジェクトのセンターを中心に(から)回転や移動・拡縮ができる感じです。
投稿数: 189
投稿日時: 2006-09-20 10:40
Re: Appleスクリプト・・・
引用:

もうチト凝ったことをしてみます。
入力では以下の項目を入力します。
・初期移動量
・移動量の変化を 等差, 等比 から選択
・移動量の変化量
・初期回転量
・回転量の変化を 等差, 等比から選択
・回転量の変化量
・移動と回転の順番を指定


これも sub-routine を使用しないで記述するとすれば、次のようになります。


tell application "Shade 8 professional"
-- 入力ダイアログ
activate --Shade を前面にもってくる
begin dialog 200 -- ダイアログの開始(dialog ID = 200 この番号は script 毎にユニークな値を割り当てる)
append vec3 dialog item "初期移動量" --0
append selection dialog item "移動量の変化/等差/等比" --1
append vec3 dialog item "移動量の変化(等比の場合は等比係数)" --2
append vec3 dialog item "初期回転量" --3
append selection dialog item "回転量の変化/等差/等比" --4
append vec3 dialog item "回転量の変化(等比の場合は等比係数)" --5
append selection dialog item "移動回転の順序/移動→回転/回転→移動" --6

if ask dialog then -- 入力ダイアログを開き、ユーザーがキャンセルしなかった
set trans to (get vec3 property value 0)
set transSel to (get selection property value 1)
set d_trans to (get vec3 property value 2)
set theta to (get vec3 property value 3)
set rotSel to (get selection property value 4)
set d_theta to (get vec3 property value 5)
set t_r to (get selection property value 6)
end dialog --ダイアログ終了
else
return -- ユーザーキャンセル
end if

inhibit update
if select child then
if t_r = 0 then -- 移動→回転
move object translate trans
move object rotate theta
else -- 回転→移動
move object rotate theta
move object translate trans
end if

repeat
if select brother then
if transSel = 0 then -- 等差
set trans to {(item 1 of trans) + (item 1 of d_trans), (item 2 of trans) + (item 2 of d_trans), (item 3 of trans) + (item 3 of d_trans)}
else -- 等比
set trans to {(item 1 of trans) * (item 1 of d_trans), (item 2 of trans) * (item 2 of d_trans), (item 3 of trans) * (item 3 of d_trans)}
end if

if rotSel = 0 then -- 等差
set theta to {(item 1 of theta) + (item 1 of d_theta), (item 2 of theta) + (item 2 of d_theta), (item 3 of theta) + (item 3 of d_theta)}
else -- 等比
set theta to {(item 1 of theta) * (item 1 of d_theta), (item 2 of theta) * (item 2 of d_theta), (item 3 of theta) * (item 3 of d_theta)}
end if

if t_r = 0 then -- 移動→回転
move object translate trans
move object rotate theta
else -- 回転→移動
move object rotate theta
move object translate trans
end if
else
exit repeat
end if
end repeat
select parent
end if
allow update
end tell
投稿数: 189
投稿日時: 2006-09-20 10:03
Re: Appleスクリプト・・・
引用:

《連続move作業》
パートの中の複数のそれぞれのオブジェクト(線形状・自由曲面・パートに入った複数のオブジェクト)の中心座標を中心にどうにかしたい場合
例)
1.パートを選んでいる状態で
2.ダイアログボックスが出て移動入力をする(この場合は数値移動ダイアログボックスが出る)
3.パートの中の上から順に
4.数値移動ツールでY軸を軸として1度回転
5.次のオブジェクトはY軸を軸として1+1=2度回転(+をxにすると等比になる)
6.次のオブジェクトはY軸を軸として2+1=3度回転(この場合は等差的に回転移動する)
7.パートの中のオブジェクトがなくなるまで続ける


ダイアログを開いて入力項目を受け取る部分を sub-routine 化しない場合は、つぎのようになります。

tell application "Shade 8 professional"
-- 入力ダイアログを開く
activate --Shade を前面にもってくる
begin dialog 200 -- ダイアログの開始(dialog ID = 200 この番号は script 毎にユニークな値を割り当てる)
append vec3 dialog item "移動量" --0
if ask dialog then -- 入力ダイアログを開き、ユーザーがキャンセルしなかった
set trans to (get vec3 property value 0) --座標の回答を変数 trans に格納
end dialog --ダイアログ終了
else
return -- ユーザーキャンセルされた
end if

-- 処理部分
inhibit update
if select child then
set theta to 10
move object translate trans
move object rotate {0, theta, 0}
repeat
if select brother then
set theta to (theta + 10)
move object translate trans
move object rotate {0, theta, 0}
else
exit repeat
end if
end repeat
select parent
end if
allow update
end tell
投稿数: 189
投稿日時: 2006-09-20 02:33
Re: Appleスクリプト・・・
追加説明

引用:

set object name to (n as string)



set object name to [ 文字列 ]  オブジェクト名称をセットする

set n to (n + 1) n の値を1増やす

n as string    整数である n を string( 文字列 )に変換します。


引用:

set object name to ((n as string) & " - " & (object name))


& は数値計算における + のような働きを文字列などに対して行います。

set t1 to "東京都"    t1 に "東京都" をセットする
set t2 to "中央区"    t2 に "中央区" をセットする
set t3 to t1 & t2     t1 と t2 を足したものを t3 にセットする
            t3 = "東京都中央区" となる

ですから
(n as string) & " - " & (object name)
では、整数 n を文字列に変換したものに " - " を加え、さらにオリジナルのオブジェクト名称を加える という意味になります。

& はリストにデータを加えるときにも使用します。
set L to {}          L を空リストとする
set L to L & "東京都"    リスト L に "東京都" という文字列を加える
set L to L & 3.14159    リスト L に 3.14159 という実数を加える
set L to L & true      リスト L に true(真偽値)を加える
結果 L の中身は {"東京都", 3.14159, true} となります。

リストの中の値を取り出すには item n of L を使います。
n は1から始まる整数です。

set t to (item 1 of L)   リスト L の第一項目を t にセットする
t = "東京都" となります
set pi to (item 2 of L)   リスト L の第二項目を pi にセットします
pi = 3.14159 となります
投稿数: 189
投稿日時: 2006-09-20 01:22
Re: Appleスクリプト・・・
連続move作業 - 4( 最後だよ )

もうチト凝ったことをしてみます。

入力では以下の項目を入力します。
・初期移動量
・移動量の変化を 等差, 等比 から選択
・移動量の変化量
・初期回転量
・回転量の変化を 等差, 等比から選択
・回転量の変化量
・移動と回転の順番を指定

ここでは 移動, 回転の処理部分も sub-routine 化して記述し、移動, 回転量の計算部分も sub-routine 化します。

sub-routine 化すると冗長な記述を圧縮できるので、全体の行数を減らすことができますし、プログラムの見通しもよくなりますから間違い探しも楽になります。


tell application "Shade 8 professional"
set input to my InputDialog()
if (length of input = 0) then -- ユーザーキャンセルの場合は input は空リスト
return
end if

inhibit update
if select child then
set trans to (item 1 of input)
set theta to (item 4 of input)
my action(trans, theta, (item 7 of input)) -- 移動回転処理
repeat
if select brother then
set trans to my SetValue(trans, (item 2 of input), (item 3 of input)) -- 移動回転量セット
set theta to my SetValue(theta, (item 5 of input), (item 6 of input)) -- 移動回転量セット
my action(trans, theta, (item 7 of input)) -- 移動回転処理
else
exit repeat
end if
end repeat
select parent
end if
allow update
end tell


on InputDialog() -- 入力ダイアログ
tell application "Shade 8 professional"
activate --Shade を前面にもってくる
begin dialog 200 -- ダイアログの開始(dialog ID = 200 この番号は script 毎にユニークな値を割り当てる)
append vec3 dialog item "初期移動量" --0
append selection dialog item "移動量の変化/等差/等比" --1
append vec3 dialog item "移動量の変化(等比の場合は等比係数)" --2
append vec3 dialog item "初期回転量" --3
append selection dialog item "回転量の変化/等差/等比" --4
append vec3 dialog item "回転量の変化(等比の場合は等比係数)" --5
append selection dialog item "移動回転の順序/移動→回転/回転→移動" --6

set input to {} --入力結果を格納する空リスト

if ask dialog then -- 入力ダイアログを開き、ユーザーがキャンセルしなかった
set input to input & {(get vec3 property value 0)}
set input to input & (get selection property value 1)
set input to input & {(get vec3 property value 2)}
set input to input & {(get vec3 property value 3)}
set input to input & (get selection property value 4)
set input to input & {(get vec3 property value 5)}
set input to input & (get selection property value 6)
end dialog --ダイアログ終了
end if
return input --ユーザーキャンセルの場合は空のリストが返される
end tell
end InputDialog


on SetValue(v, k, d) -- 移動回転量セット
if k = 0 then -- 等差
set vv to {(item 1 of v) + (item 1 of d), (item 2 of v) + (item 2 of d), (item 3 of v) + (item 3 of d)}
else -- 等比
set vv to {(item 1 of v) * (item 1 of d), (item 2 of v) * (item 2 of d), (item 3 of v) * (item 3 of d)}
end if
return vv
end SetValue


on action(trans, theta, k) -- 移動回転処理
tell application "Shade 8 professional"
if k = 0 then -- 移動→回転
move object translate trans
move object rotate theta
else -- 回転→移動
move object rotate theta
move object translate trans
end if
end tell
end action
投稿数: 189
投稿日時: 2006-09-20 00:12
Re: Appleスクリプト・・・
連続move作業 - 4( 最後から2番目 )

引用:

《連続move作業》
パートの中の複数のそれぞれのオブジェクト(線形状・自由曲面・パートに入った複数のオブジェクト)の中心座標を中心にどうにかしたい場合
例)
1.パートを選んでいる状態で
2.ダイアログボックスが出て移動入力をする(この場合は数値移動ダイアログボックスが出る)
3.パートの中の上から順に
4.数値移動ツールでY軸を軸として1度回転
5.次のオブジェクトはY軸を軸として1+1=2度回転(+をxにすると等比になる)
6.次のオブジェクトはY軸を軸として2+1=3度回転(この場合は等差的に回転移動する)
7.パートの中のオブジェクトがなくなるまで続ける


ということで、今まで長々と述べてきたことを応用すれば次のようになりますです。

入力ダイアログを開く部分は sub-routine にしていますが、オブジェクトの移動と回転部分は内容が簡単なので sub-routine にはしていません。

それと1度づつではなく、10度づつの等差にしています。


tell application "Shade 8 professional"
set input to my InputDialog()
if (length of input = 0) then -- ユーザーキャンセルの場合は input は空リスト
return
end if

inhibit update
if select child then
set theta to 10
move object translate (item 1 of input)
move object rotate {0, theta, 0}
repeat
if select brother then
set theta to (theta + 10)
move object translate (item 1 of input)
move object rotate {0, theta, 0}
else
exit repeat
end if
end repeat
select parent
end if
allow update
end tell


on InputDialog()
tell application "Shade 8 professional"
activate --Shade を前面にもってくる
begin dialog 200 -- ダイアログの開始(dialog ID = 200 この番号は script 毎にユニークな値を割り当てる)
append vec3 dialog item "移動量" --0

set input to {} --入力結果を格納する空リスト

if ask dialog then -- 入力ダイアログを開き、ユーザーがキャンセルしなかった
set input to input & {(get vec3 property value 0)} --座標の回答 ( リスト形式で返している )
end dialog --ダイアログ終了
end if
return input --ユーザーキャンセルの場合は空のリストが返される
end tell
end InputDialog

| 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | トップ

最近の投稿

フォーラム スレッド 返信 閲覧 最終投稿
Free Talk DNAの2重らせんの水素結合部位の作成 0 11867 2016-08-01 21:37 Benthos
Free Talk パート内の名前を一括返還 2 14388 2016-03-07 12:21 画像投稿機
Dev Forum イームズシェルチェアーの作成 2 14271 2015-11-25 14:44 CR7
Free Talk MOVファイルについて 17 35460 2014-12-29 17:14 momokuma
Dev Forum 2種類の液体アニメーションを作る方法 0 14354 2014-11-13 10:42 mejapan
Free Talk 面取りについて 0 13487 2014-11-08 15:18 MoonChild
Free Talk 丸太を結ぶ縄の作成について 1 19677 2014-09-18 22:33 kenslab
Free Talk パーティクルフィジックスのメタパーティクルについて 0 13939 2014-09-03 20:40 penta
Free Talk データの保存に関して 2 13817 2014-08-18 01:24 sierra
Free Talk Shade 3D ver14での、ポリゴンメッシュへの変換以上終了 1 14239 2014-04-23 12:04 MASA_