こちらの続きです。
工具コンテキストメニューから工具変更 - C#ATIA
頻繁に使用するものほど不便な部分も見えてくるので、修正しました。
・同一工具を使用しているツールパスはリストに表示しない(そもそも必要ない)
・工具交換後、ガウジチェックが必要なものは行うようにオプション選択
・交換可能な工具の種類制限を解除
//pm2018 macro //ReplaceTool.mac ver0.0.3 //複数工具変更 //--------------------------------------------------------------------------------------------------- //<?xml version="1.0" ?> //<menupage> // <button label="工具変更" command="MACRO tool\ReplaceTool.mac "%s""/> //</menupage> //--------------------------------------------------------------------------------------------------- //ver0.0.1-完成 //ver0.0.2-同一工具はリストから削除、ガウジチェック追加 //ver0.0.3-交換可能な工具の種類制限を解除 //--------------------------------------------------------------------------------------------------- function main(string toolname) { //選択工具 entity act = entity('tool', $toolname) //交換可能リスト string ftr = '' $ftr = 'tool.name != "' + $act.Name +'"' $ftr = $ftr + 'and tool.type == "' + $act.type +'"' $ftr = $ftr + 'and tool.Diameter == ' + $act.Diameter $ftr = $ftr + 'and tool.TipRadius == ' + $act.TipRadius string list paths = extract(filter(folder('toolpath'), $ftr), 'name') if is_empty($paths) { message error '変更可能なツールパスがありません!!' return } //ユーザー確認 string msg = '[' + $act.name + ']' + 'に工具変更するツールパスを選択してください' call Exec_DownMenu($paths, $msg, 1, $paths) //交換後のガウジチェック $msg = '交換後必要な場合は、ガウジチェックを行いますか?' bool GouFg= 0 $GouFg= QUERY $msg //工具交換 call Msgoff() call Replace_Tool($act, $paths, $GouFg) call Msgon() //終了 message info 'Done' } //工具変更 function Replace_Tool(entity ActTool, string list Lst, bool GouFg) { ACTIVATE TOOL $ActTool.name foreach path in $Lst { EDIT TOOLPATH $path REPLACE_TOOL ; if $GouFg { call ExecGuogeCheck($path) } } } //ガウジチェック function ExecGuogeCheck(string path) { entity tp = entity('toolpath', $path) if not(tp.Computed == 1 and tp.Safety.Tool.Links.Status == "unknown") { return } ACTIVATE TOOLPATH $path EDIT COLLISION TYPE GOUGE EDIT COLLISION STOCKMODEL_CHECK N EDIT COLLISION SCOPE ALL EDIT COLLISION SPLIT_TOOLPATH Y EDIT COLLISION MISS_OUTPUT Y EDIT COLLISION HIT_OUTPUT Y EDIT COLLISION REORDER NO EDIT COLLISION SPLIT_SEGMENT Y EDIT COLLISION OVERLAP "0.5" EDIT COLLISION MIN_LENGTH "2" EDIT COLLISION HEAD_CLEARANCE "600" EDIT PAR 'Verification.UseVerificationThickness' 0 DRAW COLLISION EDIT COLLISION APPLY } function Msgoff() { graphics lock dialogs message off dialogs error off } function Msgon() { graphics unlock dialogs message on dialogs error on } include downmenu.inc
工具変更後、ガウジチェックが必要になる条件が良くわかっていないのですが、
シャンクやホルダが変わっていることも影響しているんだろうけど・・・。
以前のものは、全てのツールパスをForEachでグリグリ回した上、
交換可能な条件となる工具形状を比較する処理がイマイチだった為、
ダイアログが出殿するまでちょっと待たされていたのですが、
filter関数用の条件が上手く書き出せたので、自作関数が不要になり
コードもすっきり、速度もUpしました。