chura
Jr. メンバー  
オフライン
投稿: 25

I'm a llama!
|
 |
アニメーションを高速化する方法をご存知ありませんか?
« 投稿日: 2004/09/27 - 20:10:22 » |
|
はじめまして。churaといいます。
今年の9月に入ってからSolidworksデビューをしました。今後、このサイトにはお世話になっていくような気がします。どうかよろしくお願いします。ジャンルとしては、モデリングではなく、APIでアドインソフトをバリバリ作っていくことになると思います。
本題ですが、いくつかの軸を持つ機械をアセンブリ上でアニメーションさせたいのですが、Solidworksのアニメーション機能を使うのではなく、機械のシミュレータがありますのでここから各軸の角度や位置情報を取得して、アセンブリに反映することを検討しています。
具体的には機械の各関節は「合致」で接続し、シミュレータからの値によって合致情報(角度や距離)を変更してから再描画するという方法を検討しており、 現時点においてはとりあえず動いています。
しかし、再描画が遅くアニメーションというよりコマ送りといった感じなのです。しかも、再描画する時にはマウスカーソルが砂時計になりちらちらします :- 再描画にはupdateFeatureScope,EditRebuild3,GraphicsRedraw2,WindowRedrawなどいろいろ試してみましたがあまり変化ありません。根本的に異なる方法でも構いませんので、どなたかよい知恵をお持ちでしたらぜひともご教授願います。
#以前に一度RobotWorksのデモを見たことがあるのですができれば目指したいですね。
|
|
|
|
Makoron
カタマリの王様!?     
オフライン
投稿: 1277

SW2011SP5.0
|
 |
Re:アニメーションを高速化する方法をご存知ありませんか?
« 返信 #1 投稿日: 2004/09/28 - 08:28:57 » |
|
kuramituさん、はじめまして。
今回の件に関するAPIを詳しく見ていないので答えにはなっていないと思いますが、 私が、アセンブリ構成部品の色を変更するツールを作っていた際に感じたこと(再描画が遅い)と似ている内容なので書き込みしています。
アセンブリ構成部品の色を変更する際にわかったことがありますので Component2::SetMaterialPropertyValues2 を使って色変更を考えていましたが、このプロパティで行うと、まさにぱらぱら漫画状態でした。 これを改善するため、いろいろと探してみて Component2::MaterialPropertyValues が見つかりました。 前者の方は、コンフィギュレーションに対応しており、「これはいいぞ」と思い使っていたのですが 非常に処理が遅いと言うことがわかりました。 後者の方は、コンフィギュレーションには未対応ですが、非常に高速でいた。
たしか、Component2::SetMaterialPropertyValues2はComponent2::MaterialPropertyValues よりも後に作られたAPIなのですが、高機能のために処理速度が落ちているように感じました。
今回の件に適用するかわかりませんが、 新しいAPIより、古くても単純なAPIの方が処理速度は速いかも知れません。 ただし、同名のAPIの場合は、バージョンの兼ね合い等があるので新しい方を使ったほうが 良いと思います。
参考になるかわかりませんが、同じような経験がありましたので書かせていただきました。
|
|
|
|
chura
Jr. メンバー  
オフライン
投稿: 25

I'm a llama!
|
 |
サンプルを添付します
« 返信 #2 投稿日: 2004/09/28 - 13:09:58 » |
|
Makoron様
早速の回答ありがとうございます。Makoron様のお返事を読ませていただいたところ、メソッドには処理の速いもの遅いものがあり、その差はかなりありそうだということですね。調べてみます。
あまりきれいではありませんがサンプルを作成してみましたので興味のある方はご覧くださいませ(Solidworks2004、VB6SP5)。
作業の流れとしては次のような感じです。 (1)名前が”角度1”の角度合致フィーチャーを取得 (2)フィーチャーからMate2のインタフェースを取り出す (3)Mate2の内部データを書き換える (4)再描画
|
|
|
|
Makoron
カタマリの王様!?     
オフライン
投稿: 1277

SW2011SP5.0
|
 |
Re:アニメーションを高速化する方法をご存知ありませんか?
« 返信 #3 投稿日: 2004/09/28 - 15:12:22 » |
|
サンプル見てみました 
サンプルを見てみて思ったのですが、 合致を編集した後には再構築が必要みたいですね。 手作業で修正しても、再構築しないと再描画してくれませんでした。
こうなると、高速動作は難しいかもしれませんね。 Solidworksでの再構築は、構成部品が多ければそれだけ時間がかかってしまう処理 となので、この合致編集を利用しての高速な動作は不可能かもしれません。
もし出来るとしたら、 合致編集後に再構築ではなく、別の動作や手順で合致をアセンブリに反映する方法が 見つかれば可能かも知れません。 ただ、「アセンブリの再構築」=「合致条件の再計算」と言うような気がしますので、 合致を編集したら必ず再構築が必要になるような気がします。
出来るかわからないのですが、こんな方法はどうでしょう。 (1)「合致の情報」と「アセンブリの位置情報」を取得 (2)合致を抑制 (3)アセンブリの位置情報を変更(サンプルでいうなら回転) (4)合致の情報を、現在のアセンブリの位置に変更 (5)合致の抑制解除
もうひとつの案として、「レイアウトスケッチを使う方法」もありかも知れません。 ただし、レイアウトスケッチによるモデリングを行わないといけないので 既存のアセンブリは作り直しかもしれません。 方法はこんな感じではないかと思います。(レイアウトスケッチでアセンブリが作成済みの場合) (1)スケッチの編集に入る (2)スケッチの寸法を変更する(サンプルの場合角度寸法) (3)スケッチ編集を抜けます。 (4)角度範囲を指定しながら(1)〜(3)まで繰り返す レイアウトスケッチの場合は、スケッチ編集を抜けた時点でモデルの位置が変更されます。 モデル形状が変わらない場合は、即座に画面に反映されるはずなので、再構築を行うよりも早井と思います。
|
|
|
|
chura
Jr. メンバー  
オフライン
投稿: 25

I'm a llama!
|
 |
こんな方法も考えてみました
« 返信 #4 投稿日: 2004/09/29 - 00:40:53 » |
|
やはり難しそうですか・・・。
チュートリアルにあるようなアセンブリ(ハンドルをまわすやつ)は10点ぐらいの部品が合致されていてもマウスでぐりぐりするとかなり軽快に動きますよね。あれを見る限りでは合致の計算コストは意外と低いのではないかと思うのです。
あれを見ていてひとつ思いついた方法があるんです。とはいっても合致の計算コストが低いことが前提となっていますが、角度合致の条件を設定した後でDragOperatorを使用して一部の部品にアクセスします。これによって、すべてを再構築しなくても、一部の部品をマウスでぐりぐりしたと思いその部分だけ合致し直してくれるのではないかと。しかも高速で。
つまり、次のような手順です。 (1) 角度合致の条件を変更する (2) 角度合致で接続されているフィーチャーを取り出す (3) DragOperatorで移動したことにする
まだ試してはいませんが、(3)、もしくはこれ相当のことができるかどうかですね(^^; DragOperatorはあまり使ったことが無いので時間を見つけて試してみます。
|
|
|
|
hisa
カタマリの王様!?     
オフライン
投稿: 507

PANDA-Z!!
|
 |
Re:アニメーションを高速化する方法をご存知ありませんか?
« 返信 #5 投稿日: 2004/09/29 - 10:12:56 » |
|
kuramituさん、はじめまして。
Makoronさんが提案した、
>出来るかわからないのですが、こんな方法はどうでしょう。 > (1)「合致の情報」と「アセンブリの位置情報」を取得 > (2)合致を抑制 > (3)アセンブリの位置情報を変更(サンプルでいうなら回転) > (4)合致の情報を、現在のアセンブリの位置に変更 > (5)合致の抑制解除
の内、(3)に関してサンプルマクロを作ってみました。 マクロ実行後、フィーチャーマネージャー上で構成部品を選択して"Rotate"ボタンをクリックしてください。
構成部品移動の手法としては、 (1)選択した構成部品のトランスフォームを取得 (2)回転位置と角度から回転トランスフォームを作成 (3)上記2つのトランスフォームを掛け合わせる (4)掛け合わせたトランスフォームを構成部品に反映 です。
この方法で、気を付けなければならないのは ・合致を無視して構成部品の位置編集をするので最終的にはModelDoc2.Rebuildの引数swUpdateMates合致を再構築する必要がある。 ・構成部品がモデルビュー領域外に移動すると表示が欠ける。(このサンプルではアセンブリの基準平面を大きくして、故意にモデルビュー領域を大きくしてます)
参考になるか分かりませんが、とりあえずこんなところで
|
|
|
|
chura
Jr. メンバー  
オフライン
投稿: 25

I'm a llama!
|
 |
Re:アニメーションを高速化する方法をご存知ありませんか?
« 返信 #6 投稿日: 2004/09/29 - 14:19:21 » |
|
Makoronさん、hisaさんいろいろな情報どうもありがとうございます。
当初、アセンブリの位置情報を変更する方法も検討していたのですが、 ・実装が簡単 ・前部品の原点からの絶対位置/角度で指示ができる という理由から合致による実現方法を模索していました。これはシミュレータからの出力が前部品の原点からの絶対姿勢であるためです。
しかしながらあまり現実的ではないことも分かってきましたので、アセンブリの位置情報を変更する方向で再度検討してみます。とはいっても深く理解しているわけではありませんので、皆さんのお知恵を元に勉強していきたいと思いますので今後ともよろしくお願いいたします。
#私の知る限りSolidworksのフォーラムはほとんど無いのでこのサイトはとても貴重です。活性化するためにもいろいろなサンプルができたらこのサイトにアップしていきますね。
|
|
|
|