まだまだ、PowerMillが使いこなせず悩んでます。
その1つが段取りする為の工具のリスト。
ISOコード(Gコード)出力する際、PowerMillではこんな感じになり
それぞれをポスト処理します。
その際セットアップシート(段取指示書、作業指示書・・とか)を作る事が
どのCAMソフトでも出来る物ですが、こんな感じの物を作って使用しています。
フォーマット自体は自由に変更できるのですが、どのCAMソフトでも不満なのは
工程順に出力される部分です。(当然、それも欲しいのですが)
実際に現場で段取りを行う際は、工程順ではなくTコード順に工具の用意や
確認をしたいんです、僕は。
過去にSpace-eでもサポートさんにこの件を何度か伝えたのですが、
未だ実現されてません。(プラグインの作り方も教えてもらえない・・・)
先日、PowerMillのフォーラムでこちらを見つけました。
Tool Tree Set-Up Sheet - Autodesk Community
よくこんなものを作れるなぁ と言うのが本音です。
幾つかのタイプがあるのですが、個人的に使いやすいように(劇的に)直しました。
・フランス語 → 日本語
・Tコード順にソート ← これが一番の目的
・マルチセレクト時、個別ではなく集計しエクスポート
・項目・表示の見直し
・コードがイロイロと汚い・・・
(ファイル開きっぱなしで、ループし処理しつつ書き出しは許せない)
//pm2018 macro //UseToolList.mac Ver0.0.1 //選択済みNCプログラムから工具リストを作成 //--------------------------------------------------------------------------------------------------- //本マクロはコンテキストメニューからの起動の為、ncprogram.XMLに追記してください //<?xml version="1.0" ?> //<menupage> // <button label="使用工具リスト" command='MACRO ncprogram\UseToolList.mac ' multiple_selection="allowed"/> //</menupage> //--------------------------------------------------------------------------------------------------- function Main() { //シングル-処理 マルチ-最初のみ処理 IF $PowerMILL.Status.MultipleSelection.Total { IF $PowerMILL.Status.MultipleSelection.First == 0 { return } } //実行前チェック call HasProjectName() //選択要素(NCプログラム)内でツールパスを持つもののみのリスト entity list ncs = {} call GetHasToolpathNcpro(explorer_selected_entities() ,$ncs) //エクスポートパス取得・フォルダ作成 string expdir = project_pathname(0) + '/NCProgramUseTools' MKDIR $expdir string exppath = $expdir+ "/UseTools.html" //Tコードによるソート済み工具リスト entity list tools = {} call GetSortedToolLst($ncs ,$tools) //工具イメージ string list imgs = {} call InitToolImg($tools, $expdir ,$imgs) //工具データ string list tables = {} call GetToolInfoTable($tools ,$imgs ,$tables) //書き出し string list expheader = {'<html>','<head>','<title>使用工具</title>','</head>','<body lang=FR>','<H1> 使用工具 </H1>'} string list expfooter ={'</body>','</html>'} string list exptxt = $expheader + $tables + $expfooter call WriteFile($exppath , $exptxt) //ブラウザに表示 message info 'Done' OLE fileaction 'open' $exppath } //工具画像 function InitToolImg(entity list lst, string exppath ,output string list outlst) { string list imgs = {} int dmy = 0 string cmd = '' string imgname = '' foreach tl in lst { $imgname = replace($tl.name ,' ' ,'_') + '.png' $cmd='FORM RAISE TOOLASSPREVIEWFORM "' + $tl.name + '"' docommand $cmd wait form //必要 $cmd='EXPORT TOOLASSEMBLYPREVIEW FILE "' + $exppath + '/' + $imgname +'"' docommand $cmd yes FORM CANCEL TOOLASSPREVIEWFORM $dmy = add_last($imgs , $imgname) } $outlst = $imgs } //工具情報 function GetToolInfoTable(entity list tools ,string list imgs ,output string list outlst) { string list tb_head = {'<table border=1 cellspacing=1 cellpadding=1>'} string list tb_foot = {'</table>'} //テーブルタイトル string list tb_title = {'イメージ','Tコード','径/ノーズR','タイプ','シャンク径/首下','ホルダ径/突出','ホルダ名'} string tmp = '' call Join2SrtLst($tb_title ,'<TD align="center" ><H3>', '</H3></TD>' ,$tmp) $tmp = '<TR>' + $tmp + '</TR>' $tb_title = {$tmp} //イメージタグ用 string browser = '15%' //Chrome //string browser = '80p' //IE 上手く行かない //テーブル中身 タイトルと合わせてね string list tb_infos = {} string list vals = {} int dmy = 0 int cnt = -1 foreach tl in tools { $vals = {} $cnt = $cnt + 1 $dmy = add_last($vals , '<img src="./' + $imgs[$cnt] + '" alt="' + $tl.name + '" height="' + $browser +'"/>') $dmy = add_last($vals , string($tl.Number.Value)) $dmy = add_last($vals , 'D' + string(round($tl.Diameter,3)) + '/R' + string(round($tl.TipRadius,3))) $dmy = add_last($vals , string($tl.Type)) $dmy = add_last($vals , 'D' + string(round($tl.ShankSetValues[0].UpperDiameter,3))+ '/' + string(round($tl.Length,3))) $dmy = add_last($vals , 'D' + string(round($tl.HolderSetValues[0].LowerDiameter,3))+ '/' + string(round($tl.Overhang,3))) $dmy = add_last($vals , $tl.HolderName) call Join2SrtLst($vals ,'<TD align="center" >', '</TD>' ,$tmp) $tmp = '<TR>' + $tmp +'</TR>' $dmy = add_last($tb_infos ,$tmp) } $outlst = $tb_head + $tb_title + $tb_infos + $tb_foot } //Tコードによるソート済み工具リスト function GetSortedToolLst(entity list ncs ,output entity list outlst) { string list tools = {} foreach nc in ncs { $tools = $tools + list_nctools($nc) } int dmy = 0 $dmy = remove_duplicates($tools) entity list nctools = {} foreach toolname in tools { $dmy = add_last($nctools , entity('Tool',$toolname)) } $nctools = sort($nctools ,'tool.number') $outlst = $nctools } //StrLstの連結 function Join2SrtLst(string list lst ,string SepFront ,string SepRear ,output string out) { string s = '' foreach t in lst { $s = $s + $SepFront + $t + $SepRear } $out = $s } //ファイル書き出し function WriteFile(string path ,string list lst) { string s = '' call Join2SrtLst(lst ,'' ,crlf ,$s) FILE OPEN $path FOR WRITE AS file FILE WRITE $s TO file FILE CLOSE file } //ツールパスを持っているNcデータリスト function GetHasToolpathNcpro(entity list ncs ,output entity list outlst) { foreach nc in $ncs { IF number_nctoolpaths($nc) > 0 { int dmy = add_last($outlst , $nc) } } IF is_empty($outlst) { string msg = '選択されたNCプログラムにはツールパスがありません!' MESSAGE ERROR $msg MACRO ABORT } } //保存されているプロジェクト? function HasProjectName() { string $proname = project_pathname(1) if length($proname) > 0 { return } string msg = '一度プロジェクトを保存してください!' MESSAGE ERROR $msg MACRO ABORT }
NCプログラムのコンテキストメニューから実行すると、こんな感じで
ブラウザ(PowerMillでは無い通常の)で表示されます。
工具のイメージがエクスポート出来る機能があるなんて知りませんでした・・・。
使う人がいるとは思えないのですが、オリジナルと項目を変更しているので
「シャンク径/首下」のシャンク径は、上の画像の赤矢印部分です。
シャンクの1段目の上の径を出力してます。
「ホルダ径/突出」のホルダ径は、画像の青矢印部分です。
ホルダの1段目の下の径を出力しています。
・・・CATIAはネタが無いなぁ。