public TextWriter GetDestnationWriter(int runInstanceId, InputFileType storeContentType, Encoding encoding) { Directory.CreateDirectory(GetRunInstanceDirectory(runInstanceId)); string filePath = GetInputFilePath(runInstanceId, storeContentType); return(new StreamWriter(filePath, false, encoding, 20480)); }
private void InitializeFileTypes() { try { // Get input file type. string strfileType = ConfigurationManager.AppSettings["FileType"]; if (!string.IsNullOrEmpty(strfileType)) { // TODO: change implementation to accomodate other formats. fileType = (strfileType.ToUpper().Trim() == "JSON") ? InputFileType.JSON : InputFileType.CSV; } // Set the filter for open file dialog, based on file type. switch (fileType) { case InputFileType.CSV: ofdMappingFile.Filter = "csv files (*.csv)|*.csv|All files|*.*"; break; case InputFileType.JSON: ofdMappingFile.Filter = "JSon files (*.json)|*.json|All files|*.*"; break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public static string BuildFileFilters(InputFileType type) { var fileFilter = "All Files (*.*)|*.*"; switch (type) { case InputFileType.Sequence: fileFilter = AppendExtension(fileFilter, "SEQUEST Synopsis", ".syn"); fileFilter = AppendExtension(fileFilter, "MSGF+ FHT", "fht_msgf.txt"); fileFilter = AppendExtension(fileFilter, "MSGF+ TSV", "_msgf.tsv"); break; case InputFileType.Features: fileFilter = AppendExtension(fileFilter, "DeconTools Features Files", "_isos.csv"); fileFilter = AppendExtension(fileFilter, "LCMS Feature Finder Files", "LCMSFeatures.txt"); break; case InputFileType.Scans: fileFilter = AppendExtension(fileFilter, "DeconTools Scan Files", "_scans.csv"); break; case InputFileType.Raw: fileFilter = AppendExtension(fileFilter, "Thermo Raw", ".raw"); fileFilter = AppendExtension(fileFilter, "MZ XML", ".mzxml"); break; } return fileFilter; }
//Some Hard-coded Stuff. public static string[] ReadAllLines(InputFileType inputFileType) { var day = (new System.Diagnostics.StackTrace()).GetFrame(1).GetMethod().ReflectedType.FullName.Split('.')[2]; var fileName = $"Puzzles/{day}/Input_{inputFileType}.txt"; return(File.ReadAllLines(fileName)); }
public bool UpdateInputFileType(string name, bool required, string type) { string owner = Container.GetAppContext().UserName; using (TurbineModelContainer container = new TurbineModelContainer()) { var user = container.Users.Single <User>(s => s.Name == owner); var obj = container.Applications. Single <Application>(s => s.Name == applicationName); if (user != obj.User) { throw new AuthorizationError(String.Format("Only owner {0} of application {1} can update it", owner, name)); } var fileType = container.InputFileTypes.SingleOrDefault <InputFileType>(s => s.ApplicationName == applicationName & s.Name == name); if (fileType == null) { fileType = new InputFileType() { Name = name, Required = required, Type = type, Id = Guid.NewGuid(), ApplicationName = applicationName } } ; fileType.Required = required; fileType.Type = type; obj.InputFileTypes.Add(fileType); container.SaveChanges(); } return(true); } }
public static string BuildFileFilters(InputFileType type) { var fileFilter = "All Files (*.*)|*.*"; switch (type) { case InputFileType.Sequence: fileFilter = AppendExtension(fileFilter, "SEQUEST Synopsis", ".syn"); fileFilter = AppendExtension(fileFilter, "MSGF+ FHT", "fht_msgf.txt"); fileFilter = AppendExtension(fileFilter, "MSGF+ TSV", "_msgf.tsv"); break; case InputFileType.Features: fileFilter = AppendExtension(fileFilter, "DeconTools Features Files", "_isos.csv"); fileFilter = AppendExtension(fileFilter, "LCMS Feature Finder Files", "LCMSFeatures.txt"); break; case InputFileType.Scans: fileFilter = AppendExtension(fileFilter, "DeconTools Scan Files", "_scans.csv"); break; case InputFileType.Raw: fileFilter = AppendExtension(fileFilter, "Thermo Raw", ".raw"); fileFilter = AppendExtension(fileFilter, "MZ XML", ".mzxml"); break; } return(fileFilter); }
public InputFile(string input, InputFileType type) { File = input; Type = type; var uri = new Uri(input); Filename = Path.GetFileName(uri.LocalPath); FilenameWithoutExtension = Path.GetFileNameWithoutExtension(uri.LocalPath); if (Type == InputFileType.Url) { try { //Try getting file size var req = (HttpWebRequest)WebRequest.Create(input); req.Method = "HEAD"; using (var resp = (HttpWebResponse)req.GetResponse()) { FileSize = resp.ContentLength; } } catch { FileSize = 0; } } else if (Type == InputFileType.File) { FileSize = new FileInfo(input).Length; } }
public SupportedDatasetType(string name, string extension, InputFileType type) { Name = name; InputType = type; Extension = extension; }
public SupportedFileType(string name, string extension, InputFileType type) { Name = name; InputType = type; Extension = extension; }
/// <summary> /// Create context for file parsing /// </summary> /// <param name="inputFileType">InputFileType enum</param> /// <returns>Parser context</returns> public static IFileParser CreateContext(InputFileType inputFileType) { IFileParser context = null; switch (inputFileType) { case InputFileType.Xml: context = new XMLParser(horseNameXPath, horseNumberXPath, horsePriceXPath); break; case InputFileType.Json: context = new JSONParser(); break; } return(context); }
private bool TryCompileFile(string filename, string path, InputFileType fileType, string outputDirectory, IEnumerable <string> includeDirectories, out CompiledObject compiledObject) { Console.WriteLine("Compiling {0}", path); var arguments = ""; //InputFile file = new InputFile {Path = filePath}; // figure out tool based on extension //var extension = (Path.GetExtension(in) ?? string.Empty).ToLower(); var tool = ""; switch (fileType) { case InputFileType.CSource: tool = _configuration.CCompilerTool; arguments += _configuration.CFlags + " -c "; // "-Wall -O2 -nostdlib -nostartfiles -ffreestanding -c "; if (_configuration.Verbose) { arguments += "-v "; } arguments += string.Join(" ", includeDirectories.Select(t => string.Format("-I {0} ", t)).ToArray()); break; case InputFileType.AsmSource: if (_configuration.Verbose) { arguments += "--verbose "; } tool = _configuration.AssemblerTool; break; } arguments += string.Format(@"{0} -o {1}.o", path, Path.Combine(outputDirectory, filename)); compiledObject = null; //if (ExecuteTool(tool, arguments)) //{ // compiledObject = new CompiledObject { Name = filename, Path = outputDirectory }; // return true; //} return(false); }
public static BulkInsertResults BulkInsert(string fileName, InputFileType inputType) { var result = new BulkInsertResults(); result.Status = BulkInsertStatus.Success; try { result.RowsAffected = DbHelper.ExecuteScalar <int>("UploadData", CommandType.StoredProc, new DbParameter("fileName", fileName), new DbParameter("inputType", (int)inputType)); } catch (Exception ex) { result.Status = BulkInsertStatus.Error; result.ErrorMessage = ErrorMessage.FromException(ex); } return(result); }
/// <summary> /// Create a new File Transformer for ingesting files from the specified File Reader. /// </summary> public FileTransform(FileReader fileReader) { FileType = fileReader.inputFileType; this.fileReader = fileReader; }
// pass in inputFileType rather get from TEntity, is to allow TEntity to be EF proxy type, or anonymous type public void SaveContent <TEntity>(IEnumerable <TEntity> entities, int runInstanceId, InputFileType inputFileType) { #warning move encoding out using (var textWriter = _contentStorage.GetDestnationWriter(runInstanceId, inputFileType, ASCIIEncoding.ASCII)) { var csvWriter = new CsvWriter(textWriter); csvWriter.WriteRecords(entities); } }
/// <summary> /// Parses the user-to-groups json file /// </summary> /// <param name="path">Path to the JSon file.</param> /// <returns>A list of User2GroupsMap objects. Returns null in case of errors.</returns> public static List <User2GroupsMap> ReadUser2GroupsMapFromFile(string path, InputFileType fileType, FileContentType fileContentType) { try { if (!File.Exists(path)) { return(null); } if (fileType == InputFileType.JSON) { return(JsonConvert.DeserializeObject <List <User2GroupsMap> >(File.ReadAllText(path))); } else if (fileType == InputFileType.CSV) { string[] strAllText = File.ReadAllLines(path); List <User2GroupsMap> user2GroupsMap = new List <User2GroupsMap>(); foreach (string strLine in strAllText) { if (!strLine.StartsWith("#") && !string.IsNullOrEmpty(strLine.Trim())) { if (fileContentType == FileContentType.UsersToGroupsMapping) { string[] arr = strLine.Split(User2GroupsAndProjectsSplitter, StringSplitOptions.RemoveEmptyEntries); if (arr.Length < 3) { FileHelper.Log("Invalid entry in mapping file ->" + strLine); } else { User2GroupsMap userMap = new User2GroupsMap(arr[0], new List <string>(arr[1].Split(GroupsAndProjectsSplitter)), new List <string>(arr[2].Split(GroupsAndProjectsSplitter))); user2GroupsMap.Add(userMap); } } else if (fileContentType == FileContentType.UsersList) { string[] arr = strLine.Split(User2GroupsAndProjectsSplitter, StringSplitOptions.RemoveEmptyEntries); User2GroupsMap user = null; if (arr.Length > 1) { string[] teamProjectNames = arr[1].Split(GroupsAndProjectsSplitter); user = new User2GroupsMap(arr[0], new List <string>(), new List <string>(teamProjectNames)); } else { user = new User2GroupsMap(arr[0], new List <string>(), new List <string>()); } if (user != null) { user2GroupsMap.Add(user); } } } } return(user2GroupsMap); } } catch (Exception ex) { FileHelper.Log(ex.Message); } return(null); }
private string GetOutputFilePath(int runInstanceId, InputFileType storeContentType) { return(Path.Combine(GetRunInstanceDirectory(runInstanceId), string.Format(InputFilesGenerator.OUTPUT_FILE_NAME_PATTERN, storeContentType))); }
/// <summary> /// Create a new FileReader for the specified input file type. /// </summary> /// <param name="filename"></param> /// <param name="inputFileType"></param> public FileReader(string filename, InputFileType inputFileType) { this.inputFileType = inputFileType; }
//public async Task<string> SaveContentAsync(Stream content, int runInstanceId, InputFileType storeContentType) //{ // Directory.CreateDirectory(GetRunInstanceDirectory(runInstanceId)); // string filePath = GetFilePath(runInstanceId, storeContentType); // using (var f = File.Create(filePath, 20480, FileOptions.Asynchronous)) // { // await content.CopyToAsync(f); // return filePath; // } //} public Stream ReadOutputContent(int runInstanceId, InputFileType storeContentType) { string filePath = GetOutputFilePath(runInstanceId, storeContentType); return(File.OpenRead(filePath)); }
public void SetInputFile(string name, InputFileType type) { string arg = EnumHelper.GetDescription(type); SetArgument(arg, name); }
private bool TryCompileFile(string filename, string path, InputFileType fileType, string outputDirectory, IEnumerable<string> includeDirectories, out CompiledObject compiledObject) { Console.WriteLine("Compiling {0}", path); var arguments = ""; //InputFile file = new InputFile {Path = filePath}; // figure out tool based on extension //var extension = (Path.GetExtension(in) ?? string.Empty).ToLower(); var tool = ""; switch (fileType) { case InputFileType.CSource: tool = _configuration.CCompilerTool; arguments += _configuration.CFlags + " -c "; // "-Wall -O2 -nostdlib -nostartfiles -ffreestanding -c "; if (_configuration.Verbose) { arguments += "-v "; } arguments += string.Join(" ", includeDirectories.Select(t => string.Format("-I {0} ", t)).ToArray()); break; case InputFileType.AsmSource: if (_configuration.Verbose) { arguments += "--verbose "; } tool = _configuration.AssemblerTool; break; } arguments += string.Format(@"{0} -o {1}.o", path, Path.Combine(outputDirectory, filename)); compiledObject = null; //if (ExecuteTool(tool, arguments)) //{ // compiledObject = new CompiledObject { Name = filename, Path = outputDirectory }; // return true; //} return false; }
public static void CreateBSPFile(string OutputFile, InputFileType FileType) { BinaryWriter BSPWriter = new BinaryWriter(new FileStream(Path.ChangeExtension(OutputFile, "BSP"), FileMode.Create)); Console.WriteLine("Creating " + Path.ChangeExtension(OutputFile, "BSP")); const UInt32 RenderWare = 0x1400ffff; long SavePosition = 0; float MaxX = VertexStream[0].PositionX; float MaxY = VertexStream[0].PositionY; float MaxZ = VertexStream[0].PositionZ; float MinX = VertexStream[0].PositionX; float MinY = VertexStream[0].PositionY; float MinZ = VertexStream[0].PositionZ; foreach (Vertex i in VertexStream) { if (i.PositionX > MaxX) { MaxX = i.PositionX; } if (i.PositionY > MaxY) { MaxY = i.PositionY; } if (i.PositionZ > MaxZ) { MaxZ = i.PositionZ; } if (i.PositionX < MinX) { MinX = i.PositionX; } if (i.PositionY < MinY) { MinY = i.PositionY; } if (i.PositionZ < MinZ) { MinZ = i.PositionZ; } } //// WORLD SECTION BSPWriter.Write(0xb); //Int32 0x0B // section identifier long WorldSectionSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// MODEL HEADER STRUCT BSPWriter.Write(0x1); //Int32 0x01 // section identifier BSPWriter.Write(0x40); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(0x1); //Int32 0x01 // unknown, always this value BSPWriter.Write(new byte[] { 0, 0, 0, 0x80 }); //00 00 00 80 // unknown, always this value BSPWriter.Write(new byte[] { 0, 0, 0, 0x80 }); //00 00 00 80 // unknown, always this value BSPWriter.Write(new byte[] { 0, 0, 0, 0x80 }); //00 00 00 80 // unknown, always this value BSPWriter.Write(TriangleStream.Count); //Int32 // Number of triangles (numTriangles) BSPWriter.Write(VertexStream.Count); //Int32 // Number of vertices (numVertices) BSPWriter.Write(0); //00 00 00 00 // unknown, always this value BSPWriter.Write(1); //01 00 00 00 // unknown, always this value BSPWriter.Write(0); //00 00 00 00 // unknown, always this value BSPWriter.Write(new byte[] { 0xD, 0, 1, 0x40 }); //0D 00 01 40 // unknown, always this value BSPWriter.Write(MaxX); BSPWriter.Write(MaxY); BSPWriter.Write(MaxZ); //float32[3] // Boundary box maximum BSPWriter.Write(MinX); BSPWriter.Write(MinY); BSPWriter.Write(MinZ); //float32[3] // Boundary box minimum // Maximum values must be the bigger than minimum //No need for size here //// END MODEL HEADER STRUCT //// MATERIAL LIST SECTION BSPWriter.Write(0x8); //Int32 0x08 // section identifier long MaterialListSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// MATERIAL NUMBER STRUCT BSPWriter.Write(0x1); //Int32 0x01 // section identifier long MaterialNumberStructSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(MaterialStream.Count); //Int32 // Number of materials (numMaterials), materials are ordered by a zero-based index foreach (string i in MaterialStream) { BSPWriter.Write(new byte[] { 0xff, 0xff, 0xff, 0xff }); } //numMaterials* Int32 0xFFFFFFFF // there Is a -1 for each material long MaterialNumberStructSize = BSPWriter.BaseStream.Position - MaterialNumberStructSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = MaterialNumberStructSizeLocation; BSPWriter.Write(Convert.ToUInt32(MaterialNumberStructSize)); BSPWriter.BaseStream.Position = SavePosition; //// END MATERIAL NUMBER STRUCT foreach (string i in MaterialStream) { //// MATERIAL REF SECTION // this section occours numMaterials times BSPWriter.Write(0x7); //Int32 0x07 // section identifier long MaterialRefSectionSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// MATERIAL STRUCT BSPWriter.Write(0x1); //Int32 0x01 // section identifier BSPWriter.Write(0x1c); //Int32 // section size (always 0x1C) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(0); //Int32 0x00 // ununsed flags BSPWriter.Write(new byte[] { 0xff, 0xff, 0xff, 0xff }); //int8[4] RGBA // Material RGBA (usually 255, 255, 255, 255) BSPWriter.Write(new byte[] { 0x84, 0x3e, 0xf5, 0x2d }); //Int32 84 3E F5 2D // always this value, unused BSPWriter.Write(1); //bool32 // uses texture? (usually 0x01) BSPWriter.Write(Convert.ToSingle(1)); BSPWriter.Write(Convert.ToSingle(1)); BSPWriter.Write(Convert.ToSingle(1)); //float32[3] // ambient, specular, diffuse // don't know if these are used. always (1, 1, 1) //No need for size here //// END MATERIAL STRUCT //// TEXTURE SECTION BSPWriter.Write(0x6); //Int32 0x06 // section identifier long TextureSectionSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// TEXTURE FLAG STRUCT BSPWriter.Write(1); //Int32 0x01 // section identifier BSPWriter.Write(4); //Int32 // section size (always 0x04) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(Convert.ToByte(2)); //int8 // Byte, texture filtering mode (usually 0x02) BSPWriter.Write(Convert.ToByte(0x11)); //4bit // half the byte: U adressing mode (usually 0001) //4bit // half the byte: V adressing mode (usually 0001) BSPWriter.Write(Convert.ToUInt16(0x1)); //bool16 // Byte: use mipmap?(usually 0x01) //No need for size here //// END TEXTURE FLAG STRUCT //// DIFFUSE TEXTURE NAME SECTION BSPWriter.Write(2); //Int32 0x02 // section identifier int DiffuseTextureNameSize = i.Length; if (i.Length % 4 == 1) { DiffuseTextureNameSize += 3; } else if (i.Length % 4 == 2) { DiffuseTextureNameSize += 2; } else if (i.Length % 4 == 3) { DiffuseTextureNameSize += 1; } else if (i.Length % 4 == 0) { DiffuseTextureNameSize += 4; } BSPWriter.Write(DiffuseTextureNameSize); //Int32 // section size BSPWriter.Write(new byte[] { 0xff, 0xff, 0x0 }); //Int32 0x1400FFFF long ByteBeforeTextureNameStarts = BSPWriter.BaseStream.Position; BSPWriter.Write(i); //String // texture name if (i.Length % 4 == 0) { BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); } else if (i.Length % 4 == 1) { BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); } else if (i.Length % 4 == 2) { BSPWriter.Write(Convert.ToByte(0)); BSPWriter.Write(Convert.ToByte(0)); } else if (i.Length % 4 == 3) { BSPWriter.Write(Convert.ToByte(0)); } SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = ByteBeforeTextureNameStarts; BSPWriter.Write(Convert.ToByte(0x14)); BSPWriter.BaseStream.Position = SavePosition; //No need for size here //// END DIFFUSE TEXTURE NAME SECTION //// ALPHA TEXTURE NAME SECTION // unused section, alphas are set in the TXD BSPWriter.Write(2); //Int32 0x02 // section identifier BSPWriter.Write(4); //Int32 // section size (always 0x04) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(0); //String // alpha texture name (unused, always left blank) //No need for size here //// END ALPHA TEXTURE NAME SECTION //// TEXTURE EXTENSION // this section does absolutely nothing BSPWriter.Write(3); //Int32 0x03 // section identifier BSPWriter.Write(0); //Int32 // section size (0x00) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //No need for size here //// END TEXTURE EXTENSION long TextureSectionSize = BSPWriter.BaseStream.Position - TextureSectionSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = TextureSectionSizeLocation; BSPWriter.Write(Convert.ToUInt32(TextureSectionSize)); BSPWriter.BaseStream.Position = SavePosition; //// END TEXTURE SECTION //// MATERIAL EXTENSION // this section does absolutely nothing BSPWriter.Write(3); //Int32 0x03 // section identifier BSPWriter.Write(0); //Int32 // section size (0x00) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //No need for size here //// END MATERIAL EXTENSION long MaterialRefSectionSize = BSPWriter.BaseStream.Position - MaterialRefSectionSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = MaterialRefSectionSizeLocation; BSPWriter.Write(Convert.ToUInt32(MaterialRefSectionSize)); BSPWriter.BaseStream.Position = SavePosition; //// END MATERIAL REF SECTION } long MaterialListSize = BSPWriter.BaseStream.Position - MaterialListSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = MaterialListSizeLocation; BSPWriter.Write(Convert.ToUInt32(MaterialListSize)); BSPWriter.BaseStream.Position = SavePosition; //// END MATERIAL LIST SECTION //// ATOMIC SECTION BSPWriter.Write(9); //Int32 0x09 // section identifier long AtomicSectionSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// ATOMIC STRUCT BSPWriter.Write(1); //Int32 0x01 // section identifier long AtomicStructSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(0); //Int32 // model flags (usually 0x00) BSPWriter.Write(TriangleStream.Count); //Int32 // Number of triangles (numTriangles) BSPWriter.Write(VertexStream.Count); //Int32 // Number of vertices (numVertices) BSPWriter.Write(MaxX); BSPWriter.Write(MaxY); BSPWriter.Write(MaxZ); //float32[3] // Boundary box maximum BSPWriter.Write(MinX); BSPWriter.Write(MinY); BSPWriter.Write(MinZ); //float32[3] // Boundary box minimum // These last 6 values are the same ones in the model header BSPWriter.Write(new byte[] { 0x84, 0xd9, 0x50, 0x2f }); //84 D9 50 2F // always this, unknown BSPWriter.Write(0); //Int32 0x00 // unknown, always 0x00 foreach (Vertex v in VertexStream) { BSPWriter.Write(v.PositionX); BSPWriter.Write(v.PositionY); BSPWriter.Write(v.PositionZ); } //numVertices* float32[3] // X, Y, Z position coordinate for each vertex if (FileType == InputFileType.OBJ) { for (int i = 0; i < VertexStream.Count; i++) { BSPWriter.Write(new byte[] { 255, 255, 255, 255 }); } } //numVertices* int8[4] // RGBA vertex color for each vertex foreach (Vertex v in VertexStream) { BSPWriter.Write(v.PositionU); BSPWriter.Write(-(v.PositionV)); } //numVertices* float32[2] // U, V texture mapping coordinate for each vertex foreach (Triangle f in TriangleStream) { BSPWriter.Write(Convert.ToUInt16(f.MaterialIndex)); BSPWriter.Write(Convert.ToUInt16(f.Vertex1)); BSPWriter.Write(Convert.ToUInt16(f.Vertex2)); BSPWriter.Write(Convert.ToUInt16(f.Vertex3)); } //numTriangles* Int16[4] // (materialIndex, vertex1, vertex2, vertex3) index for each triangle, culling Is counterclockwise long AtomicStructSize = BSPWriter.BaseStream.Position - AtomicStructSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = AtomicStructSizeLocation; BSPWriter.Write(Convert.ToUInt32(AtomicStructSize)); BSPWriter.BaseStream.Position = SavePosition; //// END ATOMIC STRUCT //// ATOMIC EXTENSION BSPWriter.Write(3); //Int32 0x03 // section identifier long AtomicExtensionSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// BIN MESH PLG SECTION BSPWriter.Write(0x50e); //Int32 0x50E // section identifier long BinMeshPLGSizeLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); //Int32 // section size BSPWriter.Write(RenderWare); //Int32 0x1400FFFF BSPWriter.Write(0); //UInt32 // flags(0 = Triangle lists, 1 = Triangle strips; Sonic Heroes always uses tristrips, don't know if it even supports trilists) BSPWriter.Write(MaterialStream.Count); // UInt32 // Number of objects/meshes (numMeshes; usually same number of materials) long TotalNumberOfTristripIndiciesLocation = BSPWriter.BaseStream.Position; long TotalNumberOfTristripIndicies = 0; BSPWriter.Write(0); //UInt32 // total number of indices for (int i = 0; i < MaterialStream.Count; i++) { List <Triangle> TriangleStream2 = new List <Triangle>(); foreach (Triangle f in TriangleStream) { if (f.MaterialIndex == i) { TriangleStream2.Add(f); } } long NumberOfTristripIndiciesLocation = BSPWriter.BaseStream.Position; BSPWriter.Write(0); // UInt32 // Number of vertex indices in this mesh (numIndices) BSPWriter.Write(i); // UInt32 // material index // UInt32[numIndices] // Vertex indices foreach (Triangle t in TriangleStream2) { BSPWriter.Write(t.Vertex1); BSPWriter.Write(t.Vertex2); BSPWriter.Write(t.Vertex3); } long NumberOfTristripIndicies = (BSPWriter.BaseStream.Position - NumberOfTristripIndiciesLocation - 8) / 4; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = NumberOfTristripIndiciesLocation; BSPWriter.Write(Convert.ToUInt32(NumberOfTristripIndicies)); BSPWriter.BaseStream.Position = SavePosition; TotalNumberOfTristripIndicies += NumberOfTristripIndicies; } SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = TotalNumberOfTristripIndiciesLocation; BSPWriter.Write(Convert.ToUInt32(TotalNumberOfTristripIndicies)); BSPWriter.BaseStream.Position = SavePosition; long BinMeshPLGSize = BSPWriter.BaseStream.Position - BinMeshPLGSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = BinMeshPLGSizeLocation; BSPWriter.Write(Convert.ToUInt32(BinMeshPLGSize)); BSPWriter.BaseStream.Position = SavePosition; //// END BIN MESH PLG SECTION long AtomicExtensionSize = BSPWriter.BaseStream.Position - AtomicExtensionSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = AtomicExtensionSizeLocation; BSPWriter.Write(Convert.ToUInt32(AtomicExtensionSize)); BSPWriter.BaseStream.Position = SavePosition; //// END ATOMIC EXTENSION long AtomicSectionSize = BSPWriter.BaseStream.Position - AtomicSectionSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = AtomicSectionSizeLocation; BSPWriter.Write(Convert.ToUInt32(AtomicSectionSize)); BSPWriter.BaseStream.Position = SavePosition; //// END ATOMIC SECTION //// WORLD EXTENSION // this section does absolutely nothing BSPWriter.Write(3); //Int32 0x03 // section identifier BSPWriter.Write(0); //Int32 // section size (0x00) BSPWriter.Write(RenderWare); //Int32 0x1400FFFF //// END WORLD EXTENSION long WorldSectionSize = BSPWriter.BaseStream.Position - WorldSectionSizeLocation - 8; SavePosition = BSPWriter.BaseStream.Position; BSPWriter.BaseStream.Position = WorldSectionSizeLocation; BSPWriter.Write(Convert.ToUInt32(WorldSectionSize)); BSPWriter.BaseStream.Position = SavePosition; //// END WORLD SECTION }
public InputFile(Some <string> path, InputFileType type, Option <string> content) { Path = path; Type = type; Content = content; }