C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

全てのツールパスを無効に一発で!

PowerMillの工程を使い回したい時がシバシバ有ります。
前にも書いたかも知れませんが。
既存の計算済みツールパスを全て無効にしてから始めたいので、
ツールパスのコンテキストメニューの「全て無効」コマンドを実行してます。
f:id:kandennti:20190306191458p:plain
恐らく他のCAMソフトでも類似した機能があるはずです。

ところが、PowerMillは依存関係が頑固で、一発で全て無効
にならない時が有ります。試しに1回実行すると
f:id:kandennti:20190306191508p:plain
電卓マークになっていないものは無効(未計算状態)になって
いません。複数回同じコマンドを繰り返せば全てが無効にはなります。


原因は、領域切削(荒加工です)の削り残し機能を使用すると
これが起きます。上記の画像では、ストックモデルを使用した領域切削
の設定になっています。(イロイロな方法がPowerMillにはあるんです!)
f:id:kandennti:20190306191517p:plain
使っていない人にはわからないですね。

・r10a_rough で加工しストックモデル化
 ↓
・ストックモデルを利用し r5a_roughを加工
 ↓
・r5a_vh で加工しストックモデルに追加
 ↓
・ストックモデルを利用し r2a_roughを加工

のような手順になってます。
これが標準的な方法かどうかわかっていませんが。
(ストックモデルはその都度コピーして依存をぶった切るのが
良いよ とかの記述は見たのですが、実質手間がかかる)

工程的な事は別として、PowerMillはこんな感じで安全よりに
設計されていて、頑固なまでに依存関係を保ちます。

これを一発で全て無効にする方法は無いものかと、サポートさんにも
問い合わせたのですが、そのようなコマンドが無くマクロで
行うしかないよ と教わりました。(その節はお世話になりました)

のですが、複数回「全て無効」コマンドを実行する為の回数が
状態によって異なるのですが、10回ぐらいループをまわすのみに
なっていた為、ちょっとイマイチだったので自作しました。

//pm2019macro
//Reset_Toolpath.mac ver0.0.1
//全て無効を一発で実現(しているように見せかける)

Function Main() {
	string msg = ''
	
	int st_cnt = 0
	call GetComputedCount($st_cnt)
	if $st_cnt == 0 {
		$msg = '計算済みツールパスは有りませんでした。'
		message info  $msg
		return
	}
	
	int ed_cnt = 0
	call ExecUncalculated($st_cnt, $ed_cnt)
	$msg = string($st_cnt - $ed_cnt) + '個、無効にしました。'
	
	//終了
	message info  $msg
}

function ExecUncalculated (int st_cnt, output int out) {
	int tmp1 = 0
	$tmp1 = $st_cnt
	int tmp2 = 0

	do {
		INVALIDATE TOOLPATH ALL Yes
		call GetComputedCount($tmp2)
		
		if $tmp1 == $tmp2 {
			break
		}
		
		$tmp1 = $tmp2
	} while not $tmp1 == 0
	
	$out = $tmp1
}

function GetComputedCount (output int out) {
	string filter = 'Computed == 1'
	entity list tps = folder('toolpath')
	$out = size(extract(filter($tps , $filter), 'name'))
}

「全て無効」コマンドの前後で計算済みのツールパスの数を取得し、
変化が無ければループを抜ける(それ以上やっても無意味)
ようにしました。


・・・Drawビューの原点を変更するマクロの説明書きを、書かなきゃな。