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

Елементы

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

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

    Подскажите пожалуйста:
    Как отделить елементы Editable Mesh обьекта в отдельные меши?

    __________________________________________________________________
    То Denis: Вообще-то это продолжение прошлой темы, но я посчитал, что она закрыта и Вы больше в нее не загляните.
     
  2. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    -- Detach Faces in editMesh
    p = Plane length:139.13 width:134.015 pos:[-28.133,12.7877,0] isSelected:eek:n
    p = convertTo p TriMeshGeometry
    t = meshop.detachFaces p #{2} asMesh:eek:n
    setMesh (m = mesh transform:(p.transform) /*Name:"Name_Face1"*/) t
    update m
     
  3. Guest

    Очень признателен за ваши ответы!!!
    Даже как-то неудобно быть столь навязчивым, но просто больше неоткуда ждать помощи. А проблема вот в чем.
    В Махе скрипты прекрасно работают, но вот при экспорте в игровой *.мар файл для программы Quark, некоторые (%10) обьектов исчезают, уменьшаются, разваливаются на инвалидные фейсы или путают координаты наложения текстур.
    Это, в принципе, происходило и при ручном отделении и экструдировании полигонов, в чем причина - одному процессору известно.

    Сейчас я попробовал через частицы PArray где ParticleType - facing и далее Snapshot-ом создать обьект. Обьект тип:EditableMesh получился с уже выдавленными и отделенными фейсами, но возникла новая проблема, все они являются Елементами одного обьекта, а так как это один обьект у него куча нормалей и он вообще не экспортируется.
    Вот как бы мне их отделить от обьекта? уже не полигоны a элементы.

    Хотел сам попробовать написать скрипт по аналогии с тем что у меня уже есть, в смысле ваши скрипты, но ничего не вышло. Нашел в хелпе только одну опцию связанную с элементами: meshop.getElementsUsingFace(), но как я понял она лишь возвращает число фейсов во всех элементах обьекта.

    Очень, очень надеюсь на вашу помощь!
     
  4. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    >некоторые (%10) обьектов исчезают, уменьшаются, разваливаются на инвалидные фейсы или путают координаты наложения текстур.

    возможно проблема в том что некоторые обьекты были в маштабе
    (изменены с помощью Scale) или отражены с помощью Mirror
    в первом случае поможет ResetXForm с послед Коллапсом
    в топике Mirror а дававл скрипт который должен помочь в обоих случаях

    >Сейчас я попробовал через частицы PArray где ParticleType - facing и далее Snapshot-ом создать обьект. Обьект тип:EditableMesh получился с уже выдавленными и отделенными фейсами, но возникла новая проблема, все они являются Елементами одного обьекта, а так как это один обьект у него куча нормалей и он вообще не экспортируется.
    Вот как бы мне их отделить от обьекта? уже не полигоны a элементы


    Если ты имеш в виду ParticleType - Fragments
    то их можно выделить по Id матерьяла тк каждому привается свой ID
    $.EditablePoly.selectByMaterial 2
     
  5. Guest

    Крутил вертел со вчерашнего дня, ничего не получается, единственное, что получилось это выделять элементы с указанным ID, а не отделять элементы от обьекта.
    Как я понял нужно найти кол-во ID групп в обьекте и номера фейсов к которым он применен, и тогда подставив в прошлые скрипты эти переменные можно отделить фейсы по ID как елементы. Но в хелпе по скриптам я не нашел нужных опций для Poly или Mesh. Может, конечно плохо искал, беда с английским... :((
     
  6. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    просто получаеш массив выделенных файсов
    и передаеш в Detach
    если выделленых не оказалось - выходиш из цикла
     
  7. Guest

    Вот, получилась часть скрипта:

    obj = $
    p = convertToPoly(obj)

    bb = 1
    $.EditablePoly.selectByMaterial bb
    aa = getfaceSelection p
    polyOp.detachFaces p aa asNode:eek:n delete:eek:ff

    но он отделяет элемент с введенным ID, а это похоже на ручное отделение. Как зациклить переменную bb, чтобы он отделял каждый раз елемент с новым ID?
     
  8. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    obj = $
    p = convertToPoly(obj)
    bb =1
    while on do(
    $.EditablePoly.selectByMaterial bb
    aa = getfaceSelection p
    if aa.count == 0 do exit
    polyOp.detachFaces p aa asNode:eek:n delete:eek:ff
    bb += 1
    )
     
  9. Guest

    Спасибо за подсказку, но при исполнении скрипта виснет Мах. Я покавырялся получилось вот что:
    obj = $
    p = convertToPoly(obj)
    fnum = (getPolygoncount p)[1]
    bb = 0
    n = 1
    for i = 1 to fnum/n do
    (
    while bb < fnum/n do
    (
    bb += 1
    print bb
    $.EditablePoly.selectByMaterial bb
    aa = getfaceSelection p
    print aa
    polyOp.detachFaces p aa asNode:eek:n delete:eek:ff
    )
    )

    Только он работает если все элементы с одинаковым кол-вом фейсов. Да черт с ним, "устал" уже.

    И,наверное, самый последний вопрос по этой теме. Какой опцией с_weld_ить вершины #{4..6} в меше или в поли?
     
  10. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    obj = $
    p = convertToPoly(obj)
    bb =1
    while on do(
    p.EditablePoly.selectByMaterial bb
    aa = getfaceSelection p
    if aa.isEmpty do exit
    polyOp.detachFaces p aa asNode:eek:n delete:eek:ff
    bb += 1
    )

    >И,наверное, самый последний вопрос по этой теме. Какой опцией >с_weld_ить вершины #{4..6} в меше или в поли?
    мог бы и сам в хелп заглянуть

    polyOp.weldVertsByThreshold <Poly poly> <vertlist>

    Welds the specified vertices that are within the threshold distance. The threshold distance is a property (weldThreshold) of the editable poly. Only vertices on a border can be welded.

    polyOp.weldVerts <Poly poly> <int vert1> <int vert2> <point3 location> node:<node=unsupplied>

    Welds the two specified vertices, with the resulting vertex positioned at the specified location. Only vertices on a border can be welded.
     
Модераторы: Savin Denis

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