Наверное такое можно сделать только скриптом.
По гроб жизни буду благодарен тому кто поможет.
Задача состоит в том, что есть некая изогнутая поверхность типа EditblePatch преобразованная в EditableMesh, соответственно она состоит из фейсов попарно соедененных в полигоны (Преобразование НУРВС поверхности дает треугольнае полигоны, это нам не нужно 🙂).
Фейсы входящие в полигон имеют некий угол между собой для лучшего сглаживания поверхности...
Нужно сделать так, чтобы фейсы переместились в одну плоскость, а гнулись между собой только полигоны (4-угольники). И в каждый полигон поверхности поместить бокс где одним из оснований бокса и будет этот выпрямленный полигон.
Может есть какой 3Д редактор, который работает с многоугольными полигонами и не гнет их по фейсам в изогнутой поверхности?
Сил моих больше нет подгонять эти кубики вручную..
Дело в том, что Мах работает с треугольниками (треугольник согнуть нельзя), а полигон с четырьмя углами он гнет пополам по двум фейсам, а мне нужно чтобы эти треклятые четырехугольники оставались прямые...
Однако спасибо, я подозревал, что это невозможно сделать в Махе, а программы, которая использует в тессиляции многоугольники наверное просто не существует.
В эдит поли есть такая функция, как MakePlanar, но если ею выпрямить один полигон, то другие (соседние) опять расползаются.
Нельзя ли выпрямленный полигон(ы) зафризить как-нибудь, форма изогнутой поверхности меняется конечно при этом, но небольшие изменения в принципе допускаются.
Да так как ты предложил это сделать сложно тк все взаимосвязанно
>а программы, которая использует в тессиляции многоугольники наверное >просто не существует.
такой не встречал и чесно говоря сомневаюсь в возможности произвести таковую на пороизвольной поверхности даже если это возвожно
то должна получится очень причудливой формы и плотности (ни как не правильные прямоугольники)
единственное что можно предложить - это разбить поверхность по полигонам
и выровнять каждый в отдельности
PS
Для чего весь этот гимор ?
И для каких поверхностей ?
А как тогда отделить фейсы, но не как элементы, а как обьекты и применить к этим каждому из обьектов (не ко всем сразу, а по одному--циклом) модификатор екстрюд?
ПС Все это нужно для экспорта сложных поверхностей в игровой движок
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😮n delete😮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
)
Огромнейшее и искреннее спасибо за помощь и потраченное на меня время.
Еще чуть-чуть вашего внимания, если можно.
Скрипт спотыкается в нескольких местах. Может быть он написан под 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, но если вам не трудно помогите воткнуть в него выпрямление фейсов и может быть упростить по "грамматному".
____________________________________________________________________
for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
polyOp.detachFaces p #(i) asNode😮n delete😮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😮n delete😮ff name:fName
)
-- 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😮n delete😮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 более менее полно реализованны функции
дублирующие интерфейс
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Гость
По гроб жизни буду благодарен тому кто поможет.
Задача состоит в том, что есть некая изогнутая поверхность типа EditblePatch преобразованная в EditableMesh, соответственно она состоит из фейсов попарно соедененных в полигоны (Преобразование НУРВС поверхности дает треугольнае полигоны, это нам не нужно 🙂).
Фейсы входящие в полигон имеют некий угол между собой для лучшего сглаживания поверхности...
Нужно сделать так, чтобы фейсы переместились в одну плоскость, а гнулись между собой только полигоны (4-угольники). И в каждый полигон поверхности поместить бокс где одним из оснований бокса и будет этот выпрямленный полигон.
Может есть какой 3Д редактор, который работает с многоугольными полигонами и не гнет их по фейсам в изогнутой поверхности?
Сил моих больше нет подгонять эти кубики вручную..
Savin Denis
Чем тебя неустраивает EditPoly + MeshSmooth ??
Гость
Однако спасибо, я подозревал, что это невозможно сделать в Махе, а программы, которая использует в тессиляции многоугольники наверное просто не существует.
Гость
Гость
Но как я понял, это очень сложно -- не гнуть полигоны...
Гость
Нельзя ли выпрямленный полигон(ы) зафризить как-нибудь, форма изогнутой поверхности меняется конечно при этом, но небольшие изменения в принципе допускаются.
Savin Denis
>а программы, которая использует в тессиляции многоугольники наверное >просто не существует.
такой не встречал и чесно говоря сомневаюсь в возможности произвести таковую на пороизвольной поверхности даже если это возвожно
то должна получится очень причудливой формы и плотности (ни как не правильные прямоугольники)
единственное что можно предложить - это разбить поверхность по полигонам
и выровнять каждый в отдельности
PS
Для чего весь этот гимор ?
И для каких поверхностей ?
Гость
ПС Все это нужно для экспорта сложных поверхностей в игровой движок
Savin Denis
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😮n delete😮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
)
Гость
Еще чуть-чуть вашего внимания, если можно.
Скрипт спотыкается в нескольких местах. Может быть он написан под 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😮n delete😮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😮n delete😮ff name:fName
)
И еще раз ОГРОМНОЕ, ОГРОМНОЕ СПАСИБО!!!
Savin Denis
-- -------------------
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😮n delete😮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 более менее полно реализованны функции
дублирующие интерфейс
Гость