コミュニティ
Fusion - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

フィーチャーを検索 をapiから動作させたい

7件の返信7
解決済み
返信
メッセージ1/8
MM0501
217 件の閲覧回数, 7 件の返信

フィーチャーを検索 をapiから動作させたい

こんにちわ

現在,apiを用いて3Dモデルの形状認識を行おうとしております.
対象とするモデルは,stepなどの中間ファイルからインポートしたソリッドモデルです.

 

ドキュメントを検索していると,フィーチャーを検索 という機能があることを見つけました.

しかし,現状apiを用いて動作させる方法が分かりません.

apiからの動作が可能かどうか教えていただきたいです.

また,fusionのapiを用いた形状認識(フィーチャー認識)についてご意見あればよろしくお願いいたします.

ラベル(3)
7件の返信7
メッセージ2/8
kandennti
次のアカウントへの返信: MM0501

@MM0501 さん こんにちは。

 

ドキュメントのどの辺りに記載されているのでしょうか?
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-A92A4B10-3781-4925-94C6-47DA85A4F65A 

 

もし、APIで提供されていない場合であれば、裏技チックな方法で

実現可能のような気がしています。(必ず出来る と言う保証は無いのですが)

メッセージ3/8
Bunga777
次のアカウントへの返信: kandennti

@kandennti さん

 

恐らくこちらの機能のことです。

Help

 

Monosnap Fusion360 2024-05-30 12.56.45.png

 

この機能は恐らくSolidworksなどのフィーチャー認識に類似した機能なのですが、履歴ありにすると使えない隠れた便利機能だったりします。これが履歴あっても使えたらなぁと最近はず~っと思っているのですが……。

恐らくいつか履歴ありでも使えるようになるに違いないと思っています。

メッセージ4/8
kandennti
次のアカウントへの返信: MM0501

@MM0501 さん

 

見落としの可能性はあるのですが、恐らくAPIでは提供されていない機能です。

裏技ですが、テキストコマンドを使用します。(APIでテキストコマンドを実行する事が出来ます)

 

テキストコマンドの利用方法は、古いのですがこちらに記載しました。
https://forums.autodesk.com/t5/fusion-api-and-scripts/use-textcommands/m-p/9645688 
https://forums.autodesk.com/t5/fusion-api-and-scripts/use-textcommands2/m-p/9937161 

処理速度は遅いもののAPIからGUIを操作するようなイメージです。

但し通常のAPIより開発が困難です。 ・・・の為、今晩取り組んでみます。

 

最近でもこんな感じのものを作成しています。
https://forums.autodesk.com/t5/fusion-api-and-scripts/generate-face-groups-via-python-script/m-p/128... 

https://forums.autodesk.com/t5/fusion-api-and-scripts/how-to-automatically-extract-cam-simulation-da... 

 

@Bunga777 さん

機能自体は、以前の会社で何度も使用していたため知ってましたよ!
フィレット削除や穴埋めに使ってました。

メッセージ5/8
kandennti
次のアカウントへの返信: kandennti

@MM0501 さん

検索する際の項目を教えてもらえないでしょうか?
(全て?フィレットと穴?等)

メッセージ6/8
MM0501
次のアカウントへの返信: kandennti

現在は穴のみ検索することを考えています.

メッセージ7/8
kandennti
次のアカウントへの返信: MM0501

@MM0501 さん

スクリプトを作成してみました。実行後ソリッドボディを選択すると

穴のみのフィーチャの検索を行い、出来上がったフィーチャ名を表示します。

 

# 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

        # デザインモードチェック
        if des.designType == fusion.DesignTypes.ParametricDesignType:
            ui.messageBox("ダイレクトモードに切り替えて下さい")
            return

        # 選択
        msg: str = "ソリッドボディを選択"
        selFilter: str = "SolidBodies"
        sel: core.Selection = select_ent(msg, selFilter)
        if not sel: return

        feats = exec_find_hole_features(
            sel.entity
        )

        if not feats: return

        # メッセージ
        if len(feats) < 1:
            msg = "見つかりませんでした"
        else:
            names = "\n".join([f.name for f in feats])
            msg = f"以下が見つかりました\n{names}"

        ui.messageBox(msg, "穴検索")

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


def exec_find_hole_features(
        body: fusion.BRepBody,
) -> list[fusion.HoleFeature]:
    """
    ダイレクトモードでのフューチャー検索-穴を行う
    """
    app: core.Application = core.Application.get()
    ui: core.UserInterface = app.userInterface

    # ソリッドチェック
    if not body.isSolid: return

    # ボディのコンポーネント
    comp: fusion.Component = body.parentComponent

    # 穴フィーチャのバックアップ
    holes: fusion.HoleFeatures = comp.features
    holeFeatLst = [h for h in holes]

    # 選択
    sels: core.Selections = ui.activeSelections
    sels.clear()
    sels.add(body)

    # コマンド実行
    cmds = [
        u"Commands.Start FusionFindFeaturesCommand", #コマンド呼び出し
        u"Commands.SetBool SelectAllFeaturesInput 1", #全てON
        u"Commands.SetBool SelectAllFeaturesInput 0", #全てOFF
        u"Commands.SetBool SelectHoleFeatureInput 1", #穴ON
        u"NuCommands.CommitCmd", #実行
    ]
    [app.executeTextCommand(cmd) for cmd in cmds]

    # 見つけた穴フィーチャ
    return [h for h in holes if not h in holeFeatLst]


def select_ent(
        msg: str,
        filterStr: str
) -> core.Selection:
    """
    要素の選択
    """
    try:
        app: core.Application = core.Application.get()
        ui: core.UserInterface = app.userInterface
        sel = ui.selectEntity(msg, filterStr)
        return sel
    except:
        return None

 

1.png
exec_find_hole_features関数のみをコピペすれば他でも利用出来ると思います。

ひょっとして、穴の面だけを取得したいとかなのでしょうか?
メッセージ8/8
MM0501
次のアカウントへの返信: kandennti

コードをご提示頂きありがとうございます.

無事,意図通りの動作を確認できました.

 

この度はありがとうございました.

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿  

State of Design & Make 2024

EE RESOURCES