C#ATIA

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

siren v0.13 線の種類を判断する

こちらの続きです。
siren v0.13 線の種類を判断したい - C#ATIA

業務が忙しく・・・。
こんな感じのデータを作り、Igesでエクスポート。
f:id:kandennti:20170801202910p:plain
"直線" "円弧" "曲線" "点" "サーフェス" "ソリッド" が
混在しています。 このIgesから境界線等ではない
純粋な線の要素を抜き出します。

又、抜き出した線の種類を標準出力に表示します。

#Siren_script Export_Curve_Test
include Siren

fName = "/curves"
$inPath = ARGV[0] + fName + ".igs"
$exPath = ARGV[0] + fName + "-res.igs"

def Pause()
	print "押して!"
	str = gets
end

def GetEdgeType(shp)
	return unless shp.edge?
	begin
		return "curve" unless shp.nurbs_def.size < 1
	rescue
	end
	
	begin
		return "line" if shp.to_pts.size < 3
	rescue
	end
	
	return "circle"
end

###########
comp = Siren.load_model $inPath
p "total_edges : " + comp.edges().size.to_s

edgelst = comp.to_a.select { |x|
	x.edge? == true
}

edgelst = edgelst + comp.to_a.select { |x|
	x.wire? == true
}.edges.flatten

p "**************"
edgelst.each{|x|
	print x.to_s + "" +  GetEdgeType(x) + " です\n"
}

cmp = edgelst.to_comp

begin
	Siren.save_model cmp , $exPath
rescue
	p "export errer!"
end
 
###########
puts "done."
Pause()

悩んだ挙句、GetEdgeType関数を作り、各メソッドが成功するか?どうか?
で線のタイプを判断する と言うかなりベタな方法しか思い付かない
上に、Rubyっぽさの微塵も感じないコードになりました。
(本来なら、もっと素敵なコードで実現できるはず・・・)

実行結果はこちらで、出来上がったIgesをインポートすると
f:id:kandennti:20170801202921p:plain
判断も出来てます。
本当は ".edge_type" みたいにしたいんだけどなぁ。