Working with Editable Meshes


Flipping Face Normals

The following function flips the face normal for all faces in the specified mesh object.


fn FlipObjNormal obj =


for f =1 to obj.numFaces do --for each face in the mesh


verts=getface obj f -- get its 3 vertices as a point3

local tmp=verts.x -- swap the first and third vertices

verts.x=verts.z -- which flips the normal

verts.z=tmp -- (right-hand rule), and

setface obj f verts -- store the new vertex order for the face


update obj -- update object so 3ds Max sees the changes


Texture Vertices and Faces

The following script is an example of working with texture vertices and faces.


-- function to apply planar mapping to an object

-- direction parameter specifies the axis the mapping is

-- perpendicular to, and can have a value of #x, #y, or #z


fn ApplyPlanarMap obj direction =

( local oldcoordsys, normalize_pos

-- in this case, the number of texture vertices is equal to the

-- number of mesh vertices


-- build the texture vertex faces

buildTVFaces obj

-- operate in objects coordinate space. Save original coord system so we

-- can restore later.

oldcoordsys=set coordsys local

-- for each vertex in mesh, get it's position and normalize the position

-- to a range of [0,0,0] to [1,1,1]. This is the planar UVW space.

for v = 1 to obj.numverts do

( normalize_pos=((getvert obj v)-obj.min)/(obj.max-obj.min)

-- flip around position component values based on which direction the

-- planar mapping is perpendicular to

case direction of

(#x:( tmp=normalize_pos.x





#y:( tmp=normalize_pos.y





-- set the corresponding texture vertex "position"

settvert obj v normalize_pos


-- done "positioning" the texture vertices. Build the texture faces.

-- since in this case there is a 1-to-1 correspondence between mesh and

-- texture vertices, the vertex indices for a mesh face are also the

-- texture vertex indices for the texture faces.

for f = 1 to obj.numfaces do

setTVFace obj f (getface obj f)

-- all done. reset the coordinate system

set coordsys oldcoordsys

-- update the mesh so 3ds Max sees the changes

update obj



-- test bed. Create a sphere, apply a material, set the diffuse map

-- to a 2x3 tiled checker map, turn on viewport display of the

-- checker texture map, and call the ApplyPlanarMap function



convertToMesh g





showTextureMap g.material g.material.maps[2] true

ApplyPlanarMap g #x


ApplyPlanarMap() -- output of function declaration lines 5 to 45

$GeoSphere:GeoSphere02 @ [0.0,0.0,0.0] -- output line 51

$Editable_Mesh:GeoSphere02 @ [0.0,0.0,0.0] -- output line 52

Standard:Standard -- output line 53

Checker:Checker -- output line 54

2 -- output line 55

3 -- output line 56

OK -- output line 57

OK -- output line 58

See also

Editable_Mesh : GeometryClass and TriMesh : Value