1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Общие вопросы", создана пользователем kophysty, 9 мар 2016.

Модераторы: Артер
  1. kophysty

    kophysty Активный участник

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

    [​IMG]
     
  2. Royal Ghost

    Royal Ghost Мастер

    С нами с:
    17.03.2001
    Сообщения:
    306
    Симпатии:
    41
    Баллы:
    214
    [​IMG]

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

    LKI Активный участник

    С нами с:
    02.05.2009
    Сообщения:
    123
    Симпатии:
    10
    Баллы:
    14
    Лупы полигонов работают с Shift-ом. А еще поюзай раздел селект в панели Ribbon
     
    kophysty нравится это.
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Попробуйте такой вариант:
    Активируем режим 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"
     
    kophysty нравится это.
  5. kophysty

    kophysty Активный участник

    С нами с:
    21.10.2014
    Сообщения:
    72
    Симпатии:
    1
    Баллы:
    7
    Вау, вот это подход, очень круто! Потестировал на разной геометрии - то, что нужно. Для работы с мебелью (и, я думаю, не только) очень полезный скрипт.
    Жалко, менюшка не встраивается в общую панель. Я бы вообще в раздел Selection эту кнопку добавил.
     
  6. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Запускаем скрипт ниже.
    Меню 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"
     
    Последнее редактирование: 18 мар 2016
    kophysty нравится это.
  7. kophysty

    kophysty Активный участник

    С нами с:
    21.10.2014
    Сообщения:
    72
    Симпатии:
    1
    Баллы:
    7
    Ну вы просто волшебник ;) Спасибо!
     
Модераторы: Артер

Поделиться этой страницей