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

Как опустить перпендикуляр и отложить расс

Тема в разделе "Моделирование", создана пользователем ХАОТИК, 17 дек 2012.

Модераторы: He77ga, Артер
  1. ХАОТИК

    ХАОТИК Пользователь сайта

    С нами с:
    14.12.2012
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    2
    Нужно создать между двумя не параллельными ребрами 3е перпендикулярное одному из них, поставить на ребре вершину на определённом расстоянии от другой вершины. Как это делать? Вообще у меня сложности с точными построениями. Всё на глаз делаю.
     

    Вложения:

    • 2919882.jpg
      2919882.jpg
      Размер файла:
      52,3 КБ
      Просмотров:
      156
  2. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    Chamfer.Это не так сложно.Выделяешь ребро нажимаешь Settings(кнопка между "Chamfer" и "Target Weld") и в появившемся меню задаёшь любые числовые параметры.Потом аналогичное делаешь на перпендикулярно расположенном ребре
     
  3. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример: Создаем новую сцену.
    Создаем один чайник и конвертируем его в Editable Poly.
    Выделяем один планарный полигон и одно ребро выделенного полигона.
    Переходин на уровень полигонов (нажимаем клавишу 4).
    В свитке Edit Geometry нажимаем кнопку Slice Plane.
    Запускаем скрипт. В новом окне нажимаем кнопку Align.
    Перемещаем Slice Plane по оси X в новой системе координат.
    В свитке Edit Geometry нажимаем кнопку Slice.
    Код:
    try destroydialog igorznag_slice_plane_align catch()
    rollout igorznag_slice_plane_align "Slice"
    (
    button btn_apply "Align" pos:[5,5] width:70 height:25
    on btn_apply pressed do
    (
    if(selection.count==1)then
    (
    obj=modPanel.getCurrentObject()
    if(classof obj==Editable_Poly)then
    (
    fs_ba=polyop.getFaceSelection obj; fs_a=fs_ba as array
    if(fs_a.count==1)then
    (
    ef_ba=polyOp.getEdgesUsingFace obj fs_a
    es_ba=polyop.getEdgeSelection obj; es_a=es_ba as array
    if(es_a.count==1 and (es_ba*ef_ba).numberSet==1)then
    (
    ev=polyOp.getEdgeVerts obj es_a[1]
    ev1_coord=polyop.getVert obj ev[1] node:selection[1]
    ev2_coord=polyop.getVert obj ev[2] node:selection[1]
    ev1ev2=ev2_coord-ev1_coord
    if(length ev1ev2>0)then
    (
    undo on
    (
    with animate off
    (
    rightVector=normalize ev1ev2
    faceNormal = polyop.getFaceNormal obj fs_a[1] node:selection[1]
    upVector = normalize (cross rightVector faceNormal)
    p=(ev1_coord+ev2_coord)/2
    theMatrix = matrix3 rightVector -upVector faceNormal p
    try delete $grid_poly_igorznag catch ()
    g=grid name:"grid_poly_igorznag"; g.transform=theMatrix
    toolmode.coordsys g; freeze g; hide g
    polyOp.setSlicePlane selection[1] (ray p rightVector) ((length ev1ev2)/2.0)
    redrawViews();
    )--with animate off
    )--undo on
    )--if(length ev1ev2>0)then
    )--if(es_a.count==1 and (es_ba*ef_ba).numberSet==1)then
    )--if(fs_a.count==1)then
    )--if(classof obj==Editable_Poly)then
    )--if(selection.count==1)then
    )--on btn_apply pressed do
    ); createdialog igorznag_slice_plane_align 80 35
    Пример: Создаем новую сцену.
    Создаем один чайник и конвертируем его в Editable Poly.
    Выделяем одно ребро и одну вершину выделенного ребра.
    Запускаем скрипт. В новом окне нажимаем кнопку Apply.
    Код:
    try destroydialog igorznag_insert_vertex catch()
    rollout igorznag_igorznag_insert_vertex "Insert vertex"
    (
    spinner sp_dist "Distance:" range:[0,1e9,1] fieldWidth:60 type:#worldunits pos:[5,5]
    button btn_apply "Apply" pos:[35,30] width:70 height:25
    on btn_apply pressed do
    (
    if(selection.count==1)then
    (
    obj=modPanel.getCurrentObject()
    if(classof obj==Editable_Poly)then
    (
    es_ba=polyop.getEdgeSelection obj; es_a=es_ba as array
    if(es_a.count==1)then
    (
    ve_ba=polyOp.getVertsUsingEdge obj es_a
    vs_ba=polyop.getVertSelection obj; vs_a=vs_ba as array
    if(vs_a.count==1 and (vs_ba*ve_ba).numberSet==1)then
    (
    ev1_coord=polyop.getVert obj vs_a[1] node:selection[1]
    ev2_ba=ve_ba-vs_ba;ev2_a=ev2_ba as array
    ev2_coord=polyop.getVert obj ev2_a[1] node:selection[1]
    ev1ev2=ev2_coord-ev1_coord
    if(sp_dist.value<length ev1ev2)then
    (
    undo on
    (
    with animate off
    (
    p_index=polyOp.divideEdge obj es_a[1] 0.5
    p_coord=ev1_coord+sp_dist.value*(normalize ev1ev2)
    polyop.setVert obj p_index p_coord node:selection[1]
    polyop.setVertSelection obj p_index
    redrawviews()
    )--with animate off
    )--undo on
    )--if(sp_dist.value<length ev1ev2)then
    )--if(vs_a.count==1 and (vs_ba*ve_ba).numberSet==1)then
    )--if(es_a.count==1)then
    )--if(classof obj==Editable_Poly)then
    )--if(selection.count==1)then
    )--on btn_apply pressed do
    ); createdialog igorznag_igorznag_insert_vertex 130 60
    Чтобы запустить скрипт нужно:
    1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
    2. Сохраняем текстовый файл с названием "test.ms"
    3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
     
  4. Сhin@man

    Сhin@man Активный участник

    С нами с:
    04.12.2012
    Сообщения:
    81
    Симпатии:
    1
    Баллы:
    7
    1.создаешь точку где надо
    2.создаешь вторую на ребре напротив, все равно где
    3.включаешь привязку по оси,на которой ребро располеженно с последней точкой
    4.включаешь эдж констраинт
    5. тянешь по привязке вторую точку к первой....

    зачем скрипт????
     
  5. Сhin@man

    Сhin@man Активный участник

    С нами с:
    04.12.2012
    Сообщения:
    81
    Симпатии:
    1
    Баллы:
    7
    но в большинстве случаев...слайплэйн тебе в помощь
     
  6. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Сhin@man. Зачем ваш способ????
    Я знаю другой способ:
    1. Выделяем не параллельные ребра и делаем Create Shape From Selection.
    2. Включаем привязку Perpendicular, Vertex, Edge/Segment.
    3. Создаем сплайн Line перпендикулярный одной из не параллельных линий.
    4. Включаем Cut и режем полигон с привязкой к вершинам перпендикулярного сплайна.
     
Модераторы: He77ga, Артер

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