static void Main(string[] args)
 {
     Console.WriteLine("圆的面积是:" + Convert.ToInt32(CalcArea.Area(5)));
     Console.WriteLine("矩形的面积是:" + Convert.ToInt32(CalcArea.Area(6, 10)));
     Console.WriteLine("三角形的面积是:" + Convert.ToInt32(CalcArea.Area(4, 5, 6)));
     Console.ReadLine();
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            CalcArea A = new CalcArea();

            Console.WriteLine();
            Console.WriteLine("Calculo de Áreas");
            Console.WriteLine();
            Console.WriteLine("Quadrado ..: " + A.Area(5));
            Console.WriteLine("Cubo ......: " + A.Area(5, 6, 7));
            Console.WriteLine("Cilindro ..: " + A.Area(7, 3));
            Console.WriteLine();
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            double areaCircle   = CalcArea.Circle(2);
            double areaTriangle = CalcArea.Triangle(5, 5, 5);
            bool   isRight1     = TriangleCheck.IsRight(3, 5, 4);
            bool   isRight2     = TriangleCheck.IsRight(4, 5, 4);

            Console.WriteLine(areaCircle);
            Console.WriteLine(areaTriangle);
            Console.WriteLine(isRight1);
            Console.WriteLine(isRight2);
            Console.ReadKey();
        }
Ejemplo n.º 4
0
        //creating Area method
        private static string CalculatingArea(string height2)
        {
            Console.WriteLine(height2);
            //asking for input
            height = Console.ReadLine();
            width  = Console.ReadLine();
            // calculating the area
            decimal CalcArea;

            CalcArea = decimal.Parse(height) * decimal.Parse(width);


            return(CalcArea.ToString());
        }
Ejemplo n.º 5
0
    public bool ExportFBX(ref ArrayList bigArray, ref ArrayList materialsArray, ref ArrayList uniqueMaterialsArray, ref ArrayList totalUniqueMaterials, ref Light[] lights, int textures, int totalCount)
    {
        CalcArea.whichLightmap = 1;
        offsetsArray           = new ArrayList();

        //TextWriter stringWriter = new StringWriter();
        string sciezka;

        if (Application.platform == RuntimePlatform.WindowsEditor)
        {
            sciezka = "MaxFiles\\" + Path.GetFileNameWithoutExtension(EditorApplication.currentScene) + ".fbx";
        }
        else
        {
            sciezka = "MaxFiles/" + Path.GetFileNameWithoutExtension(EditorApplication.currentScene) + ".fbx";
        }
        using (TextWriter sw = new StreamWriter(sciezka))
        {
            EditorUtility.DisplayProgressBar("Exporting FBX", "Setting headers...", 0.1f);
            StringBuilder sb = new StringBuilder();
            //StringBuilder sb2 = new StringBuilder();
            //sb.Append(sb2);
            sb.Append(FBXHeader());
            //FBX Definitions
            sb.Append("; Object definitions\r\n");
            sb.Append(";------------------------------------------------------------------\r\n");
            sb.Append("Definitions:  {\r\n");
            sb.Append("    Version: 100\r\n");
            sb.Append("    Count: ");

            sb.Append(totalCount + 1);  //One is for Global Settings
            //First, primary type: Model
            sb.Append("\r\n    ObjectType: \"Model\" {\r\n");
            sb.Append("        Count: ");
            sb.Append(bigArray.Count + lights.Length);
            sb.Append("\r\n    }\r\n");

            //Secondly, type: Material
            sb.Append("\r\n    ObjectType: \"Material\" {\r\n");
            sb.Append("        Count: ");
            sb.Append(totalUniqueMaterials.Count);
            sb.Append("\r\n    }\r\n");

            //Textures
            sb.Append("\r\n    ObjectType: \"Texture\" {\r\n");
            sb.Append("        Count: ");
            sb.Append(textures);
            sb.Append("\r\n    }\r\n");

            sb.Append("\r\n    ObjectType: \"GlobalSettings\" {\r\n");
            sb.Append("        Count: 1\r\n");
            sb.Append("    }\r\n");
            //Video

            /*
             * sb.Append("\r\n    ObjectType: \"Video\" {\r\n");
             * sb.Append("        Count: ");
             * sb.Append(textures);
             * sb.Append("\r\n    }\r\n");
             */

            sb.Append("}\r\n\r\n");
            sb.Append("; Object properties\r\n");
            sb.Append(";------------------------------------------------------------------\r\n");
            sb.Append("Objects:  {\r\n");

            int model = 0;

            foreach (MeshFilter[] mf in bigArray)
            {
                EditorUtility.DisplayProgressBar("Exporting FBX", "Writing model data" + (model + 1), 0.1f);
                sb.Append("    Model: \"Model::ImportedObject" + Convert.ToString(model + 1) + "\", \"Mesh\" {\r\n");
                sb.Append("        Version: 232\r\n");
                sb.Append("        Properties60:  {\r\n");
                sb.Append("            Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n");
                sb.Append("            Property:\"Show\",\"bool\",\"\",1\r\n");
                sb.Append("            Property:\"NegativePercentShapeSupport\",\"bool\",\"\",1\r\n");
                sb.Append("            Property:\"DefaultAttributeIndex\",\"int\",\"\",0\r\n");
                sb.Append("            Property:\"Visibility\",\"Visibility\",\"A+\",1\r\n");
                sb.Append("            Property:\"Color\",\"ColorRGB\",\"N\",0.23921568627451,0.52156862745098,0.0235294117647059\r\n");
                sb.Append("            Property: \"BBoxMin\",\"Vector3D\",\"N\",0,0,0\r\n");
                sb.Append("            Property: \"BBoxMax\",\"Vector3D\",\"N\",0,0,0\r\n");
                sb.Append("        }\r\n");
                sb.Append("        MultiLayer: 1\r\n");
                sb.Append("        MultiTake: 1\r\n");
                sb.Append("        Shading: T\r\n");
                sb.Append("        Culling: \"CullingOff\"\r\n");
                sb.Append("        Vertices: ");
                sw.Write(sb.ToString()); //new
                sb.Length = 0;           //new


                int[] vertexoffsets = new int[mf.Length + 1];
                int   vertexoffset  = 0;
                vertexoffsets[0] = 0;
                EditorUtility.DisplayProgressBar("Exporting FBX", "Writing vertices's for lightmap " + (model + 1), 0.2f);

//############## EXPORTING VERTICLES
                Vector3   vrt;
                Vector3[] vecArray;
                ArrayList transformedVerticles = new ArrayList();
                for (int j = 0; j < mf.Length; j++)
                {
                    int i = 0;

                    vecArray = new Vector3[mf[j].sharedMesh.vertexCount];
                    foreach (Vector3 vert in mf[j].sharedMesh.vertices)
                    {
                        vrt         = mf[j].transform.TransformPoint(vert);
                        vecArray[i] = vrt;
                        sw.Write(Convert.ToString((double)-vrt.x).Replace(',', '.'));
                        sw.Write(',');
                        sw.Write(Convert.ToString((double)vrt.y).Replace(',', '.'));

                        sw.Write(',');
                        sw.Write(Convert.ToString((double)vrt.z).Replace(',', '.'));
                        sw.Write(',');
                        if (i % 3 == 0)
                        {
                            sw.Write("\r\n        ");
                        }
                        i++;
                    }
                    transformedVerticles.Add(vecArray);
                    vertexoffset        += ((MeshFilter)mf[j]).sharedMesh.vertexCount;
                    vertexoffsets[j + 1] = vertexoffset;
                }
                sw.Write("\r\n        PolygonVertexIndex: ");

//############## EXPORTING TRIANGLES
                int   k = 0;
                int[] triangles;
                foreach (MeshFilter mesh in mf)
                {
                    triangles = mesh.sharedMesh.triangles;
                    for (int i = 0; i < triangles.Length; i += 3)
                    {
                        //Mental Ray + VRay
                        sw.Write((triangles[i] + vertexoffsets[k]));
                        sw.Write(',');
                        sw.Write((triangles[i + 2] + vertexoffsets[k]));
                        sw.Write(',');
                        sw.Write((-(triangles[i + 1] + vertexoffsets[k] + 1)));
                        sw.Write(',');

                        //Scanline
                        //sb.Append((triangles[i] + vertexoffsets[k])).Append(',').Append((triangles[i + 2] + vertexoffsets[k])).Append(',').Append((-(triangles[i + 1] + vertexoffsets[k] + 1))).Append(',');
                        //Experiment
                        //sb.Append((triangles[i + 2] + vertexoffsets[k])).Append(',').Append((triangles[i] + vertexoffsets[k])).Append(',').Append((-(triangles[i+1] + vertexoffsets[k] + 1))).Append(',');
                        if (i % 9 == 0)
                        {
                            sw.Write("\r\n        ");
                        }
                    }
                    k++;
                }
                sw.Write("\r\n        GeometryVersion: 124\r\n");
                sw.Write("        LayerElementNormal: 0 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"\"\r\n");
                sw.Write("            MappingInformationType: \"ByVertice\"\r\n");
                sw.Write("            ReferenceInformationType: \"Direct\"\r\n");

//############## NORMALS EXPORTING
                EditorUtility.DisplayProgressBar("Exporting FBX", "Writing normals for lightmap " + (model + 1), 0.5f);
                sw.Write("            Normals: ");
                Matrix4x4 transformMatrix;
                Vector3[] normals;

                foreach (MeshFilter mesh in mf)
                {
                    normals         = mesh.sharedMesh.normals;
                    transformMatrix = mesh.transform.localToWorldMatrix.inverse.transpose;
                    for (int i = 0; i < normals.Length; i++)
                    {
                        vrt = transformMatrix.MultiplyVector(normals[i]);

                        sw.Write(Convert.ToString((double)-vrt.x).Replace(',', '.'));
                        sw.Write(',');
                        sw.Write(Convert.ToString((double)vrt.y).Replace(',', '.'));
                        sw.Write(',');
                        sw.Write(Convert.ToString((double)vrt.z).Replace(',', '.'));
                        sw.Write(',');
                        if ((i & 3) == 0)
                        {
                            sw.Write("\r\n            ");
                        }
                    }
                }
                sw.Write("\r\n        }\r\n");


//############## UV Exporting
                EditorUtility.DisplayProgressBar("Exporting FBX", "Writing UV's for lightmap " + (model + 1), 0.7f);
                sw.Write("        LayerElementUV: 0 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"UVChannel_1\"\r\n");
                sw.Write("            MappingInformationType: \"ByVertice\"\r\n");
                sw.Write("            ReferenceInformationType: \"Direct\"\r\n");

                sw.Write("            UV: ");
                foreach (MeshFilter mesh in mf)
                {
                    if (mesh.sharedMesh.uv.Length < mesh.sharedMesh.vertexCount)
                    {
                        for (int j = 0; j < mesh.sharedMesh.vertexCount; j++)
                        {
                            sb.Append("0.0!0.0!");
                            if (j % 4 == 0)
                            {
                                sb.Append("\r\n            ");
                            }
                        }
                    }
                    else
                    {
                        int i = 0;
                        foreach (Vector2 v in mesh.sharedMesh.uv)
                        {
                            sb.Append((double)v.x).Append('!').Append((double)v.y).Append('!');
                            if ((i & 7) == 0)
                            {
                                sb.Append("\r\n            ");
                            }
                            i++;
                        }
                    }
                }
                sb.Replace(',', '.');
                sb.Replace('!', ',');
                //sb.Append(sb2);
                sw.Write(sb.ToString());
                sb.Length = 0;
                sw.Write("\r\n        }\r\n");



//############## UV2 Exporting
                sw.Write("        LayerElementUV: 1 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"UVChannel_2\"\r\n");
                sw.Write("            MappingInformationType: \"ByVertice\"\r\n");
                sw.Write("            ReferenceInformationType: \"Direct\"\r\n");

                sw.Write("            UV: ");
                foreach (MeshFilter mesh in mf)
                {
                    if (mesh.sharedMesh.uv2.Length < mesh.sharedMesh.vertexCount)
                    {
                        Debug.Log(mesh.name + " has less uv2 verticles then mesh verticles");
                        for (int j = 0; j < mesh.sharedMesh.vertexCount; j++)
                        {
                            sb.Append("0.0!0.0!");
                            //if (j % 4 == 0)
                            //{
                            sb.Append("\r\n            ");
                            //}
                        }
                    }
                    else
                    {
                        int i = 0;
                        foreach (Vector2 v in mesh.sharedMesh.uv2)
                        {
                            sb.Append((double)v.x).Append('!').Append((double)v.y).Append('!');
                            //if ((i & 2) == 0)
                            //{
                            sb.Append("\r\n            ");
                            //}
                            i++;
                        }
                        sb.Append("\r\n            \r\n            ");
                    }
                }
                sb.Replace(',', '.');
                sb.Replace('!', ',');
                //sb.Append(sb2);
                sw.Write(sb.ToString());
                sb.Length = 0;
                sw.Write("\r\n        }\r\n");

//############## UV3 Exporting
                sw.Write("        LayerElementUV: 2 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"UVChannel_3\"\r\n");
                sw.Write("            MappingInformationType: \"ByVertice\"\r\n");
                sw.Write("            ReferenceInformationType: \"Direct\"\r\n");
                sw.Write("            UV: ");

//############## Preparing UV3 coordinates
                Rect[] uvs = CalcArea.CalculateArea(mf, Convert.ToInt32(128 * Math.Pow(2, (Convert.ToInt32((int)LightmappingTool.res[model])))), transformedVerticles);
                offsetsArray.Add(uvs);
                if (uvs == null)
                {
                    return(false);
                }

//############## UV3 Exporting
                int kk = 0;
                foreach (MeshFilter mesh in mf)
                {
                    Vector2[] toUse;
                    if (mesh.sharedMesh.uv2.Length == mesh.sharedMesh.vertexCount)
                    {
                        toUse = mesh.sharedMesh.uv2;
                    }
                    else
                    {
                        //Debug.Log(mesh.name + " rendering using uv1");
                        toUse = mesh.sharedMesh.uv;
                    }
                    int i = 0;
                    //Debug.Log(Math.Floor((double)((uvs[kk].x + ((mesh.sharedMesh.uv2[0].x - offsets[kk].xMin) * uvs[kk].width / (offsets[kk].xMax - offsets[kk].xMin))) * 2048.0)));
                    //Debug.Log((uvs[kk].y + ((mesh.sharedMesh.uv2[0].y - offsets[kk].yMin) * uvs[kk].height / (offsets[kk].yMax - offsets[kk].yMin))) * 2048.0);
                    foreach (Vector2 v in toUse)
                    {
                        try
                        {
                            sb.Append(((double)uvs[kk].x + v.x * uvs[kk].width)).Append('!').Append(((double)uvs[kk].y + v.y * uvs[kk].height)).Append('!');
                            //sb2.Append(Math.Round((double)((uvs[kk].x + ((v.x - offsets[kk].xMin) * uvs[kk].width / (offsets[kk].xMax - offsets[kk].xMin)))))).Append('!').Append(Math.Round((double)(uvs[kk].y + ((v.y - offsets[kk].yMin) * uvs[kk].height / (offsets[kk].yMax - offsets[kk].yMin))))).Append('!');
                        }
                        catch
                        {
                            sb.Append("0.0!0.0!");
                            Debug.Log("Non-Valid UV on " + mesh.name);
                        }
                        if ((i & 3) == 0)
                        {
                            sb.Append("\r\n            ");
                        }
                        i++;
                    }

                    kk++;
                    sb.Append("\r\n            ");
                }
                sb.Replace(',', '.');
                sb.Replace('!', ',');
                //sb.Append(sb2);
                sw.Write(sb.ToString());
                sb.Length = 0;
                sw.Write("\r\n        }\r\n");

                //GC should clean that
                uvs = null;

//############## MATERIAL DISTRIBUTION PART
                EditorUtility.DisplayProgressBar("Exporting FBX", "Writing materials for lightmap " + (model + 1), 0.8f);
                sw.Write("        LayerElementMaterial: 0 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"\"\r\n");
                sw.Write("            MappingInformationType: \"ByPolygon\"\r\n");
                sw.Write("            ReferenceInformationType: \"IndexToDirect\"\r\n");
                sw.Write("            Materials: ");

                int countner = 0;
                int value    = 0;
                for (int z = 0; z < mf.Length; z++)
                {
                    int ln;
                    ln = mf[z].sharedMesh.subMeshCount;
                    for (int t = 0; t < ln; t++)
                    {
                        if ((((Material[][])materialsArray[model])[z][t]) == null)
                        {
                            value = -1;
                        }
                        else if (((ArrayList)uniqueMaterialsArray[model]).Contains(((Material[][])materialsArray[model])[z][t]))
                        {
                            value = ((ArrayList)uniqueMaterialsArray[model]).IndexOf(((Material[][])materialsArray[model])[z][t]);
                        }
                        else
                        {
                            value = countner;
                            countner++;
                        }
                        string str = Convert.ToString(value) + ",";
                        int    ln2;
                        ln2 = mf[z].sharedMesh.GetTriangles(t).Length;
                        for (int i = 0; i < ln2; i += 3)
                        {
                            //if (i % 3 == 2)
                            //{
                            sw.Write(str);

                            if ((i & 15) == 0)
                            {
                                sw.Write("\r\n            ");
                            }
                            //}
                        }
                    }
                }


                sw.Write("\r\n        }\r\n");

// ############# Texture part

                sw.Write("        LayerElementTexture: 0 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"\"\r\n");
                sw.Write("            MappingInformationType: \"ByPolygon\"\r\n");
                sw.Write("            ReferenceInformationType: \"IndexToDirect\"\r\n");
                sw.Write("            BlendMode: \"Translucent\"\r\n");
                sw.Write("            TextureAlpha: 1\r\n");
                sw.Write("            TextureId: ");

                int mapOffset = 0;
                countner = 0;
                value    = 0;
                ArrayList nonMap   = new ArrayList();
                ArrayList inserted = new ArrayList();

                for (int z = 0; z < mf.Length; z++)
                {
                    int ln = mf[z].sharedMesh.subMeshCount;
                    for (int t = 0; t < ln; t++)
                    {
                        if (((Material[][])materialsArray[model])[z][t].HasProperty("_MainTex") && (((Material[][])materialsArray[model])[z][t].GetTexture("_MainTex")))
                        {
                            if (inserted.Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                value = inserted.IndexOf(((Material[][])materialsArray[model])[z][t]);
                            }
                            else if (((ArrayList)uniqueMaterialsArray[model]).Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                value = ((ArrayList)uniqueMaterialsArray[model]).IndexOf(((Material[][])materialsArray[model])[z][t]) - nonMap.Count;
                                inserted.Add(((Material[][])materialsArray[model])[z][t]);
                            }
                            if (value >= mapOffset)
                            {
                                mapOffset = value + 1;
                            }
                        }
                        else
                        {
                            value = -1;
                            if (!nonMap.Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                nonMap.Add(((Material[][])materialsArray[model])[z][t]);
                            }
                        }
                        int    ln2 = mf[z].sharedMesh.GetTriangles(t).Length;
                        string str = value + ",";
                        for (int i = 0; i < ln2; i += 3)
                        {
                            //if (i % 3 == 2)
                            //{
                            sw.Write(str);
                            //}
                        }
                        sw.Write("\r\n            ");
                    }
                }
                sw.Write("\r\n        }\r\n");


                countner = 0;
                value    = 0;
                nonMap   = new ArrayList();
                inserted = new ArrayList();

                sw.Write("        LayerElementBumpTextures: 0 {\r\n");
                sw.Write("            Version: 101\r\n");
                sw.Write("            Name: \"\"\r\n");
                sw.Write("            MappingInformationType: \"ByPolygon\"\r\n");
                sw.Write("            ReferenceInformationType: \"IndexToDirect\"\r\n");
                sw.Write("            BlendMode: \"Translucent\"\r\n");
                sw.Write("            TextureAlpha: 1\r\n");
                sw.Write("            TextureId: ");

                for (int z = 0; z < mf.Length; z++)
                {
                    for (int t = 0; t < ((MeshFilter)mf[z]).sharedMesh.subMeshCount; t++)
                    {
                        if (((Material[][])materialsArray[model])[z][t].HasProperty("_BumpMap") && (((Material[][])materialsArray[model])[z][t].GetTexture("_BumpMap")))
                        {
                            if (inserted.Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                value = mapOffset + inserted.IndexOf(((Material[][])materialsArray[model])[z][t]);
                            }
                            else if (((ArrayList)uniqueMaterialsArray[model]).Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                value = mapOffset + ((ArrayList)uniqueMaterialsArray[model]).IndexOf(((Material[][])materialsArray[model])[z][t]) - nonMap.Count;
                                inserted.Add(((Material[][])materialsArray[model])[z][t]);
                            }
                        }
                        else
                        {
                            value = -1;
                            if (!nonMap.Contains(((Material[][])materialsArray[model])[z][t]))
                            {
                                nonMap.Add(((Material[][])materialsArray[model])[z][t]);
                            }
                        }
                        for (int i = 0; i < ((MeshFilter)mf[z]).sharedMesh.GetTriangles(t).Length; i++)
                        {
                            if (i % 3 == 2)
                            {
                                sw.Write(value + ",");

                                if (i % 20 == 0)
                                {
                                    //sw.Write("\r\n            ");
                                }
                            }
                        }
                        sw.Write("\r\n            ");
                    }
                }

                sw.Write("\r\n        }\r\n");

                //GC should clean this:
                nonMap   = null;
                inserted = null;

                sw.Write("        Layer: 0 {\r\n");
                sw.Write("            Version: 100\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementNormal\"\r\n");
                sw.Write("                TypedIndex: 0\r\n");
                sw.Write("            }\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementMaterial\"\r\n");
                sw.Write("                TypedIndex: 0\r\n");
                sw.Write("            }\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementTexture\"\r\n");
                sw.Write("                TypedIndex: 0\r\n");
                sw.Write("            }\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementBumpTextures\"\r\n");
                sw.Write("                TypedIndex: 0\r\n");
                sw.Write("            }\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementUV\"\r\n");
                sw.Write("                TypedIndex: 0\r\n");
                sw.Write("            }\r\n");
                sw.Write("        }\r\n");
                sw.Write("        Layer: 1 {\r\n");
                sw.Write("            Version: 100\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementUV\"\r\n");
                sw.Write("                TypedIndex: 1\r\n");
                sw.Write("            }\r\n");
                sw.Write("        }\r\n");
                sw.Write("        Layer: 2 {\r\n");
                sw.Write("            Version: 100\r\n");
                sw.Write("            LayerElement:  {\r\n");
                sw.Write("                Type: \"LayerElementUV\"\r\n");
                sw.Write("                TypedIndex: 2\r\n");
                sw.Write("            }\r\n");
                sw.Write("        }\r\n");
                sw.Write("        NodeAttributeName: \"Geometry::ImportedObject" + Convert.ToString(model + 1) + "\"\r\n");
                sw.Write("    }\r\n");
                model++;
            }

// ######### LIGHTS Exporting
            int enumType;
            for (int i = 0; i < lights.Length; i++)
            {
                switch (lights[i].light.type)
                {
                case LightType.Point:
                    enumType = 0;
                    break;

                case LightType.Directional:
                    enumType = 1;
                    break;

                case LightType.Spot:
                    enumType = 2;
                    break;

                default:
                    enumType = 0;
                    break;
                }

                sw.Write("Model: \"Model::ImportedLight" + (i + 1) + "\", \"Light\" {\r\n");
                sw.Write("        Version: 232\r\n");
                sw.Write("        Properties60:  {\r\n");

                sw.Write("            Property: \"PreRotation\", \"Vector3D\", \"\",-90,0,0\r\n");
                sw.Write("            Property: \"PostRotation\", \"Vector3D\", \"\",0,0," + Convert.ToString(-lights[i].transform.eulerAngles.z).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"RotationActive\", \"bool\", \"\",1\r\n");
                sw.Write("            Property: \"Lcl Translation\", \"Lcl Translation\", \"A+\"," + Convert.ToString(-lights[i].transform.position.x).Replace(",", ".") + "," + Convert.ToString(lights[i].transform.position.y).Replace(",", ".") + "," + Convert.ToString(lights[i].transform.position.z).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A+\"," + Convert.ToString(lights[i].transform.eulerAngles.x).Replace(",", ".") + ",0," + Convert.ToString(-lights[i].transform.eulerAngles.y).Replace(",", ".") + " \r\n");
                sw.Write("            Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A+\",1,1,1\r\n");
                sw.Write("            Property: \"Visibility\", \"Visibility\", \"A+\",1\r\n");
                sw.Write("            Property: \"Color\", \"Color\", \"A+N\"," + Convert.ToString(lights[i].color.r).Replace(",", ".") + "," + Convert.ToString(lights[i].color.g).Replace(",", ".") + "," + Convert.ToString(lights[i].color.b).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"LightType\", \"enum\", \"N\"," + Convert.ToString(enumType) + "\r\n");
                sw.Write("            Property: \"CastLightOnObject\", \"bool\", \"N\",1\r\n");
                sw.Write("            Property: \"DrawVolumetricLight\", \"bool\", \"N\",1\r\n");
                sw.Write("            Property: \"DrawGroundProjection\", \"bool\", \"N\",0\r\n");
                sw.Write("            Property: \"DrawFrontFacingVolumetricLight\", \"bool\", \"N\",0\r\n");
                sw.Write("            Property: \"Intensity\", \"Number\", \"A+N\"," + Convert.ToString(lights[i].intensity * LightmappingTool.lightMultipler * 100).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"HotSpot\", \"Number\", \"A+N\"," + ((enumType != 0) ? lights[i].spotAngle: 0) + "\r\n");
                sw.Write("            Property: \"Cone angle\", \"Number\", \"A+N\"," + Convert.ToString(lights[i].spotAngle).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"Fog\", \"Number\", \"A+N\",0\r\n");
                sw.Write("            Property: \"DecayType\", \"enum\", \"N\",1\r\n");
                sw.Write("            Property: \"DecayStart\", \"Number\", \"A+N\",40\r\n");
                sw.Write("            Property: \"FileName\", \"KString\", \"N\", \"\"\r\n");
                sw.Write("            Property: \"EnableNearAttenuation\", \"bool\", \"N\",0\r\n");
                sw.Write("            Property: \"NearAttenuationStart\", \"Number\", \"A+N\",0\r\n");
                sw.Write("            Property: \"NearAttenuationEnd\", \"Number\", \"A+N\",40\r\n");
                sw.Write("            Property: \"EnableFarAttenuation\", \"bool\", \"N\",0\r\n");
                sw.Write("            Property: \"FarAttenuationStart\", \"Number\", \"A+N\",80\r\n");
                sw.Write("            Property: \"FarAttenuationEnd\", \"Number\", \"A+N\",200\r\n");
                sw.Write("            Property: \"CastShadows\", \"bool\", \"N\",1\r\n");
                sw.Write("            Property: \"ShadowColor\", \"Color\", \"A+N\",0,0,0\r\n");

                sw.Write("            Property: \"3dsMax\", \"Compound\", \"N\"\r\n");
                sw.Write("            Property: \"3dsMax|ClassIDa\", \"int\", \"N\",4113\r\n");
                sw.Write("            Property: \"3dsMax|ClassIDb\", \"int\", \"N\",0\r\n");
                sw.Write("            Property: \"3dsMax|SuperClassID\", \"int\", \"N\",48\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0\", \"Compound\", \"N\"\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Color\", \"Color\", \"AN\",1,1,1\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Multiplier\", \"Float\", \"AN\", " + Convert.ToString(lights[i].intensity * LightmappingTool.lightMultipler * 100).Replace(",", ".") + " \r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Contrast\", \"Float\", \"AN\",0\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Diffuse Soften\", \"Float\", \"AN\",0\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Attenuation Near Start\", \"Float\", \"AN\",0\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Attenuation Near End\", \"Float\", \"AN\",40\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Attenuation Far Start\", \"Float\", \"AN\",80\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Attenuation Far End\", \"Float\", \"AN\",200\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Decay Falloff\", \"Float\", \"AN\",40\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Shadow Color\", \"Color\", \"AN\",0,0,0\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|_Unnamed_Parameter_10\", \"int\", \"N\",0\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Atmosphere Opacity\", \"Float\", \"AN\",1\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Atmosphere Color Amount\", \"Float\", \"AN\",1\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|Shadow Density\", \"Float\", \"AN\",1\r\n");
                sw.Write("            Property: \"3dsMax|ParamBlock_0|_Unnamed_Parameter_14\", \"int\", \"N\",0\r\n");

                sw.Write("        }\r\n");
                sw.Write("        MultiLayer: 0\r\n");
                sw.Write("        MultiTake: 0\r\n");
                sw.Write("        Shading: T\r\n");
                sw.Write("        Culling: \"CullingOff\"\r\n");
                sw.Write("        TypeFlags: \"Light\"\r\n");
                sw.Write("        GeometryVersion: 124\r\n");
                sw.Write("        NodeAttributeName: \"NodeAttribute::ImportedLight" + (i + 1) + "\"\r\n");
                sw.Write("    }\r\n");
            }


            int tex = 0;
            foreach (Material mat in totalUniqueMaterials)
            {
                sw.Write("    Material: \"Material::" + @mat.name + "\", \"\" {\r\n");
                sw.Write("        Version: 102\r\n");
                sw.Write("        ShadingModel: \"phong\"\r\n");
                sw.Write("        MultiLayer: 0\r\n");
                sw.Write("        Properties60:  {\r\n");
                sw.Write("            Property: \"ShadingModel\", \"KString\", \"\", \"phong\"\r\n");
                sw.Write("            Property: \"MultiLayer\", \"bool\", \"\",0\r\n");
                if (mat.HasProperty("_Emission"))
                {
                    sw.Write("            Property: \"EmissiveColor\", \"ColorRGB\"," + Convert.ToString(mat.GetColor("_Emission").r).Replace(",", ".") + "," + Convert.ToString(mat.GetColor("_Emission").g).Replace(",", ".") + "," + Convert.ToString(mat.GetColor("_Emission").b).Replace(",", ".") + "\r\n");
                    sw.Write("            Property: \"EmissiveFactor\", \"double\", \"\"," + Convert.ToString(mat.GetFloat("_Shininess")).Replace(",", ".") + "\r\n");
                }
                else
                {
                    sw.Write("            Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n");
                    sw.Write("            Property: \"EmissiveFactor\", \"double\", \"\",0\r\n");
                }
                sw.Write("            Property: \"AmbientColor\", \"ColorRGB\", \"\"," + Convert.ToString(mat.color.r).Replace(",", ".") + "," + Convert.ToString(mat.color.g).Replace(",", ".") + "," + Convert.ToString(mat.color.b).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"AmbientFactor\", \"double\", \"\",1\r\n");
                sw.Write("            Property: \"DiffuseColor\", \"ColorRGB\", \"\"," + Convert.ToString(mat.color.r).Replace(",", ".") + "," + Convert.ToString(mat.color.g).Replace(",", ".") + "," + Convert.ToString(mat.color.b).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"DiffuseFactor\", \"double\", \"\",1\r\n");
                sw.Write("            Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"NormalMap\", \"Vector3D\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"BumpFactor\", \"double\", \"\",1\r\n");
                sw.Write("            Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n");
                sw.Write("            Property: \"TransparencyFactor\", \"double\", \"\",0\r\n");
                sw.Write("            Property: \"DisplacementColor\", \"ColorRGB\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"DisplacementFactor\", \"double\", \"\",1\r\n");
                if (mat.HasProperty("_SpecColor"))
                {
                    sw.Write("            Property: \"SpecularColor\", \"ColorRGB\", \"\"," + Convert.ToString(mat.GetColor("_SpecColor").r).Replace(",", ".") + "," + Convert.ToString(mat.GetColor("_SpecColor").g).Replace(",", ".") + "," + Convert.ToString(mat.GetColor("_SpecColor").b).Replace(",", ".") + "\r\n");
                    sw.Write("            Property: \"SpecularFactor\", \"double\", \"\"," + Convert.ToString(mat.GetFloat("_Shininess")).Replace(",", ".") + "\r\n");
                }
                else
                {
                    sw.Write("            Property: \"SpecularColor\", \"ColorRGB\", \"\",0.0,0.0,0.0\r\n");
                    sw.Write("            Property: \"SpecularFactor\", \"double\", \"\",0\r\n");
                }
                sw.Write("            Property: \"ShininessExponent\", \"double\", \"\",2.0000000206574\r\n");
                sw.Write("            Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"ReflectionFactor\", \"double\", \"\",1\r\n");
                sw.Write("            Property: \"Emissive\", \"Vector3D\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"Ambient\", \"Vector3D\", \"\"," + Convert.ToString(mat.color.r).Replace(",", ".") + "," + Convert.ToString(mat.color.g).Replace(",", ".") + "," + Convert.ToString(mat.color.b).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"Diffuse\", \"Vector3D\", \"\"," + Convert.ToString(mat.color.r).Replace(",", ".") + "," + Convert.ToString(mat.color.g).Replace(",", ".") + "," + Convert.ToString(mat.color.b).Replace(",", ".") + "\r\n");
                sw.Write("            Property: \"Specular\", \"Vector3D\", \"\",0,0,0\r\n");
                sw.Write("            Property: \"Shininess\", \"double\", \"\",2.0000000206574\r\n");
                sw.Write("            Property: \"Opacity\", \"double\", \"\",1\r\n");
                sw.Write("            Property: \"Reflectivity\", \"double\", \"\",0\r\n");
                sw.Write("        }\r\n");
                sw.Write("    }\r\n");
                tex++;
            }

            //Texture export
            tex = 0;
            string ProPath = Application.dataPath;
            ProPath = ProPath.Substring(0, ProPath.Length - 6);

            foreach (Material mat in totalUniqueMaterials)
            {
                Texture tex0;
                if (mat.HasProperty("_MainTex") && (tex0 = mat.GetTexture("_MainTex")))
                {
                    sw.Write("    Texture: \"Texture::" + @mat.name + "_diff" + "\", \"\" {\r\n");
                    sw.Write("        Type: \"TextureVideoClip\"\r\n");
                    sw.Write("        Version: 202\r\n");
                    sw.Write("        TextureName: \"Texture::" + @mat.name + "_diff" + "\"\r\n");
                    sw.Write("        Properties60:  {\r\n");
                    sw.Write("            Property: \"TextureTypeUse\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"Texture alpha\", \"Number\", \"A+\",1\r\n");
                    sw.Write("            Property: \"CurrentMappingType\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"WrapModeU\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"WrapModeV\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"UVSwap\", \"bool\", \"\",0\r\n");
                    sw.Write("            Property: \"Translation\", \"Vector\", \"A+\"," + Convert.ToString(mat.mainTextureOffset.x).Replace(",", ".") + "," + Convert.ToString(mat.mainTextureOffset.y).Replace(",", ".") + ",0\r\n");
                    sw.Write("            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\r\n");
                    sw.Write("            Property: \"Scaling\", \"Vector\", \"A+\"," + Convert.ToString(mat.mainTextureScale.x).Replace(",", ".") + "," + Convert.ToString(mat.mainTextureScale.y).Replace(",", ".") + ",1\r\n");
                    sw.Write("            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\r\n");
                    sw.Write("            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n");
                    sw.Write("            Property: \"UseMaterial\", \"bool\", \"\",1\r\n");
                    sw.Write("            Property: \"UseMipMap\", \"bool\", \"\",0\r\n");
                    sw.Write("            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",1\r\n");
                    sw.Write("            Property: \"UVSet\", \"KString\", \"\", \"UVChannel_1\"\r\n");
                    sw.Write("        }\r\n");
                    //sw.Write("        Media: \"Video::" +@ta2[0] +"_diff"+ "\"\r\n");
                    sw.Write("        FileName: \"" + (ProPath + AssetDatabase.GetAssetPath(tex0)) + "\"\r\n");
                    //sw.Write("        RelativeFilename: \"" +  @(ProPath + EditorUtility.GetAssetPath(tex0)) + "\"\r\n");
                    sw.Write("        ModelUVTranslation: 0,0\r\n");
                    sw.Write("        ModelUVScaling: 1,1\r\n");
                    sw.Write("        Texture_Alpha_Source: \"None\"\r\n");
                    sw.Write("        Cropping: 0,0,0,0\r\n");
                    sw.Write("    }\r\n");
                }
                if (mat.HasProperty("_BumpMap") && (tex0 = mat.GetTexture("_BumpMap")))
                {
                    sw.Write("    Texture: \"Texture::" + @mat.name + "_bump" + "\", \"\" {\r\n");
                    sw.Write("        Type: \"TextureVideoClip\"\r\n");
                    sw.Write("        Version: 202\r\n");
                    sw.Write("        TextureName: \"Texture::" + @mat.name + "_bump" + "\"\r\n");
                    sw.Write("        Properties60:  {\r\n");
                    sw.Write("            Property: \"TextureTypeUse\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"Texture alpha\", \"Number\", \"A+\",1\r\n");
                    sw.Write("            Property: \"CurrentMappingType\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"WrapModeU\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"WrapModeV\", \"enum\", \"\",0\r\n");
                    sw.Write("            Property: \"UVSwap\", \"bool\", \"\",0\r\n");
                    sw.Write("            Property: \"Translation\", \"Vector\", \"A+\"," + Convert.ToString(mat.GetTextureOffset("_BumpMap").x).Replace(",", ".") + "," + Convert.ToString(mat.GetTextureOffset("_BumpMap").y).Replace(",", ".") + ",0\r\n");
                    sw.Write("            Property: \"Rotation\", \"Vector\", \"A+\",0,0,0\r\n");
                    sw.Write("            Property: \"Scaling\", \"Vector\", \"A+\"," + Convert.ToString(mat.GetTextureScale("_BumpMap").x).Replace(",", ".") + "," + Convert.ToString(mat.GetTextureScale("_BumpMap").y).Replace(",", ".") + ",1\r\n");
                    sw.Write("            Property: \"TextureRotationPivot\", \"Vector3D\", \"\",0,0,0\r\n");
                    sw.Write("            Property: \"TextureScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n");
                    sw.Write("            Property: \"UseMaterial\", \"bool\", \"\",1\r\n");
                    sw.Write("            Property: \"UseMipMap\", \"bool\", \"\",0\r\n");
                    sw.Write("            Property: \"CurrentTextureBlendMode\", \"enum\", \"\",1\r\n");
                    sw.Write("            Property: \"UVSet\", \"KString\", \"\", \"UVChannel_1\"\r\n");
                    sw.Write("        }\r\n");
                    //sw.Write("        Media: \"Video::" +@ta2[0]+"_bump" + "\"\r\n");
                    sw.Write("        FileName: \"" + (ProPath + AssetDatabase.GetAssetPath(tex0)) + "\"\r\n");
                    //sw.Write("        RelativeFilename: \"" +  (ProPath + EditorUtility.GetAssetPath(tex0)) + "\"\r\n");
                    sw.Write("        ModelUVTranslation: 0,0\r\n");
                    sw.Write("        ModelUVScaling: 1,1\r\n");
                    sw.Write("        Texture_Alpha_Source: \"None\"\r\n");
                    sw.Write("        Cropping: 0,0,0,0\r\n");
                    sw.Write("    }\r\n");
                }
            }

// ######### Global Settings

            sw.Write("    GlobalSettings:  {\r\n");
            sw.Write("        Version: 1000\r\n");
            sw.Write("        Properties60:  {\r\n");
            sw.Write("            Property: \"UpAxis\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"UpAxisSign\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"FrontAxis\", \"int\", \"\",2\r\n");
            sw.Write("            Property: \"FrontAxisSign\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"CoordAxis\", \"int\", \"\",0\r\n");
            sw.Write("            Property: \"CoordAxisSign\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"OriginalUpAxis\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"OriginalUpAxisSign\", \"int\", \"\",1\r\n");
            sw.Write("            Property: \"UnitScaleFactor\", \"double\", \"\"," + LightmappingTool.exportScale + "\r\n");
            sw.Write("        }\r\n");
            sw.Write("    }\r\n");


            EditorUtility.DisplayProgressBar("Exporting FBX", "Writing connections...", 0.95f);
            sw.Write("}\r\n");
            sw.Write("\r\n\r\n");
            sw.Write("; Object connections\r\n");
            sw.Write(";------------------------------------------------------------------\r\n");
            sw.Write("\r\n");
            sw.Write("Connections:  {\r\n");

            for (int i = 0; i < lights.Length; i++)
            {
                sw.Write("    Connect: \"OO\", \"Model::ImportedLight" + (i + 1) + "\", \"Model::Scene\"\r\n");
            }

            for (int obj = 0; obj < bigArray.Count; obj++)
            {
                sw.Write("    Connect: \"OO\", \"Model::ImportedObject" + Convert.ToString(obj + 1) + "\", \"Model::Scene\"\r\n");
                foreach (Material mat in ((ArrayList)uniqueMaterialsArray[obj]))
                {
                    sw.Write("    Connect: \"OO\", \"Material::" + @mat.name + "\", \"Model::ImportedObject" + Convert.ToString(obj + 1) + "\"\r\n");
                    if (mat.HasProperty("_MainTex") && (mat.GetTexture("_MainTex")))
                    {
                        sw.Write("    Connect: \"OO\", \"Texture::" + @mat.name + "_diff" + "\", \"Model::ImportedObject" + Convert.ToString(obj + 1) + "\"\r\n");
                    }
                }
            }
            for (int obj = 0; obj < bigArray.Count; obj++)
            {
                foreach (Material mat in ((ArrayList)uniqueMaterialsArray[obj]))
                {
                    if (mat.HasProperty("_BumpMap") && (mat.GetTexture("_BumpMap")))
                    {
                        sw.Write("    Connect: \"OO\", \"Texture::" + @mat.name + "_bump" + "\", \"Model::ImportedObject" + Convert.ToString(obj + 1) + "\"\r\n");
                    }
                }
            }
            sw.Write("}\r\n");
            sw.Write(FBXFooter());
            //sw.Write(sb.ToString().Replace("E-0", "e-00"));
            sw.Close();
            sw.Dispose();
            EditorUtility.ClearProgressBar();

            return(true);
        }
    }