C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)※記載されている内容は個人の意見であり、所属する団体等を代表する意見では御座いません・・・・よ!

.vsixファイル

.vsixファイルはVisual Studio Code 用の拡張機能パッケージなんですけど、僕も一度作ったことあります。
GitHub - kantoku-code/PowerMill-Macro-Syntax-Highlight-for-VSCode: PowerMill Macro Syntax Highlight · GitHub
個人的にはgithubの初リポジトリなのですが、単にシンタックスハイライトさせているだけなんですけどね。
もうPowerMillを使う事は無いと思うと残念ですが、PowerMillは最高のCAMソフトです。(個人差はあります)

この.vsixファイルを作るのに、いろいろと調べ何か登録したり色々とインストールしたりと苦労した事だけは
覚えています。


昨日ちょっとした思い付きでCATIA用のVSCode拡張作れるのかな?と思いClaudeCodeでチョコチョコっと
やってみたのですが何度かやっても上手く行かず、最終的にClaudeが出した答えが ".vsixファイルを作る"
でした。で、アッサリと作ってくれました。

あの時、あれだけ苦労して作ったのに・・・アッサリと。やるだろう、出来るだろうとは知っていましたが
目の前でやられると、一度は失敗するとか忖度するとか気を利かせて欲しい・・・。

一応お伝えしておくと、中身的には失敗していて全く役立たなかったです。

課金

ついに開幕しましたね。え?F1ですよ。

前からそうなのですが、業務が忙しい時に限ってあれも作ろう、これも作ろう
って思うのに、暇になると全部忘れる現象は何か呼び名があるんでしょうか?

忙しいなりに週末は何とか何か作ろう(抽象的過ぎ)と思い進めていたものが
やっと完成しました。いや、改善すべき部分は有るだろうけど、自身で使う分には
完成しました。

ちょっと前なのですが、Antigravity 方面へ契約したのですが、あまり馴染めず
結局、今週ついにClaudeに契約しました。やっぱり質が・・・

もうちょっと時間欲しいな。色々思い付いているのに。(暇になったら忘れている)

BLACKSMITH更新

こちらの続きです
BLACKSMITH - C#ATIA

気が付かなかったのですが、今月のFusionのUpdateで表題のアドインが機能しなくなったようです。
と、フォーラムに書かれていました。
https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/batch-export-dxf/m-p/14041795/highlight/true#M22634

少なくても3名の方からの報告で、お一方はgithubのissuesに差し替え用のファイルまで添付してくれていました。
動作の問題が無かったためそのまま差し替えましたので、丸ごと再ダウンロードで利用可能な状態です。

GitHub - kantoku-code/Fusion360_BLACKSMITH: A little help with sheet metal. · GitHub

本当に自分作ったものの中で一番人気です。(海外で)

VBA用 JSON パーサークラス

前から欲しかったVBA用 JSON パーサークラスをGithubで公開しました。
GitHub - kantoku-code/clsJsonParser: VBA JSON Parser Class

え~正直に言うと作ってないです。作ったのはClaudeやChatGPTやCopilot達です。
僕は作らせただけです。(コードはほぼ見ていません・・・)

前々から欲しくて、昨年のGW中に2日ぐらいやったのですがイマイチな出来で断念していました。
時間と共にAIが進化してくれて、僕も少しコツを掴んできたので3時間弱ぐらいで
公開までたどり着けました。すごい時代ですね・・・。


"VBA用のJSONパーサーはGithubに既にあるじゃん" と思った方、正しいです。
気が付いている限り、2個はあります。
でも
・ライセンス的にちょっと・・・(MITのも有るけど僕のもMIT)
・ディクショナリの参照設定がちょっと・・・(僕のは遅延バインディング)
・エンコード的にちょっと・・・(僕のはShift-JISもOK)
・標準モジュールはちょっと・・・(僕のはクラスモジュール)
・スピード的にちょっと・・・(僕のは正規表記で)
と完全に個人的な好みを入れ込んでます。

Json<->辞書を行うだけ為、pythonライクにLoadsとDumpsだけにしております。

テスト不足なのでバグがあるかもしれませんが、その際は
子猫をあやす様に
issueしておいてください。ガラスのハートなので。

MENSEKI

某3DCAD試験向けに開発したタイトルのアドインですが、
英語サイトで紹介した所、他の方が英語版として再Upしてくれました。

Fusion-Gadgets/MENSEKI at main · ergilion-tech/Fusion-Gadgets · GitHub

最近、時間無いな・・・


ん、ちょっと待って。良く見ると.cmdと.ps1の組み合わせでインストーラを実現しているようです。
これは学ぶ価値ありかも。

派生を挿入

2026年1月のUpdateでAPIに追加された "派生を挿入" ですが、そもそもあまり使われていない
機能の様な気もしています。

念のためですが、こちらです。

CATIA V5で例えれば、"リンクの結果として" のコピペです。

APIで追加されたものの、Helpを見てもサンプルコードが無いため、ちょっと試してみました。


名前がいい加減で申し訳ないのですが、事前にhogeとtestを作成しておき、testをアクティブな
状態としておきます。
この状態でhogeのボディを派生としてtestに挿入するサンプルがこちらです。

# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion

def run(context):
    ui: core.UserInterface = None
    try:
        app: core.Application = core.Application.get()
        ui = app.userInterface
        stateDoc: fusion.FusionDocument = app.activeDocument
        stateDesign: fusion.Design = app.activeProduct
        stateRoot: fusion.Component = stateDesign.rootComponent

        # 派生元のDatafile
        activeFolder: core.DataFolder = app.data.activeFolder
        datafile: core.DataFile = activeFolder.dataFiles[0]

        # 派生元をオープン
        deriveDoc: fusion.FusionDocument = app.documents.open(datafile, True)
        deriveDesign: fusion.Design = deriveDoc.design

        # 派生元の最初のボディ
        deriveBody: fusion.BRepBody = deriveDesign.rootComponent.bRepBodies[0]

        # 派生を挿入
        deriveFeats: fusion.DeriveFeatures = stateRoot.features.deriveFeatures
        deriveIpts: fusion.DeriveFeatureInput = deriveFeats.createInput(deriveDesign)
        deriveIpts.sourceEntities = [deriveBody]
        deriveFeats.add(deriveIpts)

        # 派生元を閉じる
        deriveDoc.close(False)

        # 念のためアクティブ
        stateDoc.activate()

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

実行結果はこちらです。

形状的に意味があるものではないです・・・。

コードにしてしまうと大したことは無いのですが、全くサンプルが無いので少し悩みました。

DeriveFeaturesがFeaturesの派生クラスだとわかったので、他のFeatureを作成する手順同様
・createInput
・add
の手順だろう、とは直ぐに想像出来ました。

困ったのはcreateInputの引数がDesignだった事でした。
Designは恐らくファイルを開かないと取得出来ないのですが、勝手にファイルを開かなくても
"派生の挿入" は利用出来ると思い込んでいたためです。
実際に手動で "派生の挿入" を行うとファイルを選択し、派生させる要素を指定する必要がある為
APIでも派生元のファイルを開く必要がある事に納得しました。

と、ここまではAPI的なお話です。


この "派生を挿入" はCATIA V5の "リンクの結果として" と最初に記載しました。
つまり派生元を変更すると、派生先も変更されます。

試しに派生元の形状をわかりやすいぐらいに変更してみます。
(画像小っちゃくてごめんね)

変更後派生先のファイルを確認すると・・・

変更されていないです。他のファイルを外部コンポーネントして挿入した場合は、形状の反映は
されないものの、ファイルが変更されている事を示す警告は表示してくれます。

結果的に派生先に変更を反映させるためには、ユーティリティにある "すべて計算" を行うしか
方法を見つける事が出来ませんでした。

ちょっと危険ですね。チームで設計を行っていると他の人が変更したことが気が付かないですよ。

追記**

派生先のファイルを一度閉じて、再度開くと警告が出ました。

それでも、ちょっと危険な気がしますね。

デザインタイプ(と呼ぶみたい)

2026年の1月のUpdateで、Fusionのモデリングはパーツとアセンブリとの区別があまりなされて
いなかったのですが、パーツとアセンブリを明確に区別するモード?も追加となりました。

起動した際にこちらが表示されますね。

邪魔と言えば邪魔です・・・現状は表示させない方法が無さそうです。

この区別させるモード自体も、Fusionで初めて3DCADを使うようになった方々にも混乱を
与えているような気もしてますが、”やっぱり止めて元に戻します”と言う路線は、今までの
経緯を考えても無さそうです。
(その為にインサイダーを用意してテストし、意見を求めているからでしょう)


まぁ受け入れるしかないので、新規のドキュメントを作成しこの部分を切り替える
テストを行いました。

# Fusion360API Python script

import traceback
import adsk
import adsk.core as core
import adsk.fusion as fusion

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

        # New Document
        app.documents.add(core.DocumentTypes.FusionDesignDocumentType)
        des: fusion.Design = app.activeProduct

        # 
        des.designIntent = fusion.DesignIntentTypes.HybridDesignIntentType
        app.activeViewport.refresh()
        show_msg("ハイブリッド")

        des.designIntent = fusion.DesignIntentTypes.AssemblyDesignIntentType
        adsk.doEvents()
        app.activeViewport.refresh()
        show_msg("アセンブリ")

        des.designIntent = fusion.DesignIntentTypes.PartDesignIntentType
        show_msg("パート")

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


def show_msg(
    msg: str,
):
    
    ui: core.UserInterface = core.Application.get().userInterface
    ui.messageBox(msg, "DesignIntent Test")

これで3種類切り替える事は出来るのですが、気になる部分がありました。
※基本設定で何を設定している状態か? で変わるかもしれませんが自分は "パーツ" です

最初の"ハイブリッド" -> "アセンブリ" でメッセージを表示させた際、表示が切り替わってないです。

自分なりに頑張ったのですがダメでした。

その後の"アセンブリ" -> "パーツ" は表示は切り替わってくれます。

バグじゃないかな?