こちらの続きです。
Sirenテスト-polyline - C#ATIA
CATIAの接合コマンドのような感じかと思い、Buildモジュールの
sewingをテスト。 隣合った、曲率一致する複数の面が、
一枚になるのかな?
#SirenScript expFileName = ARGV[0] + "/shape.igs" expDunp = ARGV[0] + "/dump.txt" pts=[] pts.push([0 , 0 , 0]) pts.push([2 , 0 , 0]) pts.push([0 , 2 , 0]) pol1=Build.polygon pts , true pts=[] pts.push([4 , 0 , 0]) pts.push([2 , 0 , 0]) pts.push([0 , 2 , 0]) pol2=Build.polygon pts, true sh=Build.sewing [pol1,pol2] open(expDunp, "w") {|f| f.write sh.to_s} IGES.save [sh] , expFileName BRepIO::save sh, ARGV[0] + "/result.brep" puts "OK"
自宅で試すと、Fusion360かOnShapeで確認する事になるのですが、
両方ともファイルをUpさせたりして手間がかかる上、時間もかかる。
BRepフォーマットであれば、sirenのビュアーで表示できる為、BRepも
保存する事にしました。
(BRepIOにdump関数が有った事に、今気が付く・・・)
ビュアーで表示させると
お、2つの面がちゃんとくっ付いてる と思ったのですが、
CATIAで開くと
やっぱり2枚の面のままでした。
Healモジュールにfix関数の説明書きがちょっと魅力的だったので
下記の様に変更。
・・・ sh=Heal.fix(Build.sewing [pol1,pol2] , tol=0.001) ・・・
結果は同じ。 シェル化(又はソリッド化)する際の微妙な繋ぎ目を
修復するための関数なのでしょう、きっと。
Healモジュールにouterwire関数が有ったので、ここで外側の境界を
取得し、再度面を作成すれば良いのかな? と思い、
まず、outerwireを取得するように変更。
・・・ sh=Heal.fix(Build.sewing [pol1,pol2] , tol=0.001) outer=Heal.outerwire sh com = Build::compound [sh,outer] open(expDunp, "w") {|f| f.write sh.to_s} IGES.save [com] , expFileName BRepIO::save com, ARGV[0] + "/result.brep" puts "OK"
で、結果はこちら
ん? わかりにくいのでouterwire部分は緑にしてみました。
ちょっと思っていた結果と違う。こんな感じになると
思っていたんですけどね。
試しに、sewingする順番を入れ替えて
・・・ sh=Heal.fix(Build.sewing [pol2,pol1] , tol=0.001) ・・・
実行した結果は
さっきとも違いました。 ん~バグっぽいかな?