コード例 #1
0
        public async Task <IActionResult> PutSRModel(int id, SRModel sRModel)
        {
            if (id != sRModel.SRModelId)
            {
                return(BadRequest());
            }

            _context.Entry(sRModel).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SRModelExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
コード例 #2
0
        public async Task <ActionResult <SRModel> > PostSRModel(SRModel sRModel)
        {
            _context.SRModels.Add(sRModel);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetSRModel", new { id = sRModel.SRModelId }, sRModel));
        }
コード例 #3
0
        public bool ExportToFile(String fileName)
        {
            string name = Utility.CleanName(Name).TrimEnd(new char[] { '_' });

            Assimp.Node            rootNode  = new Assimp.Node(name);
            List <Assimp.Material> materials = new List <Assimp.Material>();
            List <Assimp.Mesh>     meshes    = new List <Assimp.Mesh>();

            for (int modelIndex = 0; modelIndex < ModelCount; modelIndex++)
            {
                SRModel model     = Models[modelIndex];
                string  modelName = name + "-" + modelIndex;

                Assimp.Node modelNode = new Assimp.Node(modelName);

                for (int groupIndex = 0; groupIndex < model.GroupCount; groupIndex++)
                {
                    Tree group = model.Groups[groupIndex];
                    if (group == null)
                    {
                        continue;
                    }

                    string groupName = name + "-" + modelIndex + "-" + groupIndex;

                    Assimp.Node groupNode = new Assimp.Node(groupName);

                    for (int materialIndex = 0; materialIndex < model.MaterialCount; materialIndex++)
                    {
                        int        totalPolygonCount = (int)group.mesh.polygonCount;
                        List <int> polygonList       = new List <int>();

                        for (int p = 0; p < totalPolygonCount; p++)
                        {
                            if (group.mesh.polygons[p].material.ID == materialIndex)
                            {
                                polygonList.Add(p);
                            }
                        }

                        int polygonCount = polygonList.Count;
                        if (polygonCount > 0)
                        {
                            #region Mesh
                            string      meshName = name + "-" + modelIndex + "-" + groupIndex + "-" + materialIndex;
                            Assimp.Mesh mesh     = new Assimp.Mesh(meshName);
                            mesh.PrimitiveType = Assimp.PrimitiveType.Triangle;

                            ref      Polygon[] polygons = ref group.mesh.polygons;
                            Vector[] positions = model.Positions;
                            Vector[] normals   = model.Normals;
                            UInt32[] colors    = model.Colours;
                            UV[]     uvs       = model.UVs;
                            int      i         = 0;
                            for (int p = 0; p < polygonCount; p++)
                            {
                                ref Polygon polygon = ref polygons[polygonList[p]];

                                ref Vertex vert1 = ref polygon.v1;
                                ref Vertex vert2 = ref polygon.v2;
                                ref Vertex vert3 = ref polygon.v3;

                                ref Vector pos1 = ref positions[vert1.positionID];
コード例 #4
0
ファイル: SRFile.cs プロジェクト: afradley/ModelEx5
        public bool ExportToFile(String fileName, ExportOptions options)
        {
            string name = Utility.CleanName(Name).TrimEnd(new char[] { '_' });

            //Assimp.Node rootNode = new Assimp.Node(name);
            //List<Assimp.Material> materials = new List<Assimp.Material>();
            //List<Assimp.Mesh> meshes = new List<Assimp.Mesh>();
            string perModelFilename = fileName;

            for (int modelIndex = 0; modelIndex < ModelCount; modelIndex++)
            {
                Assimp.Node            rootNode  = new Assimp.Node(name);
                List <Assimp.Material> materials = new List <Assimp.Material>();
                List <Assimp.Mesh>     meshes    = new List <Assimp.Mesh>();

                SRModel model = Models[modelIndex];

                string modelName = name + "-" + modelIndex;
                Console.WriteLine(string.Format("Debug: exporting model {0} / {1} ('{2}')", modelIndex, (ModelCount - 1), modelName));
                perModelFilename = fileName;
                if (ModelCount > 1)
                {
                    string extension = Path.GetExtension(fileName);
                    if ((extension.StartsWith(".")) && (extension.Length > 1))
                    {
                        extension = extension.Substring(1);
                    }
                    perModelFilename = string.Format("{0}{1}{2}-model_{3:D4}.{4}", Path.GetDirectoryName(fileName), Path.DirectorySeparatorChar, Path.GetFileNameWithoutExtension(fileName), modelIndex, extension);
                }


                Assimp.Node modelNode = new Assimp.Node(modelName);

                for (int groupIndex = 0; groupIndex < model.GroupCount; groupIndex++)
                {
                    Tree group = model.Groups[groupIndex];
                    if (group == null)
                    {
                        continue;
                    }
                    //if (options.DiscardPortalPolygons && (groupIndex == (model.GroupCount - 1)))
                    //{
                    //    continue;
                    //}

                    string groupName = name + "-" + modelIndex + "-" + groupIndex;

                    Console.WriteLine(string.Format("\tDebug: exporting group {0} / {1} ('{2}'), mesh flags {3}", groupIndex, (model.GroupCount - 1), groupName, Convert.ToString(group.mesh.sr1BSPTreeFlags, 2).PadLeft(8, '0')));
                    if (group.mesh.sr1BSPNodeFlags.Count > 0)
                    {
                        //Console.WriteLine(string.Format("\t\t\tDebug: BSP node flags for this mesh:"));
                        for (int flagNum = 0; flagNum < group.mesh.sr1BSPNodeFlags.Count; flagNum++)
                        {
                            //Console.WriteLine(string.Format("\t\t\t\tBSP node flags {0}", Convert.ToString(group.mesh.sr1BSPNodeFlags[flagNum], 2).PadLeft(8, '0')));
                        }
                    }
                    else
                    {
                        // Console.WriteLine(string.Format("\t\t\tDebug: No BSP node flags for this mesh"));
                    }
                    if (group.mesh.sr1BSPLeafFlags.Count > 0)
                    {
                        //Console.WriteLine(string.Format("\t\t\tDebug: BSP leaf flags for this mesh:"));
                        for (int flagNum = 0; flagNum < group.mesh.sr1BSPLeafFlags.Count; flagNum++)
                        {
                            //Console.WriteLine(string.Format("\t\t\t\tBSP leaf flags {0}", Convert.ToString(group.mesh.sr1BSPLeafFlags[flagNum], 2).PadLeft(8, '0')));
                        }
                    }
                    else
                    {
                        //Console.WriteLine(string.Format("\t\t\tDebug: No BSP leaf flags for this mesh"));
                    }

                    Assimp.Node groupNode = new Assimp.Node(groupName);

                    for (int materialIndex = 0; materialIndex < model.MaterialCount; materialIndex++)
                    {
                        Console.WriteLine(string.Format("\t\tDebug: exporting material {0} / {1}", materialIndex, (model.MaterialCount - 1)));
                        int        totalPolygonCount = (int)group.mesh.polygonCount;
                        List <int> polygonList       = new List <int>();

                        for (int p = 0; p < totalPolygonCount; p++)
                        {
                            if (group.mesh.polygons[p].material.ID == materialIndex)
                            {
                                polygonList.Add(p);
                            }
                        }

                        int polygonCount = polygonList.Count;
                        if (polygonCount > 0)
                        {
                            #region Mesh
                            string meshName = name + "-" + modelIndex + "-" + groupIndex + "-" + materialIndex;
                            //string materialNamePrefix = string.Format("{0}-{1}", name, materialIndex);
                            string      materialNamePrefix = meshName;
                            Assimp.Mesh mesh    = new Assimp.Mesh(meshName);
                            bool        addMesh = true;
                            // this is a hack :\
                            int numNonZeroFlagsForMesh = 0;
                            //bool isTranslucent = false;
                            //float materialOpacity = 1.0f;
                            mesh.PrimitiveType = Assimp.PrimitiveType.Triangle;

                            Console.WriteLine(string.Format("\t\t\tDebug: exporting mesh '{0}'", meshName));

                            ref Polygon[] polygons = ref group.mesh.polygons;
                            int i = 0;
                            for (int p = 0; p < polygonCount; p++)
                            {
                                ref Polygon polygon = ref polygons[polygonList[p]];

                                if (polygon.material.polygonFlags != 0)
                                {
                                    numNonZeroFlagsForMesh++;
                                }

                                //uint mAlpha = (polygon.material.colour & 0xFF000000) >> 24;
                                //if ((mAlpha != 0xFF) && (mAlpha != 0x00))
                                //{
                                //    isTranslucent = true;
                                //    materialOpacity = (float)(mAlpha) / 255.0f;
                                //}

                                if ((polygon.material.visible) || (!options.DiscardNonVisible))
                                {
                                    //Console.WriteLine(string.Format("\t\t\t\tDebug: exporting polygon {0} / {1} - flags: {2}, texture attributes 0x{3:X4}", p, (polygonCount - 1), Convert.ToString(polygon.sr1Flags, 2).PadLeft(8, '0'), polygon.sr1TextureFT3Attributes));

                                    Vertex[] vertices = { polygon.v1, polygon.v2, polygon.v3 };
                                    for (int v = 0; v < vertices.Length; v++)
                                    {
                                        ref Vertex vert     = ref vertices[v];
                                        Geometry   geometry = vert.isExtraGeometry ? model.ExtraGeometry : model.Geometry;

                                        ref Vector[] positions = ref geometry.PositionsPhys;
                                        ref Vector[] normals = ref geometry.Normals;
                                        ref UInt32[] colors = ref geometry.Colours;
                                        ref UV[] uvs = ref geometry.UVs;

                                        if (options.ExportSpectral)
                                        {
                                            positions = model.Geometry.PositionsAltPhys;
                                            colors    = model.Geometry.ColoursAlt;
                                        }

                                        ref Vector pos = ref positions[vert.positionID];