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

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

Тема в разделе "Моделирование", создана пользователем mr. bungle, 4 апр 2014.

Модераторы: He77ga, Артер
  1. mr. bungle

    mr. bungle Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    10
    Всем привет! Есть проблемка)
    Есть несложный полигональный объект , который надо изготовить в реальности.
    Проблема заключается в том, что когда отправляю модель на призводство технолог говорит, что точки объекта не лежат в своих плоскостях.
    То есть получается, что полигоны модели искажены (перекручины) и нужно их выровнить максимально точно, чтобы все плоскости были ровными.
    выравнивание плоскостей методом make planar результата не дает, так как выравнивая одну плоскость искажается соседняя.
    Может есть какие то более точные и быстрые способы выравнивания одновременно всех плоскостей объекта?
     

    Вложения:

    • 3320860.jpg
      3320860.jpg
      Размер файла:
      51,3 КБ
      Просмотров:
      144
  2. INCUS

    INCUS Знаток

    С нами с:
    03.08.2010
    Сообщения:
    857
    Симпатии:
    30
    Баллы:
    29
    Вот, 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
     
  3. mr. bungle

    mr. bungle Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    10
    Я видел подобный скрипт, но толи он неправльно работает, толи я не прально им пользуюсь, но эффекта нет.
    Так как выделяя точку в одном полигоне и делая её планарной для него , она при перемещении искажет соседние полигоны...
    И непонятно , точно ли все полигоны выронены или нет...
     
  4. Виталий Мартынов

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

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    извените а можно вопрос на вопрос перемещение вершин изменит геометрию объекта при чем это может быть существенно в зависимости от того на сколько полики не плоские разве это допустимо в вашем случае?
     
  5. mr. bungle

    mr. bungle Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    10
    нет это на данном этапе непринципиально, главное чтобы модель была корректной (годной для производства)
     
  6. Виталий Мартынов

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

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    проверил - скрипт работает хорошо. Нужно выделить все полигоны( ну или те которые хотите сделать плоскими) а за тем запускать скрипт. igorznag- респект.
     
  7. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    Вот бы ещё те полигоны, находящиеся в строго определённых плоскостях "Y" "Z" "X" не слетали из-за среднеарифметического положения в процессе планарности. Цены бы ему не было.Но всё равно поддерживаю Виталия Мартынова.Спасибо автору.
     
  8. Виталий Мартынов

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

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    Скрипт делающий выбранные полигоны плоскими но при этом двигающий вершины только по одной оси ( 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]
     

    Вложения:

    • 3321400.jpg
      3321400.jpg
      Размер файла:
      68,1 КБ
      Просмотров:
      119
  9. diwian diwian

    diwian diwian Мастер

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

    Вложения:

    • 3321460.jpg
      3321460.jpg
      Размер файла:
      96,9 КБ
      Просмотров:
      112
    • 3321461.jpg
      3321461.jpg
      Размер файла:
      96,1 КБ
      Просмотров:
      116
  10. Виталий Мартынов

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

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    Уточните пож. а то не допонял что имеется ввиду под другими углами. То есть это те плоскости объекта которые надо выровнять но не приводить к глобальным?
     
  11. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    Вот простой пример.Сейчас я занимаюсь мансардным этажом коттеджа, на изображении видно,что часть кровли находится под определённым углом(полигоны выделены) по отношению к основным плоскостям здания.Естественно если использовать Make Planar к выделенному полигону то "слетят" с смежные к нему плоскости и их придётся настраивать за ново.И так замкнутый круг.
    Было бы не плохо,если это вообще возможно,исправить последовательно, с начала полигоны по осям "Y" потом "Z" и "X" и после всего этого остальные, без изменения ранее исправленных.
     

    Вложения:

    • 3321490.jpg
      3321490.jpg
      Размер файла:
      464,1 КБ
      Просмотров:
      128
  12. Виталий Мартынов

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

    С нами с:
    28.02.2009
    Сообщения:
    135
    Симпатии:
    0
    Баллы:
    26
    Чтобы исправить апланарность нужно двигать хотя бы одну вершину полигона хотя бы по одной оси что приведет к изменению смежных поликов. Универсальную схему тут придумать сложно (не факт что невозможно) потому как надо смотреть какую вершину и куда двигать для обеспечения нужного результата. В вашем примере мне видится что для планарности скатов нужно сделать их верхние и нижние ребра параллельными оси х.
     
  13. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    Я думаю,что дело в приоритетах т.е. соблюдаться должны основные оси "Y" "Z" "X" а уж на других углах то что получится-в последнюю очередь, без изменения основных.По крайней мере практика показала ,что так более удобно лишь бы они все были планарны-вот,что было бы не плохо сделать.Хотя возможно и наоборот,необходимо пробовать.
     
Модераторы: He77ga, Артер

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