MaxScript, как захватить текущее вращение - PullRequest
0 голосов
/ 24 августа 2018

Я впервые пытаюсь написать скрипт для 3ds max.Я пытаюсь установить вращение точки вращения выбранных объектов (90,0,0).До сих пор мне удавалось добавлять 90 к повороту каждый раз, когда я запускаю скрипт.Затем я нашел решение онлайн, но я получаю ошибку: «неизвестное свойство objectoffsetrot».Вот сценарий:

(
    fn RotatePivotOnly obj rotation = (
    local rotValInv=inverse (rotation as quat)
    animate off in coordsys local obj.rotation = RotValInv
    obj.objectoffsetrot *=RotValInv
    obj.objectoffsetpos *= RotValInv
)

fn RotatePivotAbsolute obj rotation =
(
        currentRot=obj.objectoffsetrot as quat
        wantRot = rotation 
        needRot =(currentRot as quat - wantRot as quat) as eulerangles
        RotatePivotOnly obj needRot
)

if (b = selection as array)[1] == undefined then
b = box()

b.pivot=[0,0,0] 
RotatePivotAbsolute b (EulerAngles 90 0 0) 
)

1 Ответ

0 голосов
/ 29 августа 2018

Попробуйте этот двухшаговый метод. Преобразуйте объект, а затем поверните его обратно:

if (b = selection as array)[1] == undefined then
(
b = box()
b.pivot=[0,0,0] 

absrot = eulerAngles 90 0 0
absrotmat = (absrot as quat) as matrix3
b.transform = absrotmat 
b.objectOffsetRot = inverse absrotmat.rotationPart
)
...