Render.ru

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

ХАОТИК

Пользователь сайта
Рейтинг
2
#1
Нужно создать между двумя не параллельными ребрами 3е перпендикулярное одному из них, поставить на ребре вершину на определённом расстоянии от другой вершины. Как это делать? Вообще у меня сложности с точными построениями. Всё на глаз делаю.
 

Вложения

Рейтинг
82
#2
Chamfer.Это не так сложно.Выделяешь ребро нажимаешь Settings(кнопка между "Chamfer" и "Target Weld") и в появившемся меню задаёшь любые числовые параметры.Потом аналогичное делаешь на перпендикулярно расположенном ребре
 

igorznag

Мастер
Рейтинг
103
#3
Нужно создать между двумя не параллельными ребрами 3е перпендикулярное одному из них
Пример: Создаем новую сцену.
Создаем один чайник и конвертируем его в 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"
 
Рейтинг
14
#4
1.создаешь точку где надо
2.создаешь вторую на ребре напротив, все равно где
3.включаешь привязку по оси,на которой ребро располеженно с последней точкой
4.включаешь эдж констраинт
5. тянешь по привязке вторую точку к первой....

зачем скрипт????
 

igorznag

Мастер
Рейтинг
103
#6
1.создаешь точку где надо
2.создаешь вторую на ребре напротив, все равно где
3.включаешь привязку по оси,на которой ребро располеженно с последней точкой
4.включаешь эдж констраинт
5. тянешь по привязке вторую точку к первой....

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