C#ATIA

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

工具コンテキストメニューから工具変更

計算済みツールパスの工具を変更したい時があります。 かなり、頻繁に・・・。
手動で行うと結構手間で、正直モチベーションが落ちまくります。
手順はこんな感じです。
・任意のツールパスをアクティブ
・変更したい工具をアクティブ
・ツールパスのコンテキストメニューで '工具変更' (しかもメニュー位置が深い・・・)

実際の操作はこんな感じです。


これを楽しようと思いマクロを作成したのですが、PowerMillのマクロの
呼び出し方が複数有り、今回は操作的に直感的なので工具のコンテキストメニューを
利用しての呼び出しにしました。
この呼び出し方法、実は知りませんでした。(Helpには記載されています)
こちらが非常に参考になりました。
Solved: Create macro to pick folder and activate it - Autodesk Community


前回のプルダウンリストを利用して、複数のツールパスに対して工具変更が出来るように
しています。(但し、スクエア・ボール・ラジアス・テーパーボールエンドミルのみです。)

マクロ本体です。

//PMill_Macro
//ReplaceTool.mac
//Treeの指定した工具のコンテキストメニューから工具交換

function main(string toolname) {
	//選択工具
	entity act = entity('tool', $toolname)
	
	//交換可能リスト
	string list paths = {}
	call Get_PathList($act, $paths) 
	if is_empty($paths) {
		message error  '交換可能なツールパスがありません!!'
		return
	}
	
	//ユーザー確認
	string msg = '[' + $act.name + ']' + 'に工具交換するツールパスを選択してください'
	call Exec_DownMenu($paths, $msg, 1, $paths)
	
	//工具交換
	call Set_ActTool($act, $paths)
	
	//終了
	message info  'Done'
}

//工具交換
function Set_ActTool(entity ActTool, string list Lst) {
	call Exec_Cmd('ACTIVATE TOOL "' + $ActTool.name + '"')
	foreach path in $Lst {
		call Exec_Cmd('EDIT TOOLPATH "' + $path + '" REPLACE_TOOL ;')
	}	
}

//交換可能リスト取得
function Get_PathList(entity ActTool, output string list OutLst) {
	string list lst = {}
	bool geoeql = 0
	foreach path in folder('toolpath') {
		call ToolNose_Equal($path.tool, $ActTool, $geoeql)
		if $geoeql {
			int dmy = add_last($lst, $path.name)
		}
	}
	$OutLst = $lst
}

//工具先端一致判断
function ToolNose_Equal(entity T1, entity T2, output bool OutBool) {
	$OutBool = 0
	string T1_type = $T1.type
	string T2_type = $T2.type
	
	if $T1_type != $T2_type {
		return
	}
	
	if $T1.Diameter != $T2.Diameter {
		return
	}
	
	Switch T1_type {
		case 'end_mill'
			$OutBool = 1
			return
			break
		case 'ball_nosed'
			$OutBool = 1
			return
			break
		case 'tip_radiused'
			if $T1.TipRadius == $T2.TipRadius {
				$OutBool = 1
			}
			return
			break				
		case 'taper_spherical'
			if $T1.TipRadius == $T2.TipRadius and $T1.TaperAngle == $T2.TaperAngle {
				$OutBool = 1
			}
			return
			break				
	}
}

//コマンド
function Exec_Cmd(string cmd) {
	docommand $cmd
}

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

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

include downmenu.inc

最後のインクルードは、前回のプルダウンリストのライブラリです。

続いて、工具のコンテキストメニューに追加する為の "tool.XML" です。
既に他で利用されている場合は、buttonタグ部分を追記すればOKです。
又、今まで利用していない場合は、環境変数の追加や指定されたフォルダを
作成する必要があるため、Helpを参考にすると良いかと思います。
(上記のマクロは同一フォルダ内に配置しておく必要が有ります)

<?xml version="1.0"  encoding="utf-8" ?>

<menupage>

<button label="工具変更"
command='MACRO ReplaceTool.mac "%s"'
/>

</menupage>


実際に利用した感じはこちら。

桁違いに楽。