C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

未計算ツールパスをまとめてバッチ処理する2

こちらの続きです。
未計算ツールパスをまとめてバッチ処理する - C#ATIA

こちらも頻繁に利用するので不満な部分を修正。

//pm2018 macro
//Toolpath_Batch.mac ver0.0.5
//using downmenu.inc
//選択してのツールパスの計算
//---------------------------------------------------------------------------------------------------
//ver0.0.1-完成
//ver0.0.2-?
//ver0.0.3-リセット機能追加
//ver0.0.4-リセット削除、保存機能追加
//ver0.0.5-バックグラウンド削除,進捗状況ダイアログ追加
//---------------------------------------------------------------------------------------------------

function main() {
	//未計算ツールパス取得
	string filter = 'Computed == 0 and Batch == 1'
	string list paths =  extract(filter(folder('toolpath'), filter), 'name') 
	if is_empty(paths)  {
		message wran  '未計算ツールパスが見つかりませんでした'
		macro abort
	}	
	
	//ユーザー選択
	string msg = '計算するツールパスを選択してください'
	call Exec_DownMenu($paths, $msg, 1, $paths) 
	
	//バッチ後保存
	bool save_ope = 0
	if length(project_pathname(0)) > 1 {
		if project_locked( ) or project_readonly( ) ==0 {
			$save_ope = QUERY '計算後、保存を行いますか?'
		}
	}
	
	//確認
	$msg = join($paths, crlf ) + crlf 
	$msg = $msg + 'の計算を開始します 宜しいですか?'
	if $save_ope {
		$msg = $msg + '(保存有り)'
	}	
	bool yn  = 0
	$yn = QUERY $msg
	if not $yn {
		macro abort
	}
	
	//計算
	call Sw_Start()
	call ExecCalc($paths) 
	call Sw_GetTime()
	
	//保存
	if $save_ope {
		PROJECT SAVE
	}
	
	//終了
	message info  'Done'	
}

function ExecCalc(string list paths) {
	string list dmy = $paths
	int all = add_last($dmy , '') - 1
	int cnt = 0
	call ShowInfobox('*** ツールパス計算 ***') 
	foreach path in $paths {
		$cnt = $cnt + 1
		call PushInfobox($path + ' : 計算中(' + cnt + '/' + all + ')')
		call Msgoff()
		ACTIVATE TOOLPATH  $path
		TOOLPATH $path CALCULATE
		call Msgon()
		if entity('toolpath', $path).Computed == 0 {
			call PushInfobox('...失敗!' + crlf)
		} else {
			call PushInfobox('...成功!' + crlf)
		}
	}
}

function Msgoff() {
	graphics lock
	dialogs message off
	dialogs error off
}

function Msgon() {
	graphics unlock
	dialogs message on
	dialogs error on
}

function Sw_Start() {
	CLOCK RESET QUIT
	CLOCK ON QUIT	
}

function Sw_GetTime() {
	CLOCK OFF QUIT
	CLOCK PRINT QUIT
}

function ShowInfobox(string msg) {
	INFOBOX NEW $msg
	INFOBOX STYLE "NORMAL"
}

function PushInfobox(string msg) {
	INFOBOX APPEND  $msg
}

include downmenu.inc

・バックグランド計算機能は、使わないので削除しました。
 (計算時間1.5倍ぐらいになるので)
・全て処理後、保存するオプション追加
 (こんな機能は、Machining STRATEGISTとか普通にありました)
・進捗状況ダイアログ追加しました
 こちらをパクリました。
 Solved: Check Verification Progress - Autodesk Community

失敗した原因を取得できると便利なんだけどなぁ
(dialogs message off するとメッセージの取得方法が無い とサポートに確認済み)