Доброй ночи, друзья. Простите, что засоряю форум примитивными вопросами.
Подскажите, пожалуйста, возможно ли как-то быстро выделить только открытые крайние ребра, иными словами только те, которые должны пойти под chamfer, например, вот как на этом объекте? Руками снимать ненужное - долго, Loop, Ring не работают.
kophystyПодскажите, пожалуйста, возможно ли как-то быстро выделить только открытые крайние ребра?
Попробуйте такой вариант:
Активируем режим Edges для базового объекта Editable Poly.
Запускаем скрипт. В новом окне нажимаем кнопку Select.
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"
Вау, вот это подход, очень круто! Потестировал на разной геометрии - то, что нужно. Для работы с мебелью (и, я думаю, не только) очень полезный скрипт.
Жалко, менюшка не встраивается в общую панель. Я бы вообще в раздел Selection эту кнопку добавил.
kophystyЖалко, менюшка не встраивается в общую панель.
Запускаем скрипт ниже.
Меню 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"
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Алексей Копыстынский (kophysty)
Подскажите, пожалуйста, возможно ли как-то быстро выделить только открытые крайние ребра, иными словами только те, которые должны пойти под chamfer, например, вот как на этом объекте? Руками снимать ненужное - долго, Loop, Ring не работают.
Royal Ghost
Выделить сначала polygon loop потом сконвертировать (shift+кнопка edges в editable poly) в edges, получится чуть быстрее.
LKI
igorznag
Активируем режим Edges для базового объекта Editable Poly.
Запускаем скрипт. В новом окне нажимаем кнопку Select.
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"
Алексей Копыстынский (kophysty)
Жалко, менюшка не встраивается в общую панель. Я бы вообще в раздел Selection эту кнопку добавил.
igorznag
Меню 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"Алексей Копыстынский (kophysty)