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

Для тех кто может писать скриптеночки

Тема в разделе "MAXScript", создана пользователем -, 5 апр 2003.

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

    Наверное такое можно сделать только скриптом.
    По гроб жизни буду благодарен тому кто поможет.
    Задача состоит в том, что есть некая изогнутая поверхность типа EditblePatch преобразованная в EditableMesh, соответственно она состоит из фейсов попарно соедененных в полигоны (Преобразование НУРВС поверхности дает треугольнае полигоны, это нам не нужно :)).
    Фейсы входящие в полигон имеют некий угол между собой для лучшего сглаживания поверхности...
    Нужно сделать так, чтобы фейсы переместились в одну плоскость, а гнулись между собой только полигоны (4-угольники). И в каждый полигон поверхности поместить бокс где одним из оснований бокса и будет этот выпрямленный полигон.
    Может есть какой 3Д редактор, который работает с многоугольными полигонами и не гнет их по фейсам в изогнутой поверхности?
    Сил моих больше нет подгонять эти кубики вручную..
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Разработка собственного алгоритма тессиляции будет стоить очень не мало

    Чем тебя неустраивает EditPoly + MeshSmooth ??
     
  3. Guest

    Дело в том, что Мах работает с треугольниками (треугольник согнуть нельзя), а полигон с четырьмя углами он гнет пополам по двум фейсам, а мне нужно чтобы эти треклятые четырехугольники оставались прямые...
    Однако спасибо, я подозревал, что это невозможно сделать в Махе, а программы, которая использует в тессиляции многоугольники наверное просто не существует.
     
  4. Guest

    Это просьба, или предложение работы?
     
  5. Guest

    Вообще-то это была просьба помочь...
    Но как я понял, это очень сложно -- не гнуть полигоны...
     
  6. Guest

    В эдит поли есть такая функция, как MakePlanar, но если ею выпрямить один полигон, то другие (соседние) опять расползаются.
    Нельзя ли выпрямленный полигон(ы) зафризить как-нибудь, форма изогнутой поверхности меняется конечно при этом, но небольшие изменения в принципе допускаются.
     
  7. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Да так как ты предложил это сделать сложно тк все взаимосвязанно

    >а программы, которая использует в тессиляции многоугольники наверное >просто не существует.

    такой не встречал и чесно говоря сомневаюсь в возможности произвести таковую на пороизвольной поверхности даже если это возвожно
    то должна получится очень причудливой формы и плотности (ни как не правильные прямоугольники)

    единственное что можно предложить - это разбить поверхность по полигонам
    и выровнять каждый в отдельности

    PS
    Для чего весь этот гимор ?
    И для каких поверхностей ?
     
  8. Guest

    А как тогда отделить фейсы, но не как элементы, а как обьекты и применить к этим каждому из обьектов (не ко всем сразу, а по одному--циклом) модификатор екстрюд?

    ПС Все это нужно для экспорта сложных поверхностей в игровой движок
     
  9. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    obj = $
    extrudeAmount = 10
    -- ==========================================================
    p = convertToPoly(obj)
    fnum = p.EditablePoly.getNumFaces()
    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    polyOp.detachFaces p #(i) asNode:eek:n delete:eek:ff name:fName
    )

    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    p = getNodeByName fName
    p.EditablePoly.SetSelection #Face #{1}
    p.EditablePoly.makePlanar #Face
    p.extrusionType = 0
    p.extrudeFaces extrudeAmount
    )
     
  10. Guest

    Огромнейшее и искреннее спасибо за помощь и потраченное на меня время.
    Еще чуть-чуть вашего внимания, если можно.

    Скрипт спотыкается в нескольких местах. Может быть он написан под 5Мах, а я юзаю 4-й...
    При его исполнении в окне Листенер пишется (я заменил выделенный обьект на box()):
    ____________________________________________________________________
    $Box:Box01 @ [0.000000,0.000000,0.000000]
    10
    $Editable_Poly:Box01 @ [0.000000,0.000000,0.000000]
    -- Unknown property: "getNumFaces" in <MixinInterface:EditablePoly>
    OK
    -- Error occurred in i loop
    -- Frame:
    -- i: 1
    -- fname: "Box01 _Face1"
    -- Unknown property: "SetSelection" in <MixinInterface:EditablePoly>
    OK
    ____________________________________________________________________

    Впрочем фейсы он отделяет, но больше с ними ничего не проискодит. Скрипт застревает на строке:
    p.EditablePoly.SetSelection #Face #{1}

    Я помучался с ним и получился почти модификатор для изготовления гранат РГ-5 :))
    Написан он конечно на уровне уроков с Render.ru, но если вам не трудно помогите воткнуть в него выпрямление фейсов и может быть упростить по "грамматному".
    ____________________________________________________________________

    obj = sphere(); obj.radius=32; obj.segs=12
    select obj

    converttomesh obj

    p = convertToPoly(obj)
    fnum = getNumFaces p

    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    polyOp.detachFaces p #(i) asNode:eek:n delete:eek:ff name:fName
    )
    delete obj

    max select all
    converttomesh $
    aa = selection as array
    for j in aa do
    (
    select j
    subobjectlevel = 3
    for i=1 to (getnumfaces j) do
    (
    select j.faces[#{1..(getnumfaces j)}]
    extrudeface $ #{1..(getnumfaces j)} 2 0.1
    subobjectlevel = 0
    )
    )

    max select all
    addModifier $ (Cap_Holes ())
    converttomesh $
    clearSelection()
    _______________________________________________________________


    И еще один вопрос. Почему не работает такой вариант c отделением треугольных фейсов для ЕдитейблМеш:

    p = convertToMesh $
    fnum = getNumFaces p

    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    MeshOp.detachFaces p #(i) asMesh:eek:n delete:eek:ff name:fName
    )

    И еще раз ОГРОМНОЕ, ОГРОМНОЕ СПАСИБО!!!
     
  11. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    -- For Max 4.2
    -- -------------------
    obj = $
    extrudeAmount = 10
    -- ==========================================================
    p = convertToPoly(obj)
    fnum = (getPolygoncount p)[1]
    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    polyOp.detachFaces p #(i) asNode:eek:n delete:eek:ff name:fName
    )

    for i = 1 to fnum do
    (
    local fName = obj.name + " _Face" + (i as string)
    p = getNodeByName fName
    select p.faces[#{1}]
    p.EditablePoly.makePlanar 3
    p.extrusionType = 0
    p.extrudeFaces extrudeAmount
    )



    --------------------------------------------------------------------------------------------------------------------
    >И еще один вопрос. Почему не работает такой вариант c отделением треугольных фейсов для ЕдитейблМеш:

    Потому что реализация функций для EditableMesh очень убогая
    только в EditPoly более менее полно реализованны функции
    дублирующие интерфейс
     
  12. Guest

    Огромнейшее Спасибо за конкретную помощь, все наконец-то заработало.
     
Модераторы: Savin Denis

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