こちらの続きです。
siren v0.13 線の種類を判断したい - C#ATIA
業務が忙しく・・・。
こんな感じのデータを作り、Igesでエクスポート。
"直線" "円弧" "曲線" "点" "サーフェス" "ソリッド" が
混在しています。 この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をインポートすると
判断も出来てます。
本当は ".edge_type" みたいにしたいんだけどなぁ。