Notifications
Clear all
[Closed] check the thickness of the mesh
Feb 14, 2012 9:46 pm
Hello,
I would like to write a maxscript that calculates the thickness of the mesh and where it would be too thin it gives the face a color.
My idea for doing this would be to use the RayMeshGridIntersect and check the distance of every face with the intersectray.
I wonder how long it will take to do 100000 faces.
If somebody has other ideas on how to do this, just let me know.
Tomorrow i will make an example and post here.
1 Reply
Feb 14, 2012 9:46 pm
Hi,
I made an example script with the intersectray from the maxscript help file for checking the thickness of a model. I do hope it is readable.
If someone has ideas to improve or optimize the script, just let know.
-----VARIBALEN--------
global vertex_color_array = #()
global face_index_VC = #()
global MaxDistance = 25 --mm
global dist_color = (240 / MaxDistance)
global theRef
global theTarget
-----FUNCTIONS
fn initialisatie theRef =
(
global rm = RayMeshGridIntersect() --create an instance of the Reference Target
rm.free() --leeg het voxel grid en bouw daarna een grid op
global fastgridsize = (((theRef.numfaces / 250.0) + 2) as integer)
rm.initialize (if (fastgridsize<=500) then fastgridsize else 500)
rm.addNode theTarget --add the sphere to the grid
rm.buildGrid() --build the grid data (collecting faces into the grid voxels)
)
fn init_rmGRID_minus =
(
format "total vertexis are : %
" theRef.numverts
for v = 1 to theRef.numverts do --go through all verts of the Geosphere
(
thePos = getVert theRef v --+ 0.0001--get the position of the vertex
thePosX = thePos[1]
thePosY = thePos[2]
thePosZ = thePos[3] - 0.00001
theNormal = -(getNormal theRef v) --get the normal of the vertex, reverse direction
thePos[3] = thePosZ
theHitsCount = rm.intersectRay thePos theNormal true
if theHitsCount != 0 then --if have hit anything...
(
theIndex = rm.getClosestHit()
theFace = rm.getHitFace theIndex
dist = rm.getHitDist theIndex
if dist > 0.0001 and dist < MaxDistance then
(
color_vertex = 255 - (dist * dist_color)
append vertex_color_array (color 255 color_vertex color_vertex)
append face_index_VC theFace
)
else
(
append vertex_color_array (color 255 255 255)
append face_index_VC theFace
)
)
else
(
--print "niks geraakt"
)
)
)
fn Vertex_Color_Assign =
(
count = face_index_VC.count
svc = meshop.setVertColor
for i = 1 to count do
(
x = getface theTarget face_index_VC[i] --get facenumber van het object
va = #{x[1],x[2],x[3]}
svc theTarget 0 va vertex_color_array[i]--3 punt vertex met kleur toekenning
)
)
fn Update_colormap =
(
theTarget.showvertexcolors=true
theTarget.vertexColorsShaded=true
update theTarget
)
delete objects
-------create test model
test = box length:50 width:100 height:50 lengthsegs:10 widthsegs:20 heightsegs:10
taps = taper amount:1.5 curve:0.18 primaryaxis:0
addmodifier test taps
theRef = snapshot test
---------------
theTarget = theRef
initialisatie theRef
t1 = timestamp()
init_rmGRID_minus ()
t2 = timestamp()
Vertex_Color_Assign()
t3 = timestamp()
Update_colormap()
delete test
format "check distances : % sec
" ((t2-t1) / 1000)
format "assign color : % sec
" ((t3-t2) / 1000)