読者です 読者をやめる 読者になる 読者になる

C#ATIA

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

Sirenテスト-sewing,fix

こちらの続きです。
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関数が有った事に、今気が付く・・・)

ビュアーで表示させると
f:id:kandennti:20160308145409p:plain
お、2つの面がちゃんとくっ付いてる と思ったのですが、
CATIAで開くと
f:id:kandennti:20160308145419p:plain
やっぱり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"

で、結果はこちら
f:id:kandennti:20160308145450p:plain
ん? わかりにくいのでouterwire部分は緑にしてみました。
ちょっと思っていた結果と違う。こんな感じになると
思っていたんですけどね。
f:id:kandennti:20160308145501p:plain

試しに、sewingする順番を入れ替えて

・・・
sh=Heal.fix(Build.sewing [pol2,pol1] , tol=0.001)
・・・

実行した結果は
f:id:kandennti:20160308145517p:plain
さっきとも違いました。 ん~バグっぽいかな?