Fusion 360 API(Python)を用いて、リンク付きのプロジェクトコマンドを実行する方法

Fusion 360 API(Python)を用いて、リンク付きのプロジェクトコマンドを実行する方法

ChaosComb
Advisor Advisor
648件の閲覧回数
5件の返信
メッセージ1/6

Fusion 360 API(Python)を用いて、リンク付きのプロジェクトコマンドを実行する方法

ChaosComb
Advisor
Advisor

お世話になっております。

 

スケッチでリンク付きのプロジェクトを実行して、ボディ面をスケッチとして取り込みたいと考えています。

sketchesクラスの中にproject関数があったので現在はそれを実装しているのですが、どうもリンク付きになってくれません。

 

下記にあるFusion 360 APIフォーラムの過去の投稿のコードを実行してみたものの、そちらでも同様にリンクがついていない状態で投影されてしまいます。

この記事の投稿時点ではリンク付きで実行できているようなので、もしかすると仕様が変わったのでは...とも思っています。

https://forums.autodesk.com/t5/fusion-360-api-and-scripts/project-a-body-on-a-sketch/m-p/10927252

 

どなたか解決方法や情報をお持ちでしたら、何卒よろしくお願い致します。


0 件のいいね
解決済み
649件の閲覧回数
5件の返信
返信 (5)
メッセージ2/6

shinji_esaki
Collaborator
Collaborator

@ChaosComb さん

 

APIの新着情報を見るとSketch.projectメソッドに変更があったようです。(関係ないかもしれませんが...)

 

4. スケッチに複数のエンティティを投影
 既存のSketch.projectメソッドが強化され、多くのスケッチカーブを含むObjectCollectionを提供できるようになり、それらはすべてスケッチに投影されるようになりました。以前は、一度に一つずつ投影する必要がありました。

 

https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-36B1FFB5-5291-4532-8F11-90E912769B34

 

私も挙げていただいた投稿のコードを試しましたが、やはり参照にはなりませんでした。

メッセージ3/6

kandennti
Mentor
Mentor
解決済み

@ChaosComb さん こんにちは。

 

これは9月のUpdateで発生しているバグです。

取りあえずテキストコマンドを呼び出して対応出来るサンプルです。

 

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core


def run(context):
    ui = adsk.core.UserInterface.cast(None)
    try:
        app: adsk.core.Application = adsk.core.Application.get()
        ui = app.userInterface
        des: adsk.fusion.Design = app.activeProduct
        root: adsk.fusion.Component = des.rootComponent

        # 拡張メソッド
        adsk.fusion.Sketch.projectLike = projectLike

        # スケッチ作成
        skt: adsk.fusion.Sketch = root.sketches.add(
            root.xYConstructionPlane
        )

        # スケッチ-+プロジェクト
        skt.projectLike(root.bRepBodies[0].faces[1])

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



def projectLike(
    self: adsk.fusion.Sketch,
    entity) -> adsk.core.ObjectCollection:

    tokens = [c.entityToken for c in self.sketchCurves]
    tokens.extend([p.entityToken for p in self.sketchPoints])

    entities = None
    if hasattr(entity, "__iter__"):
        entities = entity
    else:
        entities = [entity]

    app: adsk.core.Application = adsk.core.Application.get()
    sels: adsk.core.Selections = app.userInterface.activeSelections

    sels.clear()
    sels.add(self)
    app.executeTextCommand(u'Commands.Start SketchActivate')

    sels.clear()
    app.executeTextCommand(u'Commands.Start ProjectNewCmd')
    app.executeTextCommand(u'Commands.SetString infoFilterType {}'.format('infoFilterTypeEntities'))
    [sels.add(e) for e in entities]
    app.executeTextCommand(u'NuCommands.CommitCmd')

    app.executeTextCommand(u'Commands.Start SketchStop')

    projectedEntities = [c for c in self.sketchCurves if not c.entityToken in tokens]
    projectedEntities.extend([p for p in self.sketchPoints if not p.entityToken in tokens])

    pros: adsk.core.ObjectCollection = adsk.core.ObjectCollection.create()
    [pros.add(e) for e in projectedEntities]

    return pros

 

 

添付したデータで実行すると、こんな感じでリンク付きのスケッチ要素が出来ます。

1.png

 

欠点としては、テキストコマンドの場合GUIで作業を行う事に近い為、

画面が動いてしまうことと、選択している要素が有った場合、未選択で

終了してしまう事です。(あと、処理が遅い)

 

時期は分かりませんが、何れ修正されるはずなので、修正された際は

 

def run(context):
    ui = adsk.core.UserInterface.cast(None)
    try:
        app: adsk.core.Application = adsk.core.Application.get()
        ui = app.userInterface
        des: adsk.fusion.Design = app.activeProduct
        root: adsk.fusion.Component = des.rootComponent

        # 拡張メソッド
        # adsk.fusion.Sketch.projectLike = projectLike

        # スケッチ作成
        skt: adsk.fusion.Sketch = root.sketches.add(
            root.xYConstructionPlane
        )

        # スケッチ-+プロジェクト
        # skt.projectLike(root.bRepBodies[0].faces[1])
        skt.project(root.bRepBodies[0].faces[1])

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

 

この様に修正するだけで済むように、projectLike関数を作っています。

(引数と戻り値は一致させています)

メッセージ4/6

ChaosComb
Advisor
Advisor

@shinji_esaki さん

 

情報ありがとうございます。

APIの進捗情報を見れるところがあるんですね、知りませんでした。

これからはちょくちょく見ておくことにします!


メッセージ5/6

ChaosComb
Advisor
Advisor

@kandennti さん

 

ぬおーーー!

やはりそうだったのですか!!丸一日無駄にしてしまいました!

 

サンプルプログラムまで添付いただきありがとうございます。

早く直って欲しいですね...


メッセージ6/6

kandennti
Mentor
Mentor

@ChaosComb さん

 

こちらの不具合は、Ver2.0.14335で修正されています。