3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

Nurbsカーブの座標値を保存して適用

前回ののNurbsCurveバージョン。
いやー、迷った。
NURBSは上手く数値が入ってくれなかったので古典的な方法でSetしてる。

何がしたいかっていうと、
・キャッシュの数値を保存(ワールド座標)
・キャッシュをなしのものに適用する。

但しこの数値をcvにそのまま適用はできない。
するとcvの座標 + 取得した座標になってしまうのでどんどん伸びてっちゃう。

ので古典的にmoveでワールド座標を指定して移動させてます。

説明下手で申し訳ない…が遅いので寝ますー。

inFrame  = 1
outFrame = 300

def getVertexPosition(inFrame,outFrame):
    global getMesh
    global data
    data = []
    getMesh = (pm.ls(sl=True,typ='transform')[0]).getShape()
    saveTime = inFrame
    for i in xrange(outFrame+1 - inFrame):
        data.append(getMesh.getCVs(space='preTransform'))
        saveTime += 1
        pm.currentTime(saveTime,e=True)
    pm.currentTime(inFrame,e=True)
getVertexPosition(inFrame,outFrame) 

def setVertexPosition(data,inFrame):
    saveTime = inFrame
    curveNumCV = getMesh.numCVs()
    for i in data:
        for j in range(curveNumCV):
            pm.select(getMesh.cv[j])
            pm.move(i[j],ws=True)
            pm.setKeyframe(breakdown=False,hierarchy='none',controlPoints=False,shape=False)
        saveTime += 1
        pm.currentTime(saveTime,e=True)
    pm.currentTime(inFrame,e=True)
    del data
setVertexPosition(data,inFrame)