diff --git a/utils/exporters/max/ThreeJSExporter.ms b/utils/exporters/max/ThreeJSExporter.ms index b07282b8..ba999f0b 100644 --- a/utils/exporters/max/ThreeJSExporter.ms +++ b/utils/exporters/max/ThreeJSExporter.ms @@ -34,34 +34,34 @@ rollout ThreeJSExporter "ThreeJSExporter" triNFormat = "%,%,%,%,%,%,%", triUVNFormat = "%,%,%,%,%,%,%,%,%,%", - footerFormat = "}\n\npostMessage( model );" + footerFormat = "}\n\npostMessage( model );\nclose();" ------------------------------------------------------------------------------------- -- User interface - group "ThreeJSExporter v0.6" + group "ThreeJSExporter v0.7" ( label msg "Exports selected meshes in Three.js ascii JSON format" align:#left hyperLink lab1 "Original source at GitHub" address:"https://github.com/alteredq/three.js/blob/master/utils/exporters/max/ThreeJSExporter.ms" color:(color 255 120 0) align:#left label dummy1 "--------------------------------------------------------" align:#left - + checkbox exportColor "Export vertex colors" checked:false enabled:true checkbox exportUv "Export uvs" checked:true enabled:true checkbox exportNormal "Export normals" checked:true enabled:true checkbox smoothNormal "Use vertex normals" checked:false enabled:true - + label dummy2 "--------------------------------------------------------" align:#left - + checkbox flipYZ "Flip YZ" checked:true enabled:true checkbox flipUV "Flip UV" checked:true enabled:true checkbox flipFace "Flip all faces" checked:false enabled:true checkbox autoflipFace "Try fixing flipped faces" checked:false enabled:true label dummy3 "--------------------------------------------------------" align:#left - + button btn_export "Export selected objects" ) @@ -70,7 +70,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Dump vertices - function DumpVertices src = + function DumpVertices src = ( Format "\"vertices\": [" to:ostream @@ -102,9 +102,9 @@ rollout ThreeJSExporter "ThreeJSExporter" z = vert.z ) - + Format vertexFormat x y z to:ostream - + if i < num then Format "," to:ostream ) @@ -114,11 +114,11 @@ rollout ThreeJSExporter "ThreeJSExporter" Format "],\n\n" to:ostream ) - + ------------------------------------------------------------------------------------- -- Dump colors - function DumpColors src useColors = + function DumpColors src useColors = ( Format "\"colors\": [" to:ostream @@ -132,19 +132,19 @@ rollout ThreeJSExporter "ThreeJSExporter" ( col = src[i] - + r = col.r as Integer g = col.g as Integer b = col.b as Integer - + hexNum = ( bit.shift r 16 ) + ( bit.shift g 8 ) + b - + -- hexColor = formattedPrint hexNum format:"#x" -- Format "%" hexColor to:ostream decColor = formattedPrint hexNum format:"#d" Format "%" decColor to:ostream - + if i < num then Format "," to:ostream ) @@ -153,12 +153,12 @@ rollout ThreeJSExporter "ThreeJSExporter" Format "],\n\n" to:ostream - ) + ) ------------------------------------------------------------------------------------- -- Dump normals - function DumpNormals src = + function DumpNormals src = ( Format "\"normals\": [" to:ostream @@ -180,9 +180,9 @@ rollout ThreeJSExporter "ThreeJSExporter" x = normal.x y = normal.z z = normal.y - + z *= -1 - + ) else ( @@ -208,7 +208,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Dump uvs - function DumpUvs src = + function DumpUvs src = ( Format "\"uvs\": [[" to:ostream @@ -225,7 +225,7 @@ rollout ThreeJSExporter "ThreeJSExporter" u = uvw.x - if flipUV.checked then + if flipUV.checked then ( v = 1 - uvw.y ) @@ -249,11 +249,11 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Dump faces - function DumpFaces src useColors = + function DumpFaces src useColors = ( Format "\"faces\": [" to:ostream - + num = src.count if num > 0 then @@ -268,9 +268,9 @@ rollout ThreeJSExporter "ThreeJSExporter" fuv = zface[2] m = zface[3] - 1 fc = zface[4] - + needsFlip = zface[5] - + isTriangle = true hasMaterial = true hasFaceUvs = false @@ -289,12 +289,12 @@ rollout ThreeJSExporter "ThreeJSExporter" faceType = bit.set faceType 6 hasFaceVertexNormals faceType = bit.set faceType 7 hasFaceColors faceType = bit.set faceType 8 hasFaceVertexColors - + if i > 1 then ( Format "," faceType to:ostream ) - + Format "%" faceType to:ostream if isTriangle then @@ -303,8 +303,8 @@ rollout ThreeJSExporter "ThreeJSExporter" va = (fv.x - 1) as Integer vb = (fv.y - 1) as Integer vc = (fv.z - 1) as Integer - - if flipFace.checked or needsFlip then + + if flipFace.checked or needsFlip then ( tmp = vb @@ -312,26 +312,26 @@ rollout ThreeJSExporter "ThreeJSExporter" vc = tmp ) - - + + Format ",%,%,%" va vb vc to:ostream - - if hasMaterial then + + if hasMaterial then ( Format ",%" m to:ostream ) - + if hasFaceVertexUvs then ( ua = (fuv.x - 1) as Integer ub = (fuv.y - 1) as Integer uc = (fuv.z - 1) as Integer - - if flipFace.checked or needsFlip then + + if flipFace.checked or needsFlip then ( tmp = ub @@ -339,15 +339,15 @@ rollout ThreeJSExporter "ThreeJSExporter" uc = tmp ) - + Format ",%,%,%" ua ub uc to:ostream ) - + if hasFaceVertexNormals then ( - if smoothNormal.checked then + if smoothNormal.checked then ( -- normals have the same indices as vertices @@ -357,7 +357,7 @@ rollout ThreeJSExporter "ThreeJSExporter" nc = vc ) - else + else ( -- normals have the same indices as face @@ -366,8 +366,8 @@ rollout ThreeJSExporter "ThreeJSExporter" nc = na ) - - if flipFace.checked or needsFlip then + + if flipFace.checked or needsFlip then ( tmp = nb @@ -375,20 +375,20 @@ rollout ThreeJSExporter "ThreeJSExporter" nc = tmp ) - + Format ",%,%,%" na nb nc to:ostream ) - + if hasFaceVertexColors then ( ca = (fc.x - 1) as Integer cb = (fc.y - 1) as Integer cc = (fc.z - 1) as Integer - - if flipFace.checked or needsFlip then + + if flipFace.checked or needsFlip then ( tmp = cb @@ -396,13 +396,13 @@ rollout ThreeJSExporter "ThreeJSExporter" cc = tmp ) - + Format ",%,%,%" ca cb cc to:ostream ) ) - + ) ) @@ -414,7 +414,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Dump color - function DumpColor pcolor label = + function DumpColor pcolor label = ( r = pcolor.r / 255 g = pcolor.g / 255 @@ -426,19 +426,19 @@ rollout ThreeJSExporter "ThreeJSExporter" Format "\"%\" : [%, %, %],\n" label fr fg fb to:ostream - ) + ) ------------------------------------------------------------------------------------- -- Dump map - function DumpMap pmap label = + function DumpMap pmap label = ( if classof pmap == BitmapTexture then ( bm = pmap.bitmap - if bm != undefined then + if bm != undefined then ( fname = filenameFromPath bm.filename @@ -453,7 +453,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Export materials - function ExportMaterials zmaterials zcolors = + function ExportMaterials zmaterials zcolors = ( Format "\"materials\": [\n" to:ostream @@ -474,9 +474,9 @@ rollout ThreeJSExporter "ThreeJSExporter" ( useVertexColors = zcolors[i] - + Format "\"DbgName\" : \"%\",\n" mat.name to:ostream - + -- colors DumpColor mat.diffuse "colorDiffuse" @@ -485,7 +485,7 @@ rollout ThreeJSExporter "ThreeJSExporter" t = mat.opacity / 100 s = mat.glossiness - + Format "\"transparency\" : %,\n" t to:ostream Format "\"specularCoef\" : %,\n" s to:ostream @@ -498,24 +498,24 @@ rollout ThreeJSExporter "ThreeJSExporter" DumpMap mat.opacityMap "mapAlpha" ) - else + else ( - + useVertexColors = false - + Format "\"DbgName\" : \"%\",\n" "dummy" to:ostream - + DumpColor red "colorDiffuse" - + ) - + Format "\"vertexColors\" : %\n" useVertexColors to:ostream Format "}" to:ostream if ( i < totalMaterials ) then Format "," to:ostream Format "\n\n" to:ostream - ) + ) Format "],\n\n" to:ostream @@ -546,7 +546,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ( nColors = GetNumCPVVerts obj - + if nColors > 0 then ( @@ -573,8 +573,8 @@ rollout ThreeJSExporter "ThreeJSExporter" ( num = obj.numVerts - - for i = 1 to num do + + for i = 1 to num do ( n = GetNormal obj i @@ -596,7 +596,7 @@ rollout ThreeJSExporter "ThreeJSExporter" num = obj.numFaces - for i = 1 to num do + for i = 1 to num do ( n = GetFaceNormal obj i @@ -622,8 +622,8 @@ rollout ThreeJSExporter "ThreeJSExporter" function ExtractUvs obj whereto = ( n = obj.numTVerts - - for i = 1 to n do + + for i = 1 to n do ( v = GetTVert obj i @@ -643,10 +643,10 @@ rollout ThreeJSExporter "ThreeJSExporter" useMultiMaterial = false materialIDList = #() - + materialClass = classof objMaterial - - if materialClass == StandardMaterial then + + if materialClass == StandardMaterial then ( fm = findItem allMaterials objMaterial @@ -657,12 +657,12 @@ rollout ThreeJSExporter "ThreeJSExporter" useMultiMaterial = true - for i = 1 to n do + for i = 1 to n do ( mID = GetFaceMatID objMesh i materialIndex = findItem objMaterial.materialIDList mID - + if materialIndex > 0 then ( @@ -670,7 +670,7 @@ rollout ThreeJSExporter "ThreeJSExporter" mMergedIndex = findItem allMaterials subMaterial - if mMergedIndex > 0 then + if mMergedIndex > 0 then ( materialIDList[mID] = mMergedIndex @@ -696,29 +696,29 @@ rollout ThreeJSExporter "ThreeJSExporter" ) else ( - + -- undefined material - + fm = findItem allMaterials false - + ) - - for i = 1 to n do + + for i = 1 to n do ( zface = #() - + fv = GetFace objMesh i fv.x += offsetVert fv.y += offsetVert fv.z += offsetVert - if useMultiMaterial then + if useMultiMaterial then ( mID = GetFaceMatID objMesh i - fm = materialIDList[mID] + fm = materialIDList[mID] ) @@ -726,7 +726,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ( fuv = GetTVFace objMesh i - + fuv.x += offsetUv fuv.y += offsetUv fuv.z += offsetUv @@ -738,12 +738,12 @@ rollout ThreeJSExporter "ThreeJSExporter" fuv = false ) - + if hasVColors then ( fc = GetVCFace objMesh i - + fc.x += offsetColor fc.y += offsetColor fc.z += offsetColor @@ -756,7 +756,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ) - append zface fv + append zface fv append zface fuv append zface fm append zface fc @@ -770,10 +770,10 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Extract materials from eventual multi-material - + function ExtractMaterials objMesh objMaterial whereto wheretoColors zname hasVColors = ( - + materialClass = classof objMaterial if materialClass == StandardMaterial then @@ -792,13 +792,13 @@ rollout ThreeJSExporter "ThreeJSExporter" ( n = objMesh.numFaces - - for i = 1 to n do + + for i = 1 to n do ( - + mID = getFaceMatId objMesh i materialIndex = findItem objMaterial.materialIDList mID - + if materialIndex > 0 then ( @@ -812,16 +812,16 @@ rollout ThreeJSExporter "ThreeJSExporter" ) - ) + ) ) ) else ( - + -- unknown or undefined material - + append whereto false append wheretoColors false @@ -831,8 +831,8 @@ rollout ThreeJSExporter "ThreeJSExporter" ------------------------------------------------------------------------------------- -- Hack to figure out if normals are messed up - - function NeedsFaceFlip node = + + function NeedsFaceFlip node = ( needsFlip = false @@ -865,29 +865,29 @@ rollout ThreeJSExporter "ThreeJSExporter" ( needsFlip = false hasVColors = false - + zmesh = SnapshotAsMesh node - + if autoflipFace.checked then ( needsFlip = NeedsFaceFlip node ) - + if exportColor.checked and ( getNumCPVVerts zmesh ) > 0 then ( hasVColors = true ) - + return #( zmesh, node.name, node.material, needsFlip, hasVColors ) ) -- Not geometry ... could be a camera, light, etc. - + return #( false, node.name, 0, false, false ) ) @@ -905,31 +905,31 @@ rollout ThreeJSExporter "ThreeJSExporter" mergedVertices = #() mergedNormals = #() mergedColors = #() - + mergedUvs = #() mergedFaces = #() - + mergedMaterials = #() mergedMaterialsColors = #() - + sceneHasVColors = false - - for obj in selection do + + for obj in selection do ( result = ExtractMesh obj meshObj = result[1] - if ClassOf meshObj == TriMesh then + if ClassOf meshObj == TriMesh then ( meshName = result[2] meshMaterial = result[3] needsFlip = result[4] hasVColors = result[5] - + sceneHasVColors = sceneHasVColors or hasVColors - + append meshObjects result vertexOffset = mergedVertices.count @@ -941,7 +941,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ExtractVertices meshObj mergedVertices ExtractNormals meshObj mergedNormals needsFlip ExtractColors meshObj mergedColors - + ExtractUvs meshObj mergedUvs ExtractFaces meshObj meshMaterial mergedFaces mergedMaterials needsFlip hasVColors vertexOffset uvOffset colorOffset @@ -953,13 +953,13 @@ rollout ThreeJSExporter "ThreeJSExporter" totalVertices = mergedVertices.count totalFaces = mergedFaces.count totalMaterials = mergedMaterials.count - + totalColors = 0 totalNormals = 0 totalUvs = 0 - + useColors = false - + if sceneHasVColors and exportColor.checked then ( @@ -968,7 +968,7 @@ rollout ThreeJSExporter "ThreeJSExporter" ) - if exportNormal.checked then + if exportNormal.checked then ( totalNormals = mergedNormals.count @@ -993,7 +993,7 @@ rollout ThreeJSExporter "ThreeJSExporter" i = 0 - for obj in meshObjects do + for obj in meshObjects do ( meshName = obj[2] @@ -1070,5 +1070,5 @@ rollout ThreeJSExporter "ThreeJSExporter" ) -) +) createDialog ThreeJSExporter width:300 \ No newline at end of file