C#ATIA

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

バッチ処理前にマクロでモデルをチェックする2

こちらの続きです。
バッチ処理前にマクロでモデルをチェックする - C#ATIA

最近になりイロイロとわかり、メッシュ化トレランスを変更し複数回このマクロを
実行していたのですが、馬鹿らしくなり一度に複数トレランスをチェック
できるように修正。 ちょっと業務を行うと不満な部分がチョロチョロ出てきます。
PowerMillのマクロは、必要なものを数個作ったら終わりにするつもりだったのに
こんなに長々取り組む事になるとは思いませんでした・・・。

//pm2018 macro
//Find_Surface_Clearance.mac Ver0.0.3
//モデルの隙間とバッドサーフェスの検索
//---------------------------------------------------------------------------------------------------
//ver0.0.1-完成
//ver0.0.2-トレランス見直し
//ver0.0.3-メッシュトレランス複数入力化,確認ダイアログ追加,バウンダリ重複名対応
//				不良面メッセージ追加
//---------------------------------------------------------------------------------------------------

function Main() {
	real MeshTolDef = 0.005 //メッシュトレランス-デフォルト
	real ClearTolDef= 0.1 //隙間トレランス-デフォルト
	
	//**ユーザー選択**
	//モデル
	string msg = '隙間と不良面をチェックするモデルを選択してください'
	string list models = input entity multiple model $msg
	if is_empty(models) {
		return
	}
	
	//サーフェス方向
	$msg = 'サーフェス方向処理を行いますか?'
	bool NormalFg= 0
	$NormalFg= QUERY $msg
	
	//メッシュトレランス
	$msg = '不良面チェックトレランスを入力して下さい : 例)0005,0.1'
	real list MeshTols = {}
	call InputString2Real($Msg, $MeshTolDef , $MeshTols)
	
	//隙間トレランス
	$msg = '隙間チェックトレランスを入力して下さい'	
	real ClearTol  = -1
	call InputReal($Msg, $ClearTolDef , $ClearTol )
	
	//確認
	$msg = '対象モデル : ' + join($models, ' , ') + crlf
	$msg = $msg + 'サーフェス方向処理 : '
	if NormalFg {
		$msg = $msg + '一致処理行う' + crlf
	} else {
		$msg = $msg + 'そのまま' + crlf
	}
	$msg = $msg + '不良面チェックトレランス : ' + join($MeshTols, ' , ') + crlf
	$msg = $msg + '隙間チェックトレランス : ' + $ClearTol + crlf
	bool yn  = 0
	$yn = QUERY $msg
	if not $yn {
		macro abort
	}	

	//**処理**
	call Msgoff()
	
	//サーフェス方向
	if $NormalFg {
		call Exec_OrientNormals($models)
	} 
	
	//BadSurfaces
	string bad = ''
	call Exec_BadSurfaces($models, $MeshTols, $bad) 
	
	//バウンダリ作成
	call Create_Boundary($models , $ClearTol ) 
	
	call Msgon()
	message info 'Done' + crlf + $bad
}

//不良面
function Exec_BadSurfaces(string list Models, real list Tols, output string out) {
	$out = ''
	EDIT MODEL ALL DESELECT ALL
	foreach name in $Models {
		EDIT MODEL $name SELECT ALL
	}	
	
	foreach tol in tols {
		real tol_r = real(tol)
		string nxtset = new_entity_name('Level')
		CREATE LEVEL ; MODELCOMPSET
		EDIT LEVEL $nxtset ACQUIRE SELECTED
		EDIT LEVEL $nxtset MESH $tol_r 
		DELETE LEVEL $nxtset
	}
	
	EDIT MODEL ALL DESELECT ALL	
	VIEW MODEL ; SHADE NORMAL
	
	if entity_exists(entity('level' ,'Bad Surfaces')) {
		$out = '不良面が有ります!!'
	}
}

//サーフェス方向
function Exec_OrientNormals(string list Models) {
	EDIT MODEL ALL DESELECT ALL
	foreach name in $Models {
		EDIT MODEL $name SELECT ALL
		EDIT MODEL $name ORIENT_NORMALS SELECTED
	}	
}

//バウンダリ
function Create_Boundary(string list Models, real Tol ) {
	EDIT MODEL ALL DESELECT ALL
	string Bouname = new_entity_name('Boundary')
	string newname = join($Models, '_') + '_Checked-Tol_' + string($Tol)
	foreach name in $Models {
		EDIT MODEL $name SELECT ALL
	}		
	CREATE BOUNDARY ; SKETCH FORM BOUNDARY
	EDIT BOUNDARY $Bouname TOLERANCE $Tol
	EDIT BOUNDARY $Bouname INSERT MODEL
	call GetNewName('Boundary' , $newname , $newname)
	RENAME BOUNDARY $Bouname $newname
	
	EDIT BOUNDARY $newname ACCEPT BOUNDARY ACCEPT
	EDIT MODEL ALL DESELECT ALL
}

//数値入力 不正時は-1を返す
function InputReal(string Msg, real Defreal, output real  Outreal) {
	$Outreal = -1
	real res = $Defreal
	$res = input $Msg
	bool err = 0
	$err = error $res
	if $err {
		message error '数値を入力して下さい!'
		macro about
	} 
	if $res <=0 {
		message error '0以上の数値を入力して下さい!'
		macro about
	} 	
	$Outreal = $res
}

//数値変換可能な文字入力 不正時は空リストを返す
function InputString2Real(string Msg, real Defreal, output real list Out) {
	$Out = {}
	string res = $Defreal
	$res = input $Msg
	string list lst = tokens($res, ',')
	foreach s in $lst {
		real r = real($s)
		if $r > 0 {
			int dmy = add_last($Out, $r)
		}
	}
	if size($Out) < 1 {
		message error '入力値が不正です!!'
		macro about
	}
}

//新たな名前の取得
Function GetNewName(string folder , string name , output string out) {
	if entity_exists(entity($folder ,$name)) < 1 {
		$out = $name
	} else {
		$out = new_entity_name($folder ,$name)
	}
	return
}

function Msgoff() {
	graphics lock
	dialogs message off
	dialogs error off
}

function Msgon() {
	graphics unlock
	dialogs message on
	dialogs error on
}

花粉苦しい。連日頭痛が酷いです。