C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

水平面高さリストを表示

前回の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)
		}
	}
}

言語切り替えは最初と最後に行えば良いのですが、念の為毎回行ってます。
画面のチラツキのハンパないです。

f:id:kandennti:20180427201337p:plain