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

C#ATIA

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

Sirenテスト-sweep_vec,sweep_path,loft

こちらの続きで、引き続き思い付くままにテストです。
Sirenテスト-BndBox - C#ATIA

Fillerクラス以外で曲面が作成できそうなOffsetモジュールの
一部をテストしてみました。

#SirenScript
expName = "/SirenTest"
$expIges = ARGV[0] + expName + ".igs"
$expBrep = ARGV[0] + expName + ".brep"
$expDump = ARGV[0] + expName + "_dump.txt"

def wDump(i)
  if i.kind_of?(String)
     open($expDump, "a") {|f| f.write "\r\n" + i}
  end
end

open($expDump, "w") {|f| f.write "start"}

###########
exp_Items=[] #出力面配列

#-sweep_vec-
#第一引数:断面
#第二引数:方向ベクトル
target=Build.arc3p([0, 0, 0], [5, 0, 10], [10, 0, 0])
wDump(target.to_s)
#exp_Items<<target
sv=[3,10,5].to_v
sw_v=Offset.sweep_vec(target,sv)
wDump(sw_v.to_s)
exp_Items<<sw_v


#-sweep_path-
#第一引数:断面(直線のみっぽい)
#第二引数:サポート曲線
target=Build.line([0, 0, 0], [10, 0, 0])
wDump(target.to_s)
#exp_Items<<target
pathwire=Build.arc3p([5, 0, 0], [5, 20, 5], [0, 30, 15])
wDump(pathwire.to_s)
sw_p=Offset.sweep_path(target,pathwire)
wDump(sw_p.to_s)
exp_Items<<sw_p


#-loft-
#第一引数:断面ワイヤー配列(2個以上・エッジ不可)
#第二引数:スムース(bool型) - 省略時 true
#第三引数:ソリッド化(bool型) - 省略時 false
#第四引数:ルールド化(bool型) - 省略時 true
sec1=Build.wire [Build.line([0, 0, 0], [10, 0, 0])],0.01
sec2=Build.wire [Build.line([0, 10, 5], [10, 10, 5])],0.01
sec3=Build.wire [Build.line([0, 20, 0], [10, 20, 0])],0.01
ary=[]
ary=[sec1,sec2,sec3]
wDump(ary.to_s)
#lt=Offset.loft(ary)
lt=Offset.loft(ary,true,false,false)
exp_Items<<lt
wDump(lt.to_s)

###########
com = Build::compound [*exp_Items]
IGES.save [com] , $expIges
BRepIO::save com , $expBrep
wDump("end")

sweep_vec関数は、断面と方向ベクトルの指定だけなので、
直ぐにわかりました。

sweep_path関数は、断面とサポート曲線の指定だけのものは
直ぐにわかりました。(但し、断面が曲線ではエラーとなりました)
C++がよくわかっていないのですが、ソースコードを見ると
第3~6引数まで引数(恐らくLaw関係のパラメータ?)を指定出来る様に
なっている感じがしたのですが、指定するとエラーとなりました。

loft関数は・・・苦戦しました。
第一引数は、ワイヤーの配列が必要で、エッジではエラーとなります。
(これに気が付くのに、時間がかかりました)
第二~四引数は省略可能で、コードに記載された値がデフォルトで
割り当てられます。

結果はこんな感じです。(色はCATIAで付けています)
f:id:kandennti:20160314190959p:plain
重なってしまって申し訳ないのですが、
sweep_vec-オレンジ
sweep_path-紫
loft-緑
です。
loftに関しては、ほとんど諦めかけてましたw