久々にPowerMillのマクロです。 かなり忘れています。
PowerMillで苦労している部分は多々あるのですが、
一番精神的にダメージを受けるのが、モデルのインポート。
お互いイロイロとライセンスが無い為、Igesで受け渡しを行っています。
どうやら苦労されているのは、僕だけではなく・・・
http://www.coe.org/p/fo/et/thread=29121
Stepでも面が抜け落ちたりしているようです。
(解決されたみたいですが)
時間のかかる処理を行った後に、
「あっここの小さな面が抜けてる・・・」
となると、途端にモチベーションが下がりまくります。
(でも、どのCAMソフトでも経験があるはず)
事前にデータをチェックし修復さえしていれば、かなりストレス軽減に
なるはずなので、マクロで処理してしまいます。
//pm2018 macro //Find_Surface_Clearance.mac Ver0.0.2 //モデルの隙間とバッドサーフェスの検索 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 = '不良面チェックトレランスを入力して下さい' real MeshTol = $MeshTolDef call InputReal($Msg, $MeshTolDef , $MeshTol ) if $MeshTol < 0 { return } //隙間トレランス $msg = '隙間チェックトレランスを入力して下さい' real ClearTol = $ClearTolDef call InputReal($Msg, $ClearTolDef , $ClearTol ) if $ClearTol < 0 { return } //**処理** call DialogOff() //サーフェス方向 if $NormalFg { call Exec_OrientNormals($models) } //BadSurfaces call Exec_BadSurfaces($models, $MeshTol) //バウンダリ作成 call Create_Boundary($models , $ClearTol ) call DialogOn() message info 'Done' } //不良面 function Exec_BadSurfaces(string list Models, real Tol) { EDIT MODEL ALL DESELECT ALL foreach name in $Models { EDIT MODEL $name SELECT ALL } string nxtset = new_entity_name('Level') CREATE LEVEL ; MODELCOMPSET EDIT LEVEL $nxtset ACQUIRE SELECTED string cmd = 'EDIT LEVEL $nxtset MESH "' + string($Tol) +'"' DoCommand $cmd DELETE LEVEL $nxtset EDIT MODEL ALL DESELECT ALL VIEW MODEL ; SHADE NORMAL } //サーフェス方向 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 newname = '' foreach name in $Models { EDIT MODEL $name SELECT ALL $newname = $newname + $name + '_' } $newname = $newname + '_Checked-Tol_' + string($Tol) string Bouname = new_entity_name('Boundary') CREATE BOUNDARY ; SKETCH FORM BOUNDARY EDIT BOUNDARY $Bouname TOLERANCE $Tol EDIT BOUNDARY $Bouname INSERT MODEL 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 '数値を入力して下さい!' return } if $res <=0 { message error '0以上の数値を入力して下さい!' return } $Outreal = $res } //ダイアログ類オン function DialogOn() { GRAPHICS UNLOCK DIALOGS MESSAGE ON DIALOGS ERROR ON ECHO ON DCPDEBUG TRACE COMMAND ACCEPT } //ダイアログ類オフ function DialogOff() { GRAPHICS LOCK DIALOGS MESSAGE OFF DIALOGS ERROR OFF ECHO OFF DCPDEBUG UNTRACE COMMAND ACCEPT }
マクロ実行後
・対象モデルの選択
・サーフェスの方向付け(任意)
・メッシュトレランス入力
・隙間トレランス入力
で自動的に、BadSurfcesの検出と隙間となるバウンダリを作成します。
(BadSurfcesは処理上で弊害となる不正面で、存在しているとツールパスを
計算してくれません)
実際に試した感じです。
最初はモデルの色がグレーと茶色が整っていないのですが、
マクロ内で処理させています・・・が、最後にズームさせた位置に
反転した面があるんですよね。(完全じゃないです)