C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

加工前チェック用ツールパスの作成

マシニングセンターで加工する前に材料の位置やサイズ、ワーク座標系等
どうやって確認するのが一般的なんでしょうか?(・・・知りたい)

これらのミスでオシャカを作った場合(だけではないと思いますが)対策書を
書かされる企業も多くあるかと思いますが、大半の対策は「よく確認する」に
なってしまうのも本音なところw

僕のところでは暗黙的なルールとして、材料の天面をクルッと走らせるだけの
簡単なツールパスを走らせて確認しています。こんな感じの緑の線です。
f:id:kandennti:20180221192411p:plain
機械が一生懸命仕事をしているのを拝んでる暇が無いので、この確認だけで
あとは放置です。基本的に。

実はこんな簡単なツールパスなのですが、PowerMillでは空中に浮いている
無意味なものを作るのが結構難しい?面倒?なのです。

そこでマクロを利用し手っ取り早く作れるようにしました。

//pm2018 macro
//チェックパス作成

function Main(string toolname) {
	bool yn = 0
	string msg = '' 
	string pro_ptf_path = 'check_path.ptf' 

	//Planesモデルチェック
	if entity_exists(entity('Model','Planes')) > 0 {
		$msg = 'Placesモデルを削除しマクロを実行しますか?'
		$yn = QUERY $msg
		if $yn < 1 {
			return
		} else {
			Call Del_Planes()
		}
	}

	//**ユーザー選択**
	//モデル
	$msg = '参照モデルを選択してください'
	string list models = input entity multiple model $msg
	if is_empty(models) {
		return
	}
	
	//平面高さ
	$msg = '平面高さを入力して下さい'
	real Top = -1
	call InputReal($Msg, Block.Limits.ZMax, $Top )
	if $Top  < 0 {
		return
	}	
	
	//確認
	$msg = '工具 [ ' + $toolname +' ]  高さ [ ' + $Top+' ] で作成しますか?' 
	$yn = QUERY $msg
	if $yn  < 1 {
		return
	}	
	
	//**処理**
	call DialogOff()
	
	//ダミー面作成選択
	call Deactivete_All()
	call Select_Models(models)
	call Setting_Block($Top)
	call Init_Plane($Top)
	EDIT MODEL "Planes" SELECT ALL
	
	//工具
	ACTIVATE TOOL $toolname
	real offset_lng = tool.Diameter / 2 * -1
	
	//チェックパス作成
	call Inport_strategy($pro_ptf_path, $offset_lng) 

	//ダミー面削除
	Call Del_Planes()
	
	call DialogOn()
	
	message info 'Done'
}

//ストラテジー呼び出し・計算
function Inport_strategy(string path, real offsetlng) {
	string newToolpath = new_entity_name('Toolpath')
	
	IMPORT TEMPLATE ENTITY TOOLPATH TMPLTSELECTORGUI $path
	EDIT PAR 'RadialOffset' $offsetlng
	EDIT TOOLPATH SAFEAREA CALCULATE_DIMENSIONS
	EDIT TOOLPATH $newToolpath CALCULATE
	FORM ACCEPT SFPatternProf
	
	string rename = new_entity_name('Toolpath','check')
	RENAME Toolpath $newToolpath $rename
	
	// DRAW Toolpath $rename//表示はお好みで
}

//Planes モデルとレベルの削除
function Del_Planes() {
	DELETE MODEL "Planes"
	DELETE LEVEL "Planes"
}

//ダミー面作成
function Init_Plane(real top) {
	CREATE PLANE ; $top
}

//ブロック修正
function Setting_Block(real top) {
	FORM BLOCK
	EDIT BLOCK ALL UNLOCK
	EDIT BLOCKTYPE BOX
	EDIT BLOCK COORDINATE WORKPLANE
	EDIT BLOCK RESETLIMIT "0"
	EDIT BLOCK TOLERANCE "0.1"
	EDIT BLOCK LIMITTYPE MODEL
	EDIT BLOCK RESET
	EDIT BLOCK ZMAX $top
	BLOCK ACCEPT
	
	EDIT MODEL ALL DESELECT ALL
}

//指定モデル面の選択
function Select_Models(string list models) {
	EDIT MODEL ALL DESELECT ALL
	foreach mdl in $models {
		EDIT MODEL $mdl SELECT ALL
	}
}

//非アクティブ_非表示 - 作業平面は行わない,レベルの非表示は行わない
function Deactivete_All() {
	DEACTIVATE NCPROGRAM
	DEACTIVATE TOOLPATH
	DEACTIVATE TOOL
	DEACTIVATE BOUNDARY
	DEACTIVATE PATTERN
	DEACTIVATE FEATURESET
	DEACTIVATE FEATUREGROUP
	DEACTIVATE LEVEL
	DEACTIVATE STOCKMODEL
	DEACTIVATE GROUP
	
	UNDRAW NCPROGRAM ALL
	UNDRAW TOOLPATH ALL
	UNDRAW TOOL ALL
	UNDRAW BOUNDARY ALL
	UNDRAW PATTERN ALL
	UNDRAW FEATURESET ALL
	UNDRAW FEATUREGROUP ALL
	UNDRAW STOCKMODEL ALL
	UNDRAW GROUP 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
}

ツールパスを作成する工具のコンテキストメニューからの呼び出し用のマクロです。
又、本マクロ以外に「輪郭加工仕上げ」機能を有る程度設定している
ストラテジーファイル(PTFファイル)が同一フォルダ内に必要です。
(ので、他人には全く無意味なマクロになっています)

実際に利用した感じはこちらです。

制限です。
・一時的にPowerMill内で平面を作成し、ツールパスを作成しています。
 最後に全ての一時的な面を削除している為、同機能を使用し作成された面は
 全て削除されてしまいます。

・本ツールパスは「輪郭加工仕上げ」機能を使用し作成されます。
 この機能は参照する面を選択して使用する機能ですが、一時的に作成した面を
 削除して終了する為、ツールパス自体の再計算が出来ません。
 (「送り/速度」「ツールパスコネクター」での再設定は可能です)
 その為、修正が必要な場合はマクロを再実行する必要が有ります。

Igesデータのインポート率改善

ネタ無い以上に、私事が忙しいです。

CATIAからエクスポートしたIgesデータをPowerMillに取り込んで作業するのですが、
導入時からインポート率が悪く、結構悩まされていたのですが、
先日こちらの記述を発見しました。
IGES 内のサーフェスがない PowerMill のインポート時にファイル | PowerMill | Autodesk Knowledge Network
ロボット翻訳の為、怪しげな日本語になっていますが意図は伝わりました。
(ファイルパスまで翻訳されている為、英語の方がわかりやすいかも)

実際に設定してみると、劇的に改善。 面抜けもほぼ無くなり、面の向きも
こちらのマクロでかなりの確立で整うようになりました。
バッチ処理前にマクロでモデルをチェックする - C#ATIA

以前、サポートに聞いても、この設定は教わりませんでした。
(CATIA側はBスプラインで設定した方が良いです。 ・・・他のCADCAMでも。)


又、頑張って英語で質問中。(グーグル先生のお陰です)
[MACRO] Judge that the cancel button is pushed - Autodesk Community
意味伝わるかな? 恐らく答えは出ないような気がしてます。

Tスプライン3

こちらの続きです。
Tスプライン2 - C#ATIA

思ったより手が空かず、未だ完成していません。
(本音は飽きてきた・・・)
f:id:kandennti:20180214190325p:plain
ポリゴンの透過率ですが、僕が試験対策用に表示設定を変更していたのを
すっかり忘れていました。

先日、子供の通う学校のウサギが亡くなったのですが、
原因は野菜価格高騰による餌不足・・・。
こんなところにまで影響があるとは。

Tスプライン2

業務の合間だけですが、順調に育ってます。
f:id:kandennti:20180208184144p:plain
ポリゴンの透過率、何とかならないかな・・・。
裏側まで見えて作業しにくい。

何れ、工業的なものにも挑戦したい気持ちが山々。

Tスプライン

Tスプラインすごいですよね。凄すぎて扱いきれないのでちょっとだけ
練習してみました。

f:id:kandennti:20180206185844p:plain

何だかわからないですよね。 この子の顔です。

f:id:kandennti:20180206185924p:plain

重ねた感じは

f:id:kandennti:20180206190000p:plain

イマイチです。

過去にこちらをUpしたので何処かに書いた記憶なのですが
見つかりません。
GrabCAD - CAD library

リバースエンジニアリングなお仕事は、検査・測定の次にやりたくない業務なのですが
来てしまった場合、仕方なくもがいてやる事になります。
(そんな業務を行っているって宣伝したこと無いのに・・・)

こんな事を書いたのはその為です。
OBJファイルからサーフェス化を挑んでみました - C#ATIA
滑らかさを手に入れる - C#ATIA


ラスタベクタ変換ならぬ、ポリゴンBrep変換ではフリー又はオープンソース
ソフトって無いですね。需要が少ないのが原因なのだろうと思うのですが、
Fusion360のTスプラインを利用すると、「無いよりマシ」のもう一歩先の
「無いより助かる」ぐらいの価値はありそうです。

円錐上の2点間最短経路2

昨日風呂に入る直前に、こちらの問題は
円錐上の2点間最短経路 - C#ATIA
こちらのK係数が原因じゃないかと
K係数 - C#ATIA
思いつきました。

念のため、展開図を描いておきます。
f:id:kandennti:20180201124451p:plain
最短距離の答えは簡単に求められるのですが、3Dで作るのは難しいです。

K係数を直しつつ、半周ずつ作ってくっ付けました。
f:id:kandennti:20180201124526p:plain
前回はお互いに付ける部分が一致しなかったのですが、今回は
上手くいきました。
で、長さを測定してみると(2本のエッジを一度に測定できません)
f:id:kandennti:20180201124538p:plain
42.069+57=99.069・・・20mm近く長いじゃない。

3Dの答えを知っているのでわかるのですが、最短距離は
もっとラインが先端に近いんです。
f:id:kandennti:20180201124550p:plain

Fusion360では、この形状を僕には作れるような気がしないです・・・。

欠けた三面図

劇的に難しかった・・・
f:id:kandennti:20180130173506p:plain
CATIAじゃ成立しない。