Render.ru

Елементы

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

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
-- 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
Очень признателен за ваши ответы!!!
Даже как-то неудобно быть столь навязчивым, но просто больше неоткуда ждать помощи. А проблема вот в чем.
В Махе скрипты прекрасно работают, но вот при экспорте в игровой *.мар файл для программы Quark, некоторые (%10) обьектов исчезают, уменьшаются, разваливаются на инвалидные фейсы или путают координаты наложения текстур.
Это, в принципе, происходило и при ручном отделении и экструдировании полигонов, в чем причина - одному процессору известно.

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

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

Очень, очень надеюсь на вашу помощь!
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
>некоторые (%10) обьектов исчезают, уменьшаются, разваливаются на инвалидные фейсы или путают координаты наложения текстур.

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

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


Если ты имеш в виду ParticleType - Fragments
то их можно выделить по Id матерьяла тк каждому привается свой ID
$.EditablePoly.selectByMaterial 2
 
#5
Крутил вертел со вчерашнего дня, ничего не получается, единственное, что получилось это выделять элементы с указанным ID, а не отделять элементы от обьекта.
Как я понял нужно найти кол-во ID групп в обьекте и номера фейсов к которым он применен, и тогда подставив в прошлые скрипты эти переменные можно отделить фейсы по ID как елементы. Но в хелпе по скриптам я не нашел нужных опций для Poly или Mesh. Может, конечно плохо искал, беда с английским... :((
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#6
просто получаеш массив выделенных файсов
и передаеш в Detach
если выделленых не оказалось - выходиш из цикла
 
#7
Вот, получилась часть скрипта:

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?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#8
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
Спасибо за подсказку, но при исполнении скрипта виснет Мах. Я покавырялся получилось вот что:
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} в меше или в поли?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#10
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.
 
Сверху