Files
gtav-src/tools_ng/wildwest/script/3dsMax/Modelling/SelFacesByAngle_Funcs.ms
T
2025-09-29 00:52:08 +02:00

115 lines
2.4 KiB
Plaintext
Executable File

--
-- File:: SelFacesByAngle.ms
-- Description:: Select faces according to their normal angles.
--
-- Author:: Greg Smith <greg.smith@rockstarnorth.com>
-- Date:: 20/5/2004
--
-----------------------------------------------------------------------------
fn getFaceAngle faceNormal = (
floorVec = copy faceNormal
isNegative = false
if floorVec[3] < 0.0f then (
isNegative = true
)
floorVec[3] = 0.0f
floorVec = floorVec / (length floorVec)
cosAngle = dot floorVec faceNormal
angle = acos cosAngle
if isNegative == true then (
angle = -angle
)
return angle
)
fn selectGreater angleSpin = (
if selection.count < 1 then (
return 0
)
if classof selection[1] != Editable_Mesh then (
messagebox "The selected object has to be an editable mesh."
return 0
)
select selection[1]
subobjectLevel = 3
selectlist = #()
objmesh = selection[1]
for i = 1 to objmesh.numfaces do (
objface = getface objmesh i
vertA = objmesh.verts[objface[1]].pos
vertB = objmesh.verts[objface[2]].pos
vertC = objmesh.verts[objface[3]].pos
vecA = vertB - vertA
vecA = vecA / (length vecA)
vecB = vertB - vertC
vecB = vecB / (length vecB)
faceNormal = cross vecB vecA
faceNormal = faceNormal / (length faceNormal)
angle = getFaceAngle faceNormal
if angle > angleSpin then (
append selectlist i
)
)
objmesh.selectedfaces = selectlist
)
fn selectLess angleSpin = (
if selection.count < 1 then (
return 0
)
if classof selection[1] != Editable_Mesh then (
messagebox "The selected object has to be an editable mesh."
return 0
)
select selection[1]
subobjectLevel = 3
selectlist = #()
objmesh = selection[1]
for i = 1 to objmesh.numfaces do (
objface = getface objmesh i
vertA = objmesh.verts[objface[1]].pos
vertB = objmesh.verts[objface[2]].pos
vertC = objmesh.verts[objface[3]].pos
vecA = vertB - vertA
vecA = vecA / (length vecA)
vecB = vertB - vertC
vecB = vecB / (length vecB)
faceNormal = cross vecB vecA
faceNormal = faceNormal / (length faceNormal)
angle = getFaceAngle faceNormal
if angle < angleSpin then (
append selectlist i
)
)
objmesh.selectedfaces = selectlist
)