CS + MAXScript = ?
- Автор темы Nail
- Дата создания
Благодарю, нашел.
Теперь интересует как вытащить длину анимации из bip'а?
Она нужна для того чтоб можно было отрезать лишние кадры в сцене так, чтоб количество кадров в сцене = количество кадров в анимации bip'а.
Nail.
PS В хелпе нашел только как установить количество кадров в сцене:
animationRange=interval 0 x
где X = № последнего кадра.
Теперь интересует как вытащить длину анимации из bip'а?
Она нужна для того чтоб можно было отрезать лишние кадры в сцене так, чтоб количество кадров в сцене = количество кадров в анимации bip'а.
Nail.
PS В хелпе нашел только как установить количество кадров в сцене:
animationRange=interval 0 x
где X = № последнего кадра.
- Рейтинг
- 138
Эта функция должна помочь:
getTimeRange <controller> [ #selOnly ] [ #allKeys ] [ #children ]
Returns a time Interval value specifying the range of time covered by keys in the controller. The optional symbolic arguments specify options:
#selOnly: return the time range covered by the currently selected keys (in the track view)
#allKeys (default): the time range for all keys in the controller
#children: descends into sub-controllers and returns the total time interval covering all keys in all sub-controllers
getTimeRange <controller> [ #selOnly ] [ #allKeys ] [ #children ]
Returns a time Interval value specifying the range of time covered by keys in the controller. The optional symbolic arguments specify options:
#selOnly: return the time range covered by the currently selected keys (in the track view)
#allKeys (default): the time range for all keys in the controller
#children: descends into sub-controllers and returns the total time interval covering all keys in all sub-controllers
Спасибо.
Нельзя ли указать, что не так:
Имеем сцену с бипедом с интервалом таймлайна 0 100(по умолчанию).
У анимации бипеда интервал 0 48.
Объект 'bip01 Head' имеет ключи анимации в кадрах с 0 до 48.
Выделив 'bip01 Head' на команды
getTimeRange $'bip01 Head'.controller #selOnly
или
getTimeRange $'bip01 Head'.transform.controller #selOnly
расчитывал получить значение: interval 0 48
выдало же:
(interval -1.34218e+007f -1.34218e+007f)
Если не так, тогда как?
Нельзя ли указать, что не так:
Имеем сцену с бипедом с интервалом таймлайна 0 100(по умолчанию).
У анимации бипеда интервал 0 48.
Объект 'bip01 Head' имеет ключи анимации в кадрах с 0 до 48.
Выделив 'bip01 Head' на команды
getTimeRange $'bip01 Head'.controller #selOnly
или
getTimeRange $'bip01 Head'.transform.controller #selOnly
расчитывал получить значение: interval 0 48
выдало же:
(interval -1.34218e+007f -1.34218e+007f)
Если не так, тогда как?
Не, это не то.
Начиная с pos и дальше это лишнее и не обрабатывается.
Перерыв хелп так и не нашел как правильно.
Исходя из примера в конце раздела Controller Time Functions
(
b=box height:10
at time 5 animate on b.height=50
at time 10 animate on b.height=100
bhc=b.height.controller
bhk=bhc.keys
supportstimeoperations bhc
deletetime bhc 4 5
bhk
deletetime bhc 4 5 #incLeft
bhk
deletetime bhc 1 4 #noslide
bhk
at time 5 animate on b.height=50
deletetime bhc (interval 5 8) #incLeft
bhk
at time 10 animate on b.height=150
for k in bhk do format "%:%\n" k.time k.value
reversetime bhc 5 15 #incLeft #incRight
for k in bhk do format "%:%\n" k.time k.value
insertTime bhc 12 5
bhk
getTimeRange bhc
)
, должно было работать то, что я и раньше писал:
getTimeRange $'bip01 Head'.controller
ну или
bo = $'bip01 Head'
bc = bo.transform.controller
getTimeRange bc
но не работает, черт его дери!
Точнее работает, но не так как хотелось бы.
Указанный пример я прогнал, он работает - команда getTimeRange bhc выдает
(interval 0f 20f).
Чтож, попытаюсь разобраться, что же в этом примере такого есть, что он нормально работает.
Или может дело в специфичности Бипеда, и то что работает с кубиком с бипедом не пашет?...
Начиная с pos и дальше это лишнее и не обрабатывается.
Перерыв хелп так и не нашел как правильно.
Исходя из примера в конце раздела Controller Time Functions
(
b=box height:10
at time 5 animate on b.height=50
at time 10 animate on b.height=100
bhc=b.height.controller
bhk=bhc.keys
supportstimeoperations bhc
deletetime bhc 4 5
bhk
deletetime bhc 4 5 #incLeft
bhk
deletetime bhc 1 4 #noslide
bhk
at time 5 animate on b.height=50
deletetime bhc (interval 5 8) #incLeft
bhk
at time 10 animate on b.height=150
for k in bhk do format "%:%\n" k.time k.value
reversetime bhc 5 15 #incLeft #incRight
for k in bhk do format "%:%\n" k.time k.value
insertTime bhc 12 5
bhk
getTimeRange bhc
)
, должно было работать то, что я и раньше писал:
getTimeRange $'bip01 Head'.controller
ну или
bo = $'bip01 Head'
bc = bo.transform.controller
getTimeRange bc
но не работает, черт его дери!
Точнее работает, но не так как хотелось бы.
Указанный пример я прогнал, он работает - команда getTimeRange bhc выдает
(interval 0f 20f).
Чтож, попытаюсь разобраться, что же в этом примере такого есть, что он нормально работает.
Или может дело в специфичности Бипеда, и то что работает с кубиком с бипедом не пашет?...
- Рейтинг
- 138
Дело все в том что у бипеда свой навороченный контроллер
который не дает доступ к внутреним контролерам
так что подобратся к ключам нет возможности
можно пойти другим путем - слить ключи в новый временный контроллер:
bip = $.controller
b=bezier_position()
biped.createPosSubAnims bip b true
getTimeRange b #children
НО Работать будет только in character studio 4 !!!!
который не дает доступ к внутреним контролерам
так что подобратся к ключам нет возможности
можно пойти другим путем - слить ключи в новый временный контроллер:
bip = $.controller
b=bezier_position()
biped.createPosSubAnims bip b true
getTimeRange b #children
НО Работать будет только in character studio 4 !!!!
Запустил код, открыл Track View, нашел добавленный контроллер bezier_position, но он пустой - без ключей.
Все ключи выше по дереву - в .transform.horizontal, но к ним, похоже, доступа нет.
Попробую поискать в хелпе по ключам что нить, поскольку добавив в bezier_position вручную ключи я смог получить с них интервал анимации через
с = $'Bip01.controller.Biped_SubAnim.controller.BipPositionList.controller.Bezier_Position.controller
getTimeRange с #children
Все ключи выше по дереву - в .transform.horizontal, но к ним, похоже, доступа нет.
Попробую поискать в хелпе по ключам что нить, поскольку добавив в bezier_position вручную ключи я смог получить с них интервал анимации через
с = $'Bip01.controller.Biped_SubAnim.controller.BipPositionList.controller.Bezier_Position.controller
getTimeRange с #children
- Рейтинг
- 138
Огромнейшее спасибо!
Особенно за терпение
Ну и за функцию - сам бы не дошел, поскольку от программерства далеко.
Все получилось, правда пришлось разобраться что к чему, и привести функцию к рабочему состоянию.
Вот что получилось в итоге:
-- Load .bip & Range Animation v1.03
fn bipGetTime bip =
(
bipVertCont = bip.transform.controller.vertical.controller
i = 1
while true do
(
try k = biped.getKey bipVertCont i
catch exit
i += 1
)
ftime = k.time
ftime
)
if $Bip01 == undefined then
(
messageBox "No Biped in scene or Biped root name no 'Bip01' !" title: "Error"
)
else
(
if (getFiles "c:\\test.bip").count == 0 then
(
messageBox "Not found Bip File !" title: "Error"
)
else
(
biped.LoadBipFile $Bip01.controller "c:\\test.bip"
lastFrame = bipGetTime $Bip01
animationRange = interval 0f lastFrame
)
)
--
Еще раз спасибо за помощь.
Удачи!
Nail.
Особенно за терпение
Ну и за функцию - сам бы не дошел, поскольку от программерства далеко.
Все получилось, правда пришлось разобраться что к чему, и привести функцию к рабочему состоянию.
Вот что получилось в итоге:
-- Load .bip & Range Animation v1.03
fn bipGetTime bip =
(
bipVertCont = bip.transform.controller.vertical.controller
i = 1
while true do
(
try k = biped.getKey bipVertCont i
catch exit
i += 1
)
ftime = k.time
ftime
)
if $Bip01 == undefined then
(
messageBox "No Biped in scene or Biped root name no 'Bip01' !" title: "Error"
)
else
(
if (getFiles "c:\\test.bip").count == 0 then
(
messageBox "Not found Bip File !" title: "Error"
)
else
(
biped.LoadBipFile $Bip01.controller "c:\\test.bip"
lastFrame = bipGetTime $Bip01
animationRange = interval 0f lastFrame
)
)
--
Еще раз спасибо за помощь.
Удачи!
Nail.
Будут проблемы - верну
А вообще я погонял скрип при разных условиях, в том числе и сразу после загрузки МАКСа. Кстати, совсем дилетантский вопрос (что-то не нашел в хелпе) - как переменные сбросить без перезапуска МАКСа?).
В общем - работает отлично.
Я так понял К перед циклом нужна была для инициализации, но, похоже, в МАХСкрипт можно инициализировать переменную сразу при ее использовании.
А вообще я погонял скрип при разных условиях, в том числе и сразу после загрузки МАКСа. Кстати, совсем дилетантский вопрос (что-то не нашел в хелпе) - как переменные сбросить без перезапуска МАКСа?).
В общем - работает отлично.
Я так понял К перед циклом нужна была для инициализации, но, похоже, в МАХСкрипт можно инициализировать переменную сразу при ее использовании.