C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

ロフトフューチャーを編集する

こちらのトピにレスが付かなかったので挑戦してみました。
How to edit a loft by API - Autodesk Community


ロフトフューチャーを修正したいと言う内容です。多分。
既にあるデータを修正することは今までやったことが無かったので
色々と苦労しました。

あちらにも画像を載せましたが、こんなデータです。
f:id:kandennti:20200619190157p:plain
3個のスケッチに円を描き、一番下と一番上でロフトを作っています。
そこに中間のスケッチの円を入れる処理で考えました。
このロフトを修正する作業はGUIでも結構面倒ですよね?

ロフトが成立するプロファイルの順番だとか、成立するプロファイルとか
ロフトより前に作ってあるスケッチだとか、諸々の条件を出したら
キリが無いので、その辺はクリアしている事にしておいてください。

最初に戸惑ったのがタイムラインです。
f:id:kandennti:20200619190209p:plain
この位置(マーカーポジションと呼ぶようです)でロフトを修正したら
駄目なんですね。
f:id:kandennti:20200619190222p:plain
この位置なら良いみたいです。過去は変えちゃいけないみたいです。
未来はいくらでも変更出来る!
未来は俺が作る!!
俺の後ろに道が出来る!!!
って事なんですね。(スケッチは過去のものも変更出来ます・・・)


続いてるロフトのセクションの修正ですが、ここもつっかえました。
質問者さんも "deleteMe(削除)は出来る" って記載しています。
確かに出来るっぽいのですが、上記のサンプルでは出来ませんでした。
理由は簡単です。2個のセクションでロフトを作っているので、
1個削除するとロフトとして成立しない為、エラーとなってしまします。

最初は全てセクションをクリアし、望んでいるセクションの順番で
再度追加すれば良いかな? と思っていたのですが、作戦失敗です。


続いて、こちらのメソッドに気が付きました。
Fusion 360 Help
リオーダーでセクションの順番を変更できそうです。
とりあえず、中間にしたいセクションを追加(一番最後)して、
reorderメソッドで順番変えれば良さそうだな と。

ところが、中間にしたいセクションを追加した時点でエラー。
当然、順番的にNGな事はわかっていたのですが・・・。

CATIAのGSDの接合の場合は、HybridShapeFactoryのaddNew~で
2つのReferenceを引数にする必要があるのですが、その後1個削除しても
エラーにならないんですよね。最終的に2個以上あれば良いので
途中で条件を満たしていなくても大丈夫なんです。
Fusion360は即実行になってしまうのでかなり勝手が違います。

冷静に考えると、ロフトのセクションの順番変えて大丈夫な場面は
ほぼ無いと思うのですがどうでしょ?reorderメソッドは存在している
意味がほぼ無いような気がしています。


この時点でほぼ絶望的になり、あのトピは見なかったことにしようかな?
とすら思いましたよ。
ダミーのセクションを作成しエラーを回避しようとも考えましたが
・2個以上のセクションを維持する
・追加出来るのは最後のみ
をどうしてもクリアするダミーセクションを思い付きません。


ところがよく見ると、LoftSection.entityプロパティはread/writeプロパティ
じゃないですか!
Fusion 360 Help

セクションを足し引きするのではなく、セクションが持っているエンティティを
入れ替えるだけで済むじゃない!!


と言うわけであのコードとなりました。
CATIAとは勝手が違うんですね。