Render.ru

Выравнивание плоскостей объекта

mr. bungle

Активный участник
Рейтинг
13
#1
Всем привет! Есть проблемка)
Есть несложный полигональный объект , который надо изготовить в реальности.
Проблема заключается в том, что когда отправляю модель на призводство технолог говорит, что точки объекта не лежат в своих плоскостях.
То есть получается, что полигоны модели искажены (перекручины) и нужно их выровнить максимально точно, чтобы все плоскости были ровными.
выравнивание плоскостей методом make planar результата не дает, так как выравнивая одну плоскость искажается соседняя.
Может есть какие то более точные и быстрые способы выравнивания одновременно всех плоскостей объекта?
 

Вложения

INCUS

Знаток
Рейтинг
29
#2
Вот, igorznaq уже писал такой скрипт, за что ему большое спасибо.
Код:
rollout igorznag_make_planar_all "Make planar all" 
( 
button bnt_make_planar "Make planar" pos:[40,30] 
spinner sp_iterations "Iterations" fieldWidth:45 range:[1, 10, 2] pos:[40,5] type:#integer 
on bnt_make_planar pressed do 
( 
undo on 
( 
if(selection.count==1)then 
( 
obj=selection[1].baseobject 
if(classof obj==Editable_Poly)then 
( 
fs_a=(polyop.getFaceSelection obj)as array 
for j=1 to sp_iterations.value do 
for i=1 to fs_a.count do polyOp.makeFacesPlanar obj fs_a[i] 
redrawViews() 
)--if(classof obj==Editable_Poly)then 
)--if(selection.count==1)then 
)--undo on 
)--on bnt_make_planar pressed do 
); createdialog igorznag_make_planar_all 150 60
 

mr. bungle

Активный участник
Рейтинг
13
#3
Я видел подобный скрипт, но толи он неправльно работает, толи я не прально им пользуюсь, но эффекта нет.
Так как выделяя точку в одном полигоне и делая её планарной для него , она при перемещении искажет соседние полигоны...
И непонятно , точно ли все полигоны выронены или нет...
 

Виталий Мартынов

Активный участник
Рейтинг
11
#4
извените а можно вопрос на вопрос перемещение вершин изменит геометрию объекта при чем это может быть существенно в зависимости от того на сколько полики не плоские разве это допустимо в вашем случае?
 

mr. bungle

Активный участник
Рейтинг
13
#5
извените а можно вопрос на вопрос перемещение вершин изменит геометрию объекта при чем это может быть существенно в зависимости от того на сколько полики не плоские разве это допустимо в вашем случае?
нет это на данном этапе непринципиально, главное чтобы модель была корректной (годной для производства)
 

Виталий Мартынов

Активный участник
Рейтинг
11
#6
проверил - скрипт работает хорошо. Нужно выделить все полигоны( ну или те которые хотите сделать плоскими) а за тем запускать скрипт. igorznag- респект.
 
Рейтинг
82
#7
Вот бы ещё те полигоны, находящиеся в строго определённых плоскостях "Y" "Z" "X" не слетали из-за среднеарифметического положения в процессе планарности. Цены бы ему не было.Но всё равно поддерживаю Виталия Мартынова.Спасибо автору.
 

Виталий Мартынов

Активный участник
Рейтинг
11
#8
Скрипт делающий выбранные полигоны плоскими но при этом двигающий вершины только по одной оси ( z в данном случае). Возможно вы что то такое имели ввиду. Тему можно и развить.


b = selection[1].baseobject
f = polyop.getFaceSelection b
f2 = f as array
verts1 = polyop.getFaceVerts b f2[1] as bitarray
verts2 = verts1 as array

v1 = polyop.getVert b verts2[1]
v2 = polyop.getVert b verts2[2]
v3 = polyop.getVert b verts2[3]
v4 = polyop.getVert b verts2[4]

polyOp.makeFacesPlanar b f

c = polyop.getFaceCenter b f2[1]
n = polyop.getFaceNormal b f2[1]

z1 =(n.x*(c.x-v1.x)+n.y*(c.y-v1.y))/n.z + c.z
z2 =(n.x*(c.x-v2.x)+n.y*(c.y-v2.y))/n.z + c.z
z3 =(n.x*(c.x-v3.x)+n.y*(c.y-v3.y))/n.z + c.z
z4 =(n.x*(c.x-v4.x)+n.y*(c.y-v4.y))/n.z + c.z

polyop.setVert b verts2[1] [v1.x,v1.y,z1]
polyop.setVert b verts2[2] [v2.x,v2.y,z2]
polyop.setVert b verts2[3] [v3.x,v3.y,z3]
polyop.setVert b verts2[4] [v4.x,v4.y,z4]
 

Вложения

Рейтинг
82
#9
Проблема заключается в том,что при моделинге геометрии помещений ,при создании разных проёмов,пилястр,ниш и прочего, как правило образуются небольшие отклонения от плоскостей "Y" "Z" "X" по всей геометрии .Обычно они не значительны в пределах нескольких микрон рис 1 и 2 (при ед.изм см) в целом они практически ни на,что не влияют но всё же являются определённым раздражающим элементом.Речь идёт о плоскостях "Y" "Z" "X" т.к. они являются основными при работе с объектами.
Т.е., например, выделяется весь объект нажимается "волшебная кнопочка" и....... все полигоны находящиеся в "Y" "Z" "X" становятся не только планарными но и соответствуют "Y" "Z" "X" кроме ,естественно тех,что находятся под другими углами-здесь видимо необходимо устанавливать порог срабатывания связанный с углами(возможно).
 

Вложения

Виталий Мартынов

Активный участник
Рейтинг
11
#10
Уточните пож. а то не допонял что имеется ввиду под другими углами. То есть это те плоскости объекта которые надо выровнять но не приводить к глобальным?
 
Рейтинг
82
#11
Вот простой пример.Сейчас я занимаюсь мансардным этажом коттеджа, на изображении видно,что часть кровли находится под определённым углом(полигоны выделены) по отношению к основным плоскостям здания.Естественно если использовать Make Planar к выделенному полигону то "слетят" с смежные к нему плоскости и их придётся настраивать за ново.И так замкнутый круг.
Было бы не плохо,если это вообще возможно,исправить последовательно, с начала полигоны по осям "Y" потом "Z" и "X" и после всего этого остальные, без изменения ранее исправленных.
 

Вложения

Виталий Мартынов

Активный участник
Рейтинг
11
#12
Чтобы исправить апланарность нужно двигать хотя бы одну вершину полигона хотя бы по одной оси что приведет к изменению смежных поликов. Универсальную схему тут придумать сложно (не факт что невозможно) потому как надо смотреть какую вершину и куда двигать для обеспечения нужного результата. В вашем примере мне видится что для планарности скатов нужно сделать их верхние и нижние ребра параллельными оси х.
 
Рейтинг
82
#13
Я думаю,что дело в приоритетах т.е. соблюдаться должны основные оси "Y" "Z" "X" а уж на других углах то что получится-в последнюю очередь, без изменения основных.По крайней мере практика показала ,что так более удобно лишь бы они все были планарны-вот,что было бы не плохо сделать.Хотя возможно и наоборот,необходимо пробовать.
 
Сверху