C#ATIA

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

ツールパスのコンポーネント残り代情報

PowerMillの機能に、コンポーネント残り代と言う機能があるのですが
一般的に使われるものかどうか?
個人的には電極の仕上代を設定する為、必ず使っています。

ところがここの設定の確認が非常にやりにくい為、マクロでチェックしようと
考えているのですが苦戦してます。
f:id:kandennti:20180524190219p:plain
殆どの情報は取得できるのですが、矢印のコンポーネント数を取得する
パラメータが存在しないようで困ってしまいました。

サポートさんに問い合わせても出来ないとの回答は頂いたのですが、
ちょっとだけ気が付いた事がありました。
各セットを選択した状態で、こちらの名称不明のボタンを押すと
コンポーネントとして登録された面を選択した状態になります。
f:id:kandennti:20180524190802p:plain
これを利用すれば、選択面の数を取得する事でコンポーネント数の
取得となりそうです。

//pm2018 macro
//全ツールパスのコンポーネント/残り代情報を垂れ流す

function main() {
	int list rng = {}
	call GetRangeLst(0, 16, $rng)
	
	INFOBOX NEW "***** toolpath ThicknessSetValues info *****"
	INFOBOX CLEAR FORMAT
	
	string info = ''	
	int surf_cnt = 0
	
	FORM THICKNESS EDIT THICKNESS TAB DEFAULT
	EDIT THICKNESS TAB COMPONENTS TOOLPATH
	THICKNESS ACCEPT

	dialogs error off
	dialogs message off
	
	foreach tp in folder('toolpath') {
		string full = pathname('toolpath', $tp)
		EXPLORER SELECT Toolpath $full  NEW
		$info = '-- toolpath : ' + $tp.name + ' --'+ crlf
		object list tvs = $tp.ThicknessSetValues
		foreach idx in $rng {
			object tv =  $tp.ThicknessSetValues[$idx]
			
			$info = $info + string($idx) + ' : '
			$info = $info + $tv.Mode + ' : '
			$info = $info + $tv.UseAxialThickness + ' : '
			$info = $info + string($tv.Thickness) + ' : '
			$info = $info + string($tv.AxialThickness) + ' : '
			
			//コンポーネント数の取得
			graphics lock
			DELETE SELECTION
			EDIT THICKNESS DEFAULTLIST UPDATE
			\r
			$idx  NEW
			\r
			EDIT THICKNESS SELECT
			graphics unlock
			call GetSelSurfCount($surf_cnt)
			$info = $info + string($surf_cnt) + crlf
		}
		$info = $info + crlf
		dialogs message on
		call ShowInfobox($info)
		dialogs message off
	}
	DELETE SELECTION
	dialogs message on
	dialogs error on
	
	//終了
	message info  'Done'		
}

function GetRangeLst(int start, int count, output int list lst) {
	int num = 0
	$lst = {}
	do {
		int dmy = add_last($lst, $start + $num)
		$num = $num + 1
	} while $num < $count
}

function GetSelSurfCount(output int num) {
	string $TraceFilePath = macro_path(false) + "\selsurf.txt"
	string list txts = {}
	ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT
	TRACEFILE OPEN $TraceFilePath
	PRINT SELSURFACE
	TRACEFILE CLOSE
	ECHO ON DCPDEBUG TRACE COMMAND ACCEPT
	
	FILE OPEN $TraceFilePath FOR READ AS Input
	FILE READ $txts FROM Input
	FILE CLOSE Input
	DELETE FILE $TraceFilePath

	$num = size($txts) - 1
}	

function ShowInfobox(string msg) {
	INFOBOX STYLE "NORMAL"
	INFOBOX APPEND  $msg
}

テスト的なコードのため、InfoBoxに結果を垂れ流しているだけです。
・・・遅いんです、処理が。

原因は
・ツールパスをアクティブにしている
・毎回、面を選択している
・選択面数の取得にファイルの書き込み・読み込みをしている
だとは思うのですが、アクティブにしなくても良かったのかな?
選択面数の取得はこちらの方法です。
水平面高さリストを表示2 - C#ATIA
ファイルの書み・読みを1ツールパスに付き16回もやっているんです・・・。

イロイロ探して試しているのですが、選択面数ぐらい何とか取得出来そうな
気もするのですが・・・。