C#ATIA

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

結合問題

こちらを取り組みました。
CombineFeature Error while joining multiple bReps - Autodesk Community


APIで結合処理をした際にエラーになると言うものです。
最初の画像を見る限り、かなり過剰な結合しているのを感じます。

GUI(手動)で結合してもエラーになるか尋ねた所、同じエラーになると・・・。
それはAPIでやってもエラーになりますよ。
質問者さんもカスカスの結合じゃなくて、しっかりオーバーラップしていると
訴えていますが、全ての面のカスカス度を目視でチェックするのは現実的
じゃないと思うんですが。
(カスカス=一見、面が一致しているようで、内部的な数値でちょっとだけ
 オーバーラップしてたりしていなかったしている状態を、僕なりに表現)

それを英語(100%Google翻訳)で伝える自信も無く、結局あれを作りました。
正直な所コードを作るより、都合よくエラーになるCADデータを作る方が
手間がかかっていたり・・・。

2020.10以降のFusion360 早送り速度対策を考える2

こちらの続きです。
2020.10以降のFusion360 早送り速度対策を考える - C#ATIA

コメント欄に記載しましたが、あそこに記載した方法ではNGです。
内部的に回避部分の呼び出しを制限しているようで、ポストでの対応も
無理っぽいと判断しました。
(個人的にFusion360のCAMを使用する事は無さそうなので、構いませんが・・)

早速、思いつく人は思い付くようで感心します。
GitHub - VinFaz/RapidFeedPlus: Add G0 operations back into Gcode produced by Fusion360's CAM feature with a free license, since it was artificially removed to slow machining times. Export as GRBL!
ポストコンフィグ "GRBL" 用の様ですが、ポスト処理後のNCプログラム自体を
書き換えてしまうものの様です。
使い方が良くわからないのですが、恐らく素のPython用の様です。

中身を見ると・・・恐らくZが回避高さとなった際、前後にG00とG01を
書き加えている感じがします。なるほど。

機械が突っ込みそうで、恐ろしい。


追記です。
こちらも発見しました。
GitHub - TimPaterson/Fusion360-Batch-Post: Fusion 360 add-in to post all CAM setups at once, optionally dividing them into folders.
説明書きをチラ見しただけですが、こちらはツールチェンジと早送り両方を
こなしているようです。

皆すごいな。

リンク付きf3dファイルを読み込みたい1

リンク付きのコンポーネントのファイルをネイティブデータとして
エクスポートすると、Fusion360の場合は "f3z" の拡張子となります。
こちらも実質zipファイルです。

f:id:kandennti:20201014135601p:plain
"assy" 内に "hoge" "huga" "piyo" のコンポーネントがリンク付きで
存在している状態なので、各コンポーネント内にはリンク付きの
コンポーネントは有りません。
この状態でキャッシュフォルダを見ると、このようになっています。
f:id:kandennti:20201014135611p:plain
コンポーネントを持っていない "hoge" "huga" "piyo" は単体の
ファイルとして開く事が可能なのですが、リンク付きのコンポーネント
持っている "assy" だけは開く事が出来ません。

原因は明らかでリンク付きでコンポーネントの存在です。
リンクを切るなり、コンポーネント自体を削除して、この "assy" を
単体のドキュメントとして "何とか開きたい!!!" と言うのが今回の
テーマです。・・・結論を書くと、ゴールに辿り着いていません。



ハードルの高い一番の理由は、GUIAPI・テキストコマンドは
殆どの操作が、アクティブなドキュメントに対しての操作となります。
つまり、今回のように
開くとこの出来ないドキュメントに対しては、戦えない!!
と言う事です。困りました。



テキストコマンドの中には "Asset" と呼ばれるものが存在しています。
Fusion360_Small_Tools_for_Developers/TextCommands_txt_Ver2_0_8176.txt at master · kantoku-code/Fusion360_Small_Tools_for_Developers · GitHub
"何を突然?" と思われると思いますが、これを説明しないと
先に進まないんです。AssetはGUIAPIには恐らく出てきません。

Fusion360の場合、ドキュメントを1つも開いていない状態が作れない為、
起動直後の状態でテキストコマンドの

Asset.List

を実行してみます。
f:id:kandennti:20201014135644p:plain
表示の都合上改行された状態ですが "Asset name:" から "[Visible]" までが1行です。
AssetはFusion360が読み込んでいるデータを示しているようです。
Fusion(融合)の名の通り、多彩な機能が融合し、それぞれの機能のデータが1つの
ドキュメントとして扱われていますが、Assetはそれぞれの機能となるようです。

試しに、製造でセットアップだけを作りAsset.Listを実行すると
f:id:kandennti:20201014135654p:plain
ドキュメント(タブの数)は1個に対してAssetは3個に増えます。

Asset(資産)はFusion360で開いている機能のデータ数と言えるのだろうと思われます。
これはシミュレーション(個人ライセンスでは利用出来ませんが)のケース数毎に
作成されていましたし、リンク付きコンポーネントによっても
数が増えます。
つまり、Fusion360で(仮に画面上に表示されていなくても)開いているデータを
確認する為の手がかりとなりそうです。


もう少し先までやっているものの、続きを書けるほどの内容になるのかも微妙。

executeTextCommandの言語依存

今まで気になっていたのですが、確認しました。
GUIのテキストコマンドは3種類あります。
f:id:kandennti:20201013181931p:plain

あまり意味はないのですが、次のコマンドを "Txt" 実行すると
Fusion360のバージョン情報を表示します。

Application.SoftwareVersion

f:id:kandennti:20201013181946p:plain

しかし、 "Py" "Js" で実行するとエラーになります。
f:id:kandennti:20201013181954p:plain

以前からこれは知っていました。
("Js" は、2020/12/7辺りで表示されなくなるか、機能しなくなるはず)


ずっと気になっていたのですが、API

app.executeTextCommand

で、テキストコマンドを呼び出す際、"Txt" になっている保証が無いまま
しらばっくれて使ってました。ごめんなさい。

と言う事で、それを確認しました。
こんな感じのコードです。

#Fusion360API Python script
import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui = app.userInterface

        msg = app.executeTextCommand(u'Application.SoftwareVersion')
        dumpMsg(msg)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def dumpMsg(msg :str):
    app = adsk.core.Application.get()
    ui = app.userInterface
    ui.palettes.itemById('TextCommands').writeText(str(msg))

念のためですが、日本語環境の場合はexecuteTextCommandの引数は
Unicode文字列で渡した方が良いです。
一番最初に試した際、Unicodeではない場合に機能しなかった経験が
有ります。(最初に遭遇したので逆に助かりました)


"Txt" "Py" "Js" の何れも正しい結果を表示します。
f:id:kandennti:20201013182028p:plain
あの部分には依存しないとわかりました。今さら・・・。


dumpMsg関数は、テキストコマンドパレット(と、呼ぶようです)に
文字を垂れ流す為の関数なのですが、ここを表示/非表示(赤印)させる
方法はわかるのですが、パレットを拡大/縮小させる+-(緑印)を
切り替える方法が見つからないんです・・・。
f:id:kandennti:20201013182045p:plain
強制的に表示を見せたい時があるのですがねぇ。

f3dファイルから形状データのみをインポートする1

こちらにUpしたスクリプトですが、手動でも出来ます。面倒ですが。
Re: アップロードに失敗しました 〜「アップロードを保留中」から進まずアプリを終了できない〜 - Autodesk Community
あちらのスクリプトは以下の処理を行ってます。


1)任意のf3dファイルをコピーし、拡張子を ".zip" に変更する。
スクリプトでもこの処理していますが、やらなくても良いことが分かりました。


2)zipファイルとして展開する。
データ次第ですが、スケッチ書いて押し出した程度のデータの場合、
こんな感じです。
f:id:kandennti:20201012101533p:plain


3)smb/smbhファイルを探す
展開後のファイルを探すと "xxx.smb" "xxx.smbh" のファイルが見つかる
ハズです。恐らくこれはコンポーネント分のファイルが有るはずです。

これらのファイルは "Shape Manager" の中間ファイルと思われます。
Re: エクスポートするファイルの単位系について - Autodesk Community

色々と試したところ、
xxx.smb - 履歴的に必要となるデータ(押し出し・回転等のデータの様です)
xxx.smbh - 最終形状のデータ
の様で、".smbh" が必要となるデータと解釈しました。


4)smbhファイルをsatに変換
smbhファイル直接Fusion360ではインポート出来ないと思われます。
テキストコマンドを探すとsab/smb/sbmhをsatに変換するコマンドが有りました。
(sabはsatのバイナリファイル)

ASMInterface.convertSabToSat <sbmhファイルパス>

変換後のsatファイルは、同一フォルダ内に同一ファイル名で出来上がります。

f:id:kandennti:20201012101636p:plain

知っている範囲でFusion360で開いていないドキュメントに対して使える
唯一のコマンドです。珍しい。


5)satファイルをインポートする
こちらで散々試しましたが、こちらが安定していました。
https://kantoku.hatenablog.com/entry/2020/09/25/191303

NaFusionUI.ImportCmd <satファイルパス>

f:id:kandennti:20201012101656p:plain




純粋に形状だけの為、色々と不足していますが "どうしても諦めきれない!!!"
と言う時には利用価値があると思います。
ちょっと無駄なコードが有ったり、不要な処理が有ったりした為、
もう少し直してgithubにupしておきます。

作成したジョイント原点を非表示にする

Fusion360にはAssyする為の原点を任意に作成する事が出来ます。
これはAPIでも作成・修正可能なのですが、表示/非表示させることが
出来ません。(何故・・・)

APIで提供されていない場合、可能性があるのはテキストコマンドです。
が、探したところ見つかりませんでした。(そもそもプロパティが無さそう)
そこで思い付いたのが、CommandDefinitionsでのコマンドの呼び出しです。
こちらを利用し、目ぼしいものをテキストコマンドで大量に試しました。
CommandDefinitionsオブジェクト1 - C#ATIA

3つ程、表示/非表示を切り替えてくれるコマンドが見つかったのですが、
現状が表示されているのか?非表示なのか?を判断する方法が未だに見つかりません。
(何かアクションを起こすと必ず表示される とかあれば良いのですが、
それも見つかりません)

それでも質問者さんが "新作したものは必ず表示されているので、何とかしたい" との事。
問題は、オカレンス(画面上はコンポーネント)内にあるジョイントの原点を選択状態に
出来ないという事です。・・・確かに出来ません。

調べたところ、プロキシなる観念があったようです。正直知りませんでした。
で、完成したのがこちら
Solved: Re: Show/Hide JointOrigin - Autodesk Community

ボックスを2つ作り全ての頂点にジョイントの原点を作成。
それを全て非表示にしています。
f:id:kandennti:20201009184851p:plain

このジョイントの原点のアイコンなんですが、ずーーーっと取り組んでいたせいで
ニコちゃんマーク(スマイリーフェイス)に見えていました。
ナカナカ上手く行かなかったので、あざ笑われている感じがしてムカついてましたよ。

CGM

CATIAのモデリングカーネルは、何時からか知りませんが "CGM" と言う
名称が付いていたのですが、何の略称なのか知りませんでした。
"Convergence Geometric Modeler" の様です。
Geometric modeling kernel - Wikipedia
今、知りました。

・・・RDFってブルガリアなんだ。珍しいなぁ。