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()); }
public async Task <ActionResult <SRModel> > PostSRModel(SRModel sRModel) { _context.SRModels.Add(sRModel); await _context.SaveChangesAsync(); return(CreatedAtAction("GetSRModel", new { id = sRModel.SRModelId }, sRModel)); }
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];
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];