C#ATIA

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

AutoRemesher

一時期は頻繁に模索していたのですが、結局Fusionの人力による方法でした。

ほぼプルリバースエンジニアリング の検索結果 - C#ATIA

その際に見つけた自動的?半自動的?に変換する方法の一つはInstant Meshesでした。
この時にAutoRemesherも見つけていたのですが、ブログのネタにはしていませんでしたね・・・。

そのAutoRemesherがver1.0.0となったようです。
GitHub - huxingyi/autoremesher: Automatic quad remeshing tool · GitHub

Releasesからダウンロードして展開で終了。インストーラー無しなのが手軽すぎです。
さっそく試してみました。

まず、どのご家庭にもある3Dスキャンデータを用意します。もしない場合は
Web上にあるSTLでも探してください。
AutoRemesherはOBJフォーマットしか対応していない為、FusionでOBJでエクスポートです。

続いてAutoRemesherを起動し、Openから先程のOBJファイルを開きます。
時は金なり。読み直後から変換開始します。(心の準備が間に合わん)

トイレに行く暇も与えないぐらいの時間で、クワッドメッシュ(四角形メッシュ)化
が終了しています。

・・・パラメータを調整出来るのですが、意味が良く分からないので割愛。
(どれぐらい荒くする、細かくするとかだと思います)
変換後はクワッドメッシュをOBJとして保存。

再度FusionでOBJをインポート。

トライアングルメッシュ(三角形のメッシュ)としてインポートされる場合は
基本設定のチェックを外しておいてね。(先に書くべき)

フォームワークスペースに入り変換コマンド

"クワッドメッシュからTスプライン"に切り替えて、メッシュボディ(クワッドメッシュ)を選択

Tスプライン化に成功です。アプリによってはトライアングルメッシュが混在しているデータを
作るものもあるようですが、AutoRemesherは混在しないように変換するようです。えらい!

後はフォームワークスペースから抜け出せば終了です。

素晴らしいです。

GPT-5.6を試してみた

Codexで試してみました・・・5.5との違いは分からん。

都道府県等の情報は伏せておきます。
念のため伝えておきますが、サイトを見ると電子申請Okなんですけどね。
・・・って隣の席の斎藤さんが言ってました。
道路使用許可に関する申請手続 - 埼玉県警察

カスタムテーブルにアクセスする

7月のアップデートで、もう一つに気になるものがありました。長年期待されていたんですが、
なかなか実装が進まない図面のAPIです。

細かくは見ていないんですが、それほど多くの機能は実装されていないです。
で、アクセスできそうだなと気がついたのは、こちらのカスタムテーブルです。
Help

とりあえず簡単な図面を作成し、テーブルを幾つか配置しました。

上からメニューの順にテーブルを作成。シートメタル部品では無いので曲げテーブルはありません。

こちらも試行錯誤して作ったスクリプトがこちらです。

# Fusion360API Python script

import traceback

import adsk.core as core
import adsk.drawing as drawing


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

        drawDoc: drawing.DrawingDocument = drawing.DrawingDocument.cast(
            app.activeDocument
        )
        if not drawDoc:
            return

        draw: drawing.Drawing = drawDoc.drawing
        sheet: drawing.Sheet = draw.activeSheet
        ui.messageBox(f"カスタムテーブル数: {len(sheet.customTables)}", "失敗です")

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

お気づきかもしれませんが、実際に実行させると・・・

カスタムテーブルも配置しているのですが、何故か数が0なんです。ん~
間違っているとは思えないので、まだまだですかね。
DrawingこそAPIが必要なんですけどね。まぁ今後機能が充実するでしょう。


話は違うんですが、図面ついでに。先日、ちょっとわけがあって、JWCADを
インストールして使ってみたのですが、まあ、使いづらい。 もちろん慣れの問題もあるとはいえ、
見た目も、まあ古いです。
半べそかきながら作業したけど、自分は二度と使いたくないですね。
使える人天才です。

Expert Elite ミートアップ

毎年お声がけ頂いているのですが、昨年は仕事の都合が付かず断念。
今年は無事参加できました。

直接エキスパートエリートの方々とお会いできる機会がこの時しかない上、
異業種の方々とお話しする機会がこの時しかないため貴重な機会だと思っています。
有難い。

で、戦利品がこれです。他にも頂きましたが、迷わず選ばせて頂きました。

メッシュ比較

7月のアップデートで気になった機能がメッシュ比較です。
Help

これ絶対便利ですよ。間違いなく。なので試します。

少しだけ違うメッシュボディを2個重なるように作成しました。

試行錯誤してこの様なサンプルを作成しました。

# 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
        des: fusion.Design = app.activeProduct
        root: fusion.Component = des.rootComponent

        mesh1: fusion.PolygonMesh = root.meshBodies[0].mesh
        mesh2: fusion.PolygonMesh = root.meshBodies[1].mesh

        res = mesh1.compareWith(mesh2)

        print("--mesh1.compareWith(mesh2)--")
        for idx, dist in enumerate(res):
            node: core.Point3D = mesh1.nodeCoordinates[idx]
            print(f"{idx}: {dist} - {node.asArray()}")

        res = mesh2.compareWith(mesh1)

        print("--mesh2.compareWith(mesh1)--")
        for idx, dist in enumerate(res):
            node: core.Point3D = mesh2.nodeCoordinates[idx]
            print(f"{idx}: {dist} - {node.asArray()}")

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

mesh1.compareWith(mesh2) と mesh2.compareWith(mesh1)を行っています。
これが気が付かなかったし、何故か分からないんです。

実際の結果はこちら。

--mesh1.compareWith(mesh2)--
0: 0.0 - (2.5, 2.5, 0.0)
1: 0.0 - (0.0, 2.5, 0.0)
2: 0.0 - (0.0, 2.5, 1.5)
3: 0.0 - (2.5, 2.5, 1.5)
4: 0.0 - (2.5, 0.0, 0.0)
5: 0.0 - (2.5, 0.0, 1.5)
6: 0.0 - (0.0, 0.0, 0.0)
7: 0.0 - (0.0, 0.0, 1.5)
--mesh2.compareWith(mesh1)--
0: 0.0 - (2.5, 2.5, 0.0)
1: 0.0 - (0.0, 2.5, 0.0)
2: 0.21872162818908691 - (0.0, 2.5, 1.718721628189087)
3: 0.0 - (2.5, 2.5, 1.5)
4: 0.0 - (2.5, 0.0, 0.0)
5: 0.0 - (2.5, 0.0, 1.5)
6: 0.0 - (0.0, 0.0, 0.0)
7: 0.21872162818908691 - (0.0, 0.0, 1.718721628189087)

mesh1.compareWith(mesh2)を行うと全ての頂点が一致している(距離が0)を返しています。
イヤイヤそんなことないでしょう。わざわざちょっとだけ変えたモデルで比較してんだから。

mesh2.compareWith(mesh1)に関しては欲しかった結果が得られます。
mesh2.compareWith(mesh1)は常に正しい結果を返してくるか?と言われるとそうだとも
限らないです。形状の影響を受けているのだとは感じていますが、上手く表現できないです。

TypeScript

速いペースのアップデートですね。Fusionの7月のアップデートです。
一番驚いたのがFusionAPIがTypeScriptをサポートしました。
Help
元々はJavaScriptをサポートしていたのをやめたぐらいなのに、なぜ今さらという気もしますが・・・

思い付いたのが処理速度かな?と。Geminiに聞いてみました。

正直なところCADのAPIで一番ボトルネックになるのは、CADの操作そのものなので、
あんまり言語関係ないとは思うんですけどね。

あと考えられるのは、パレットはTypeScriptの方が有利かもしれない。
念のため新規でスクリプトを作成し編集するとVSCodeが起動しました。

Autodesk Assistantのレンダリング2

こちらの続きです。
Autodesk Assistantのレンダリング - C#ATIA

"今のモデルを使用してスチームパンク風でレンダリングしてほしい。前回は画像が途切れていたので途切れないように注意して!"
とお願いしてみた結果がこちら

これはこれで便利かも?

Autodesk Assistant熱いぜぇ!!