C#ATIA

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

siren v0.14 NURBS曲線2

こちらの続きです。
siren v0.14 NURBS曲線 - C#ATIA

以前はIgesを読み込み、読み込んだ曲線をそのまま書き出していましたが
今度は読み込んだ曲線から各要素を読み取り、コントロールポイントのみを2倍にし
新たな曲線をsirenで作成し書き出してみました。

#!siren
# coding: utf-8
include Siren

fName = "/nurbs5"
$inPath = ARGV[0] + fName + ".igs"
$exPath = ARGV[0] + fName + "-res.igs"
$dpPath = ARGV[0] + fName + "_dump.txt"

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

def Pause()
	str = gets
end

wDump("start")
###########

shp = Siren.load_model $inPath
wDump(shp.to_s)

degree = shp.curve.degree
wDump(degree.to_s)

knots = shp.curve.knots
wDump(knots.to_s)

mults = shp.curve.mults
wDump(mults.to_s)

poles = shp.curve.poles
wDump(poles.to_s)

poles2 = poles.map{ |n| n.map{ |p| p * 2 }}
wDump(poles2.to_s)

weights = shp.curve.weights
wDump(weights.to_s)

crv= Siren.bscurve degree, knots, mults, poles2, weights
Siren.save_model crv, $exPath

###########
wDump("end")
puts "done."
Pause()

書き出したIgesと元の曲線を比べた結果がこちら
f:id:kandennti:20170808190305p:plain
黄色が元の曲線で、水色が2倍な曲線です。(原点で2倍のスケーリングで一致します)

出来てる・・・結構苦労したので、他人には伝わらないと思いますが
感動してます。

でも、multsの説明書きが一致していないような・・・単に理解できていないだけかな?