The following code implements the "Normal Align" feature of the UVW_Map modifier. The "Normal Align" button is not directly accessible to MAXScript. This function can be used as a replacement, and might help you understand the usefulness of the Vector Cross Product.
SCRIPT
clearListener() try(DestroyDialog AlignRollout)catch() Rollout AlignRollout "Align Gizmo" ( button bn_test "Align Gizmo" fn alignUVGizmo theObj theFace = ( -- First get the face normal vector. local faceNormal = coordsys theObj (polyop.getFaceNormal theObj theFace) -- Get the face center from the editable poly to put the gizmo at that place local translation = [0,0,0] local FaceVertexsIndicesArray = (polyop.GetFaceVerts theObj theFace) local numVerts = FaceVertexsIndicesArray.count for i in FaceVertexsIndicesArray do( translation += (theObj.GetVertex i) --Assuming it's an editable poly object ) translation /= numVerts -- Create a matrix from the normal local theMatrix = MatrixFromNormal faceNormal theMatrix.translation = translation --Set our computed translation to be on the face -- Create UVWMap modifier theMap = Uvwmap() -- Add it to the selection modPanel.addModToSelection theMap ui:on -- Set the transform on it theMap.gizmo.transform = theMatrix ) on bn_test pressed do ( if (undefined != $)do ( convertToPoly $ -- Align the gizmo of the uv map modifier to the first face of the mesh alignUVGizmo $ 2 ) ) ) CreateDialog AlignRollout