Shade3D 公式

カムのアニメーションに関すること


#1

ぐるぐる回転する緑色のカムの動きにあわせて赤い針がどのように動くかをアニメーションしたいのですが手詰まり状態になりました。
どのような解決方法があるかアドバイスをお願いします。


#2

スクリプトで、アニメーションを書けれたらと思っているのですが、手詰まり状態です。
メッセージボックスを表示させ、任意に選択するところが、うまく書けません。
アドバイスお願いいたします。

流れ的には、

  1. 回転にカムを作成します。
  2. 回転の動きを設定しておきます。
  3. 直線移動に図形を作ります。
  4. スクリプトを実行します。
  5. メッセージボックスがでてきます。
  6. 回転のパートを選択します。
  7. メッセージボックスがでてきます。
  8. 直線のパートを選択します。
  9. 直線にアニメーションを設定します。

とりあえず手作業でアニメーションを設定したのが
カム.shd (514.3 KB)
のファイルです。動きもギコチないです。また、カムもカクカクしていて今一つです。

スクリプトは以下のような感じです。

> import cmath
> import math

> #xshade.show_message_box('回転とカムを選択して下さい?',True)
> #ブラウザを選択できるようにするには。

> #曲線で描かれたカムのコントロールポイントの数を調べる。
> c_points=xshade.scene().active_shape().total_number_of_control_points-1

> #曲線で描かれたカムのコントロールポイントの座標を調べて配列に代入する。
> i=0
> while(c_points>i):
>  zahyo=xshade.scene().active_shape().control_point(i).position
>  #print zahyo
>  #大きさ、角度
>  hukuso=cmath.polar(complex(zahyo[0],zahyo[1]))
>  if hukuso[1]>=math.pi:
>   print (90.0+hukuso[1]*360.0/2.0/math.pi)/3.0,hukuso[0]
>  else:
>   print (90.0-hukuso[1]*360.0/2.0/math.pi)/3.0,hukuso[0]  
>  i=i+1

> #xshade.show_message_box('動作と図形を選択して下さい?',True)
> #xshade.scene().active_shape().motion.create_motion_point(90)
> #xshade.scene().active_shape().motion.get_motion_point(0).set_scalar(0, 0.5)

#3

動きがかくかくしているのは、スクリプトの計算に問題があるか、手作業時のミスのような気がします。
形状を取得するのに、active_shape()を使われてますが、
get_shape_by_name()でカムの線形状と、移動ジョイントをそれぞれ取得して、
スクリプトの最後の2行の形状は、移動ジョイントのshapeのmotionにすれば、
手作業なしで自動で設定出来ると思います。
見る限りでは、hukuso[0]は、移動量(ジョイントの移動量換算する必要あり)
hukuso[1]でシーケンスポイントの値(回転時間を考慮して換算する)
を設定すれば、良さそうですが。
あとは、スクリプトを何度も実行してバグとりすれば、たぶんちゃんと設定出来ると思います。
ただ、現状では、カムは、線形上でハンドル無しなので、各頂点が、真上になる、時だけ
モーションポイントを付加すればいいですが、もし線形状にハンドルを付けて丸めると、
モーションのスローアウトと、スローインの調整だけでスムーズになるかはわかりません。


#4

ご回答ありがとうございます。
情報をもとにして挑戦してみます


#5

基本的には、このやり方でいいようです。
ただ、このカムは、最初のポイントが起点になってないので、一回りした最後の締めのモーションポイントの追加が
面倒になりますね。後、スカラーの値は、(hukuso[0]-600)/400 でいいみたいです。