1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Не работает цикл "while ... do"!

Тема в разделе "MAXScript", создана пользователем Castello2401, 26 июл 2014.

Модераторы: Savin Denis
  1. Castello2401

    Castello2401 Пользователь сайта

    С нами с:
    08.04.2014
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Хочу реализовать простенький генератор LOD' ов, написал такой скрипт:
    Код:
    fn GenerateLODs obj =
    (
        baseObj = obj
        i = 1
        while baseObj.numfaces >= 300 do
        (
            lodObj = copy baseObj
            addModifier lodObj (MultiRes())
            lodObj.modifiers[#MultiRes].vertexPercent = 50
            lodObj.modifiers[#MultiRes].reqGenerate = true
            convertToMesh lodObj
            lodObj.parent = obj
            lodObj.name = "$lod" + (i as string) + " " + obj.name
       
            baseObj = lodObj
            i += 1
        )
    )
    В итоге получился бесконечный цикл!
    Переменная baseObj.numfaces не изменяется и проверка в теле цикла каждый раз возвращает true. С точки зрения синтаксиса и логики все правильно и должно работать! Почему так?
     
  2. Александр Якушев

    Александр Якушев Активный участник

    С нами с:
    13.08.2009
    Сообщения:
    77
    Симпатии:
    1
    Баллы:
    7
    попробовал так:
    Код:
    fn GenerateLODs obj =
    (
        baseObj = obj
        i = 1
        num = baseObj.numfaces
        while i < 5 do
        (
            lodObj = copy baseObj
            addModifier lodObj (MultiRes())
            lodObj.modifiers[#MultiRes].vertexPercent = 50
            lodObj.modifiers[#MultiRes].reqGenerate = true
            convertToMesh lodObj
            num = lodObj.numfaces
            lodObj.parent = obj
            lodObj.name = "$lod" + (i as string) + " " + obj.name
         
            baseObj = lodObj
            i += 1
            print num
        )
    )
    на сфере возвращает
    Код:
    GenerateLODs $
    960
    960
    960
    960
    960
    тут, может быть, скрипт просто не успевает применять MultiRes()
     
  3. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Я не знаю. Попробуйте такой вариант:
    Код:
    fn GenerateLODs obj =
    (
        baseObj = obj
        i = 1
        while baseObj.numfaces >= 300 do
        (
            lodObj = copy baseObj
            addModifier lodObj (MultiRes());redrawViews()
            lodObj.modifiers[#MultiRes].vertexPercent = 50
            lodObj.modifiers[#MultiRes].reqGenerate = true
            convertToMesh lodObj
            lodObj.parent = obj
            lodObj.name = "$lod" + (i as string) + " " + obj.name
       
            baseObj = lodObj
            i += 1
        )
    )
     
  4. Castello2401

    Castello2401 Пользователь сайта

    С нами с:
    08.04.2014
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Да, действительно, дело оказалось в работе модификатора который долго думает, поэтому вручную все работало. Спасибо.
     
Модераторы: Savin Denis

Поделиться этой страницей