Fusion360 コンポーネント移動で取り残される部分があるのは何故?

fusion360におけるコンポーネントの役割

fusion360は便利でよく利用させてもらっていますが
コンポーネントを使い始めて陥ったことが
最近やっと理解できたので書きました。
(私の解釈なので厳密には違うのかもしれません。)

インポート先でコンポーネントの一部が変な所に取り残された

別ファイルをインポートすることで作成されたコンポーネントを移動したときにその一部が取り残される。(移動されずに置いてきぼり)
あるいは、コンポーネントが入れ子になっている親側を移動した際に移動してこない部分がある。
(特にコンストラクション平面が取り残されがちです。)
という現象です。

最初はバグかと思いましたが、以下のような仕様のようです。

別ファイルにあるコンポーネントは
インポートするとコンポーネント内のコンポーネントとなります。
つまり子コンポーネントとなります。(うんうん)
そして、親コンポーネントを移動させても、子のコンポーネントは移動されません。(えっ?)
子として含むコンポーネントであっても移動されないのです。
もちろんですが、逆に子コンポーネントの方を移動させても親コンポーネントは移動されません。

そして理解しました。
コンポーネントが他のコンポーネントを一緒に移動できるのは
コンポーネント間がジョイントで結ばれている場合だけなのです!

つまり、コンポーネントの親子関係はブラウザの階層構造上存在するだけで
コンポーネントの位置は親子関係に依らず、挿入先デザイン内で独立しています。
(各コンポーネントの位置はインポート先デザインルートの座標系における絶対位置として存在している)

直感的には子コンポーネントは親コンポーネントの相対座標での位置が保存されると考えるのが普通でしょう。
しかし、コンポーネントは使い回しされることから考えればfusion360のコンポーネントの振る舞いの方が妥当なのかもしれません。
コンポーネントを自動車部品などの購入単位のアッシー(部品セット)として考えるとわかりやすいかもしれません。
中の部品(コンポーネント)がジョイントで組み付けられていない限りは袋の中でバラバラに動ける。という感じ?

ジョイントはコンポーネント同士(親コンポーネント含む)の位置関係を制限するものです。

特に親コンポーネントとの位置関係を依存させたい場合は親と子をジョイントしておく必要があります。
(その際に子コンポーネントを含めるチェックは外さないと全体が重複してジョイントされてわかり難い結果になることがあります。)

でも、ジョイントを使ってないのに一緒に移動したことがあった気が…。
それは移動対象の選択範囲によるものです。
ブラウザで親コンポーネントを選択すると、その下階層に属する全てが選択された状態となります。
その状態のままドラッグすれば、それらは位置関係を保ったまま、すべてが移動されます。
(ただし、一つでも選択外のコンポーネントとのジョイントによる制約を受けているものがないこと)
そして選択の対象範囲をうっかりすると置いてきぼりが起こります。

 

あと、コンストラクションがよく取り残されます。
コンストラクションもコンポーネントと似た振る舞いを持っており、ジョイントしておかないと置いていかれます。
ただ、コンストラクションを含めることができるジョイントの種類はRigidGroupのみで、通常のジョイントでは選択できません。
(ついでに書くと、外部コンポーネントから参照したいコンストラクションの位置にJointOriginを作成しておいた方が使いやすかったりします。)

↑勘違いでした。
RigidGroup(剛性グループ)でコンストラクションを選択するとそれが属するコンポーネントが選択されていました。
なので、コンストラクションが属するコンポーネントとのジョイントとなっていました。
ちなみに、RigidGroup(剛性グループ)はコンポーネント間の現在の相対位置をキープするJointです。
コンストラクションはそれが属するコンポーネントの座標系に存在します(あくまでもコンポーネントの一部です)。
そして、デザインルート(ブラウザの一番上)も実際はコンポーネントです。(全ての親となるコンポーネント)
コンストラクションを取り残してきたと思ったのが間違いで、
正しくはコンストラクションが属するコンポーネントを取り残していたのです。(特によくあるのが親コンポーネント)
コンストラクションも適切なコンポーネントの中に作成することが重要です。

 

まとめ

コンポーネントについての私の理解を列挙します。

  • スケッチ、ボディー、コンストラクション、それらのための座標系、子コンポーネントを持てる。
  • ジョイントの対象になれる。(ボディーは✖)
  • デザイン履歴への表示を選択されたコンポーネントに関するもののみに限定できる。※1
  • 「図面を作成」の対象。(ボディーは✖)
  • デザインのルートも実はコンポーネント※2
  • 別ファイルをインポートしたものはコンポーネントとして扱われる。(デザインのルートがコンポーネントなので)
  • コンポーネントは座標系を持つが、コンポーネントの位置座標は親子関係に関係なくデザインルートの座標系の位置座標である。
  • スケッチ、ボディー、コンストラクションは子コンポーネントではない。(むしろ、それらが属しているコンポーネントそのものである。)

※1
画面右下にある設定内で
「非アクティブなフィーチャーを全て非表示」をチェックしておく必要あり。

※2
インポートしたコンポーネントのアイコンと同じアイコンがルート要素にも表示されている。

なお、fusion360は頻繁にアップデートされているので
記事の内容がそぐわないくなっているかもしれない点にご留意ください。(機能の呼称が変わることも)

 

関連のあるある

コンポーネントあるある
別ファイルをインポートしたことによるコンポーネントの場合
オリジナルファイルの方でデザイン履歴をロールして保存すると、インポート側へもそれが反映されます。(自動ではありませんが)
オリジナルファイルの方でうっかりジョイントグループより前にロールして保存すると、インポート側で あれ?ということになります。

ジョイントあるある
あれ?せっかくジョイントでコンポーネントを繋いだのに
どのコンポーネントも動かせないぞ?
関連する子コンポーネントの最低一つを固定(ground)しておく必要があります。(デザインヒストリーには赤ピンで表示されます。)
他の方法として、子コンポーネントの最低一つをRigid jointでルートデザインとジョイントしておくという手もあります。
(その場合、循環してしまうので子コンポーネントを含めるチェックを外しておくのを忘れずに)

 

広告

広告