読者です 読者をやめる 読者になる 読者になる

C#ATIA

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

アクティブなブロックを未計算ツールパスに反映させる2

雛形を流用するために作ったこちらのマクロ
アクティブなブロックを未計算ツールパスに反映させる - C#ATIA


制限的な部分が有るものの、一応機能していたので使っていたのですが、
処理が地味に遅いので・・・。

何か方法が有るのではないかな? と思っていたのですが、どの様に
すれば良いのか? 全く手掛かりが有りませんでした。

フォーラムをボサッと眺めていたら、手動で行うこの操作が大きなヒントになりました。
Solved: Copy block to other toolpaths - Autodesk Community
こんな方法知らなかったです。

又、以前のマクロでは不満だった以下の部分も修正しました。
・任意の未計算ツールパスを選択可能に
・ブロックのタイプを全て可能に
・作業平面も反映
・安全領域も反映
又、こちらも必要です。
"group" フォルダは犠牲にした、プルダウンリストライブラリ - C#ATIA

//pm2017 macro
//アクティブなブロック・作業平面・安全領域を反映
//using downmenu.inc

function main() {
	//未計算ツールパス取得
	string filter = 'Computed == 0'
	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) 	
	
	//バッチ処理
	call Msgoff()
	call Sw_Start()
	foreach path in $paths {
		string fullpath = pathname('toolpath', $path)
		EXPLORER SELECT Toolpath $fullpath NEW
		EDIT PAR SELECTED block
		EDIT PAR SELECTED Workplane
		EDIT PAR SELECTED Rapid
	}
	call Msgon()
	call Sw_GetTime()
	
	//終了
	message info  'Done'		
}

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
}

include downmenu.inc

速度Upした大きな要因は、以前のものでは変更するツールパスを毎回アクティブに
していたのですが、今回のものは単に選択しただけの状態で、修正を
反映している事だろうと思われます。

こちらが以前のもの。 処理時間自体は4秒ほど。


こちらが今回のもの。 0.8秒ぐらいです。


動画中では安全領域が修正されていない(工具先端位置)状態なのですが、
実際に計算させると、修正が反映されています。
(左:計算前  右:計算後)
f:id:kandennti:20170417183423p:plain

今回のデータでは3秒程しか短縮していませんが、実際の業務では
もっと多くの工程があるため、より多くの効果を体感します。

他の作業と平行して行うほど時間がかかる訳でもなく、瞬時に処理が
終わるわけでもなく、あくまで "処理が地味に遅い" だったため
若干ストレス感じていました。
時間的な効果より、気持ちの面での効果のほうが大きいのが本音です。