Можно немного доработать этот скрипт, чтобы референсный вектор брался из первой выделенной грани и оформить в виде макрокомманды, чтобы можно было назначить на кнопку.
Код:
MacroScript EPoly_SelectRefEdge
enabledIn:#("max", "viz")
ButtonText:"SelREdge"
Category:"Editable Polygon Object"
internalCategory:"Editable Polygon Object"
Tooltip:"SelectRefEdge (Poly)"
-- Needs Icon
(
On IsEnabled Return Filters.Is_EPolySpecifyLevel #{3}
On IsVisible Return Filters.Is_EPolySpecifyLevel #{3}
On Execute Do (
Try (
If SubObjectLevel == undefined then Max Modify Mode
local obj = Filters.GetModOrObj()
local fEPoly = (classof obj == Editable_Poly)
-- Value
threshold = 0.001 -- 0 - 1
selEdgeVec = (obj.GetSelection #Edge) as array
vComp = normalize [0,0,1] -- Default Compare Vector
if selEdgeVec.count != 0 do
(
local i = selEdgeVec[1]
local p1 = obj.GetVertex (obj.GetEdgeVertex i 1)
local p2 = obj.GetVertex (obj.GetEdgeVertex i 2)
vComp = Normalize (p2 - p1)
)
if fEPoly do polyop.CollapseDeadStructs obj
threshold = 1. - threshold
edgeNum = obj.GetNumEdges()
selEdge = for i = 1 to edgeNum where
(
-- vEdge Vector
local p1 = obj.GetVertex (obj.GetEdgeVertex i 1)
local p2 = obj.GetVertex (obj.GetEdgeVertex i 2)
local vEdge = Normalize (p2 - p1)
-- Commpare
local a = abs (dot vComp vEdge)
(a >= threshold)
) collect i
selEdge = selEdge as BitArray
obj.SetSelection #Edge selEdge
if not fEPoly do obj.Select #Edge selEdge
for o in $selection do nodeInvalRect o
subobjectLevel = 2
)
Catch(MessageBox "Operation Failed" Title:"Poly Editing")
)
)
Код нужно поместить в файл c расширением xxx.mcr и положить 3dsmax\UI\Macroscript и пезапустить макс
После чего в UI Customize в категории Editable Polygon Object сможеш найти свою кнопку, называться будет SelectRefEdge (Poly).
Дальше выделяеш одну грань жмеш на кнопку: выделятся все параллельные ей.
PS
Сделал также чтоб корректно работал с модификатором Edit_Poly