C#ATIA

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

計算済みコーナーペンシル仕上げを逆方向にする

PowerMillの機能の中でちょっとだけ不満なのが、コーナーペンシル仕上げ加工。

大体の3DCAMソフトには付いている機能なのですが、今まで経験した中で
唯一PowerMillだけ、下から上にツールパスを作成してくれません。
(使いたい理由は秘密)

サポートさんには機能をつけて欲しいと要望を出しましたが、所詮小市民の
戯言なので、期待は出来ないと思ってます。

上から下へのツールパスを手動で方向逆転させられるので、作れなくはないの
ですが、この操作がメニューの深いところにあるため非常に面倒です。

その為、マクロを作成しまとめて処理させる事にしました。

//pm2017 macro sample_All_Pencil_corner_Rev.mac
//全ての計算済みコーナーペンシル仕上げ加工の方向を逆にする

function Main() {
	//ペンシル検索
	STRING LIST PathLst = {}
	call GetPencilLIST($PathLst)
	
	//チェック
	STRING msg = ''
	if is_empty($PathLst) {
		$msg = '処理可能なペンシルパスがありません!!'
		message error $msg
		return
	}
	
	//メッセージ
	BOOL yesno = 0
	call ListToString(PathLst, $msg)
	$msg = '以下のペンシルパスを逆方向にします。宜しいですか?' + crlf + $msg
	$yesno = QUERY $msg
	IF not yesno {
		return
	}
	
	//リバース
	STRING ActPathName = TOOLPATH.NAME
	call SetReverse(PathLst)
	
	//アクティブツールパスを実行前に戻す
	call ReActToolPath($PathLst, $ActPathName)
}

//実行前アクティブツールパスに戻す
function ReActToolPath(STRING LIST lst, STRING PathName) {
	STRING ReActName = ''
	if member($lst, $PathName) {
		call GetAfterPathName($PathName, $ReActName)
	} else {
		$ReActName = $PathName
	}
	ACTIVATE TOOLPATH $ReActName
}

//変換後のツールパス名取得
function GetAfterPathName(STRING PathName, output STRING NewName) {
	STRING Key = '_Rev'
	STRING Before = $PathName
	INT RevPos = position($Before, $Key)
	STRING After = ''
	if $RevPos == -1 {
		$After = $Before + $Key
	} else {
		$After = replace($Before, $Key, '')		
	}
	$NewName = $After
}

//パス名修正
function RenamePath(STRING PathName) {
	STRING After = ''
	call GetAfterPathName($PathName, $After)
	RENAME Toolpath $PathName $After
}

//逆方向
function SetReverse(STRING LIST lst) {
	foreach itm in lst {
		ACTIVATE TOOLPATH $itm
		EDIT TOOLPATH REVERSE
		call RenamePath(itm)
	}
}

//計算済みペンシル
function GetPencilLIST(output STRING LIST Out_lst) {
	STRING LIST lst = {}
	foreach itm in folder('Toolpath') {
		if itm.computed {
			if itm.Strategy == 'pencil_corner' {
				INT dmy = add_last(lst, itm.name)
			}
		}
	}
	INT dmy = remove_duplicates(lst)
	$Out_lst = lst
	return
}

//リストの文字化
function ListToString(STRING LIST lst, output STRING Out_msg) {
	STRING msg = ""
	foreach itm in lst {
		$msg = msg + itm + crlf
	}
	$Out_msg = msg
}

ツリーのツールパスフォルダ内の計算済みコーナーペンシル仕上げ加工を全て探し出し、
逆転させます。その際、ツールパスの名称を逆転させたものには、
"ツールパス名" + "_Rev" の名称に変更し、再度実行した際は "_Rev"
の名称を削除します。
(手動でゴチョゴチョした際は、もちろんそうなりません・・・)

実際に使用した感じです。 最初に通常に作成したシミュレーションを
実行し、マクロ実行後のシミュレーションを実行してみました。


"Macro Programming Guide" に計算済みツールパスを判断するためのサンプル
が記載されているのですが、パラメータ部分が

IF entity(‘toolpath’,Name) .Calculated {

となっているのですが、正しくは

IF entity(‘toolpath’,Name).computed {

です。 参考に出来るものが少ないだけに誤記は勘弁して欲しい。
(他にも幾つかあります)