C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

スケッチ作業中を判断する

CATIAの場合はワークベンチを判断すればわかるのですが、Fusion360の場合は
ワークスペースをチェックしても、判断できません。
Fusion360はスケッチオブジェクトを指定して、そこに線を書いているので
"スケッチワークスペース" なんて存在しないんですね。

そこで思いついたのが、 "スケッチ停止" コマンドが機能しているかどうかで
判断できるかな? と思い作ってみました。

#FusionAPI_python
#Author-kantoku
#Description-IsSketchWorking
#スケッチ作業中の判断

import adsk.core, adsk.fusion, adsk.cam, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        
        if IsSketchWorking(ui):
            ui.messageBox("スケッチ作業中")
        else:
            ui.messageBox("スケッチ作業じゃない")
        
        ui.workspacesByProductType
    except:
        if ui:
            ui.messageBox('エラー\n{}'.format(traceback.format_exc()))
            
#スケッチ作業中
#param: ui-userInterface
#return: boolean
def IsSketchWorking(ui):
    pnl = ui.allToolbarPanels.itemById('SketchPanel')
    con = filter(lambda c: c.id == 'SketchStop', pnl.controls)
    return list(con)[0].isVisible

IsSketchWorking関数を作成し判断してます。
filterとラムダ式で "スケッチ停止" コマンドを抜き出しています。
少しはPythonっぽく書けてきました。

本当は、これを利用したスプリクトを作るつもりだったのですが、
作る意味が無いことが判明。 手動操作を覚えないと無駄ばかり・・・。