не пойму в чем дело, написал функцию удаления костей из скина
на входе подаю массив из индексов удаляемых костей и скина
по операциям если идти - все работет
а так - нет
если кто поможет понять что не так, буду признателен, уже мозг себе весь сломал 🙂 толи чего-то не вижу толи этого и нельзя сделать... 🙁
_________________
fn RemBnLstFromSkin BnArray SkinMod =
(
RemovingBones = for i = 1 to BnArray.count collect SkinOps.GetBoneName SkinMod BnArray 0 -- collect removing bones names in array
bi = 1
for i = 1 to BnArray.count do -- go by bones ID
(
do -- loop while bone ID (bi) less than number of bones in skin
(
if (SkinOps.GetBoneName SkinMod bi 0) == RemovingBones -- test bones name that should be removed with bone in current loop iteration
then
(
SkinOps.removeBone SkinMod bi
--exit --with messagebox "exit"
)
else bi +=1
)while (bi > (skinOps.getNumberBones SkinMod))
)
fn RemBnLstFromSkin BnArray SkinMod =
(
RemovingBones = for i = 1 to BnArray.count collect SkinOps.GetBoneName SkinMod BnArray[i] 0 -- collect removing bones names in array
bi = 1
for i = 1 to BnArray.count do -- go by bones ID
(
do -- loop while bone ID (bi) less than number of bones in skin
(
if (SkinOps.GetBoneName SkinMod bi 0) == RemovingBones[i] -- test bones name that should be removed with bone in current loop iteration
then
(
SkinOps.removeBone SkinMod bi
--exit --with messagebox "exit"
format "Remove: %\n" bi
)
else bi +=1
)while (bi < (skinOps.getNumberBones SkinMod))
)
)
1) Как минимум ошибка в условии while - знак >
2) скорее всего вместо while нужен for или сбросить bi = 1
3) Скрипт посути ничего не делает с таким же успехом мог сразу в цикле по масиву индексов удалять кости, так как ты далее по именам находиш теже самые индексы
fn RemBnLstFromSkin BnArray SkinMod =
(
-- Get the names of the bones...
local lstBoneNames = for i = 1 to BnArray.count collect SkinOps.GetBoneName SkinMod BnArray[i] 0
-- Open the modify panel and select the skin modifier
max modify mode
modPanel.setCurrentObject SkinMod ui:true
-- Starting bone index
local iSkinBone = 1
-- Loop through until we reach the end
-- The bone list is dynamic so we need to do
-- a check on every loop
while iSkinBone <= (SkinOps.getNumberBones skinMod) do
(
-- Get the name of the bone at the appropriate index
local sBoneName = SkinOps.GetBoneName SkinMod iSkinBone 0
-- Check to see if the name is in our name array
local iIndex = findItem lstBoneNames sBoneName
-- Check...
if iIndex > 0 then
(
-- Kill it...
SkinOps.removeBone SkinMod iSkinBone
-- This is the funny part. If we delete a bone, all the items in the
-- skinops bone array move up by one, so we don't need to
-- change the iSkineBone index!!
) else iSkinBone += 1
)
)
в цикле по индексам я не мог потому что как только ты удаляешь одну кость, список уменьшается, и все кости смещают вверх.
Понятно такбы сразу и сказал, я то голову ломал зачем такие извращения.
Тогда это делается так:
fn RemBnLstFromSkin BnArray SkinMod =
(
max modify mode
modPanel.setCurrentObject SkinMod ui:false
sort BnArray
for i = BnArray.count to 1 by -1 do SkinOps.removeBone SkinMod BnArray[i]
)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
М Т (McST)
на входе подаю массив из индексов удаляемых костей и скина
по операциям если идти - все работет
а так - нет
если кто поможет понять что не так, буду признателен, уже мозг себе весь сломал 🙂 толи чего-то не вижу толи этого и нельзя сделать... 🙁
_________________
fn RemBnLstFromSkin BnArray SkinMod =
(
RemovingBones = for i = 1 to BnArray.count collect SkinOps.GetBoneName SkinMod BnArray 0 -- collect removing bones names in array
bi = 1
for i = 1 to BnArray.count do -- go by bones ID
(
do -- loop while bone ID (bi) less than number of bones in skin
(
if (SkinOps.GetBoneName SkinMod bi 0) == RemovingBones -- test bones name that should be removed with bone in current loop iteration
then
(
SkinOps.removeBone SkinMod bi
--exit --with messagebox "exit"
)
else bi +=1
)while (bi > (skinOps.getNumberBones SkinMod))
)
)
________________
Savin Denis
1) Как минимум ошибка в условии while - знак >
2) скорее всего вместо while нужен for или сбросить bi = 1
3) Скрипт посути ничего не делает с таким же успехом мог сразу в цикле по масиву индексов удалять кости, так как ты далее по именам находиш теже самые индексы
М Т (McST)
вопрос решен 🙂
в цикле по индексам я не мог потому что как только ты удаляешь одну кость, список уменьшается, и все кости смещают вверх.
М Т (McST)
спасибо некоему RustyKnight из Австралии
Savin Denis
Тогда это делается так:
М Т (McST)
удалять с конца... :\ как же это я не додумался 🙂
да, так даже проще получается.
спасибо