Render.ru

Трудности выделения

Рейтинг
13
#1
Доброй ночи, друзья. Простите, что засоряю форум примитивными вопросами.
Подскажите, пожалуйста, возможно ли как-то быстро выделить только открытые крайние ребра, иными словами только те, которые должны пойти под chamfer, например, вот как на этом объекте? Руками снимать ненужное - долго, Loop, Ring не работают.

 
Рейтинг
229
#2


Выделить сначала polygon loop потом сконвертировать (shift+кнопка edges в editable poly) в edges, получится чуть быстрее.
 

LKI

Активный участник
Рейтинг
14
#3
Лупы полигонов работают с Shift-ом. А еще поюзай раздел селект в панели Ribbon
 

igorznag

Мастер
Рейтинг
103
#4
Подскажите, пожалуйста, возможно ли как-то быстро выделить только открытые крайние ребра?
Попробуйте такой вариант:
Активируем режим Edges для базового объекта Editable Poly.
Запускаем скрипт. В новом окне нажимаем кнопку Select.

1.jpg

Код:
try destroydialog igorznag_selec_edges_by_polygons_angle catch()
rollout igorznag_selec_edges_by_polygons_angle "Edges"
(
button btn_select_edges "Select" pos:[5,5] width:90
on btn_select_edges pressed do
(
    if selection.count==1 then
    (
        obj=selection[1]; bo=obj.baseobject; if classof bo== Editable_Poly then
        (
            n=polyop.getnumedges bo; if n>0 do
            (
                need_edges=#{}; for i=1 to n do
                (
                    ef=polyop.getEdgeFaces bo i; if ef.count==2 do
                    (
                        face1=ef[1]; face2=ef[2];
                        fn1=polyop.getfacenormal bo face1 node:obj; fn2=polyop.getfacenormal bo face2 node:obj
                        ev_a=polyOp.getEdgeVerts bo i; ev_a_1=polyOp.getVert bo ev_a[1] node:obj;
                        fc1=polyop.getFaceCenter bo face1 node:obj; v=fc1-ev_a_1
                        d=dot v fn2; z=cross fn1 fn2;  lz = length z; a=atan2 lz (dot fn1 fn2)
                        if d>0 then a=180+a  else a=180-a; if a<175 do need_edges+=#{i}
                    )--if ef.count==2 do
                )--for i=1 to n do
                polyop.setedgeselection bo need_edges; completeredraw()
            )--if n>0 do
        )else messagebox "Select Editable Poly object"
    )else messagebox "Select one object"
)--on btn_select_edges pressed do
); createdialog igorznag_selec_edges_by_polygons_angle 100 30
Чтобы запустить скрипт нужно:
1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
 
Рейтинг
13
#5
Вау, вот это подход, очень круто! Потестировал на разной геометрии - то, что нужно. Для работы с мебелью (и, я думаю, не только) очень полезный скрипт.
Жалко, менюшка не встраивается в общую панель. Я бы вообще в раздел Selection эту кнопку добавил.
 

igorznag

Мастер
Рейтинг
103
#6
Жалко, менюшка не встраивается в общую панель.
Запускаем скрипт ниже.
Меню Customize > Customize UI > Toolbars > Category:"_igorznag"
Создаём кнопку на панели инструментов для действия igorznag_select_convex_edges.
Код:
macroScript igorznag_select_convex_edges category:"_igorznag" buttonText:"Select Edges"
(
    if selection.count==1 then
    (
        obj=selection[1]; bo=obj.baseobject; if classof bo== Editable_Poly then
        (
            n=polyop.getnumedges bo; if n>0 do
            (
                need_edges=#{}; for i=1 to n do
                (
                    ef=polyop.getEdgeFaces bo i; if ef.count==2 do
                    (
                        face1=ef[1]; face2=ef[2];
                        fn1=polyop.getfacenormal bo face1 node:obj; fn2=polyop.getfacenormal bo face2 node:obj
                        ev_a=polyOp.getEdgeVerts bo i; ev_a_1=polyOp.getVert bo ev_a[1] node:obj;
                        fc1=polyop.getFaceCenter bo face1 node:obj; v=fc1-ev_a_1
                        d=dot v fn2; z=cross fn1 fn2;  lz = length z; a=atan2 lz (dot fn1 fn2) 
                        if d>0 then a=180+a  else a=180-a; if a<175 do need_edges+=#{i}
                    )--if ef.count==2 do
                )--for i=1 to n do
                polyop.setedgeselection bo need_edges; completeredraw()
            )--if n>0 do
        )else messagebox "Select Editable Poly object"
    )else messagebox "Select one object"
)--macroScript igorznag_select_convex_egdes category:"_igorznag"
 
Последнее редактирование:
Сверху