前回のCATIAとは無関係なのですが、偶々水平面のマクロです。
後々に考えている事が有り、テスト的なものなので使わない気はしてます。
早い話が、こちらをパクリました。
Solved: Macro Z values of the flat surfaces - Autodesk Community
但し、こちらのものは 「英語環境じゃないと動かないよ」と書かれており、
確かに日本語環境ではPowerMillが落ちます!
高さ取得の方法は、プロパティを表示させてInfoBoxの文字から高さを
取得させているのですが、落ちる原因はInfoBoxから文字を取得する
widget('TextInfo.InfoText').value
が、NGのようです。
単純に " そこだけ英語に切り替えちゃえば良いんじゃないの? " と
試したところ上手く行きました。
//pm2018 macro //GetFlatSurfaceZLevel.mac ver0.0.1 //水平面高さリストの表示(日本語環境対応)) //--------------------------------------------------------------------------------------------------- //ver0.0.1-完成 //--------------------------------------------------------------------------------------------------- function main() { //全ての面選択 EDIT MODEL ALL DESELECT ALL EDIT MODEL ALL SELECT FLAT //水平面名取得 string list surfs = {} call GetFlatFacesName($surfs) //高さ取得 string list zlevel = {} call GetZLevelList($surfs, $zlevel) //msg string $msg = "Flat surfaces Z value :" + crlf + join(zlevel, crlf) message info $msg } //Infobox情報取得 一時的に言語英語に切り替え必要有り function GetInfoboxValue(output string list out) { $out = {} //言語切り替え LANG English SIZE MODEL TEXTINFO ACCEPT $out = tokens($widget('TextInfo.InfoText').value, crlf) //言語戻し LANG Japanese } //高さリスト取得 function GetZLevelList(string list surfs, output string list out) { $out = {} string list pros = {} int dmy = 0 foreach s in $surfs { EDIT MODEL ALL DESELECT ALL EDIT MODEL ALL SELECT $s call GetInfoboxValue($pros) $pros = tokens($pros[2], " ") $dmy = add_last($out, $pros[3]) } } //水平面名取得 function GetFlatFacesName(output string list out) { $out = {} string list pros = {} call GetInfoboxValue($pros) int dmy = 0 foreach s in $pros { if position($s, "Surface") == -1 { $dmy = remove($pros, $s) } } if size($pros) < 1 { return } string surf = '' int sp = 0 foreach s in $pros { $surf = substring($s, 0, position($s, " ", 0)) if length($s) > 0 { $dmy = add_last($out, $surf) } } }
言語切り替えは最初と最後に行えば良いのですが、念の為毎回行ってます。
画面のチラツキのハンパないです。