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);
            }
        }
Example #3
0
        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;
        }
Example #4
0
        //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);
        }
    }
Example #6
0
        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);
        }
Example #7
0
        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;
            }
        }
Example #8
0
 public SupportedDatasetType(string name,
     string extension,
     InputFileType type)
 {
     Name = name;
     InputType = type;
     Extension = extension;
 }
Example #9
0
 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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
 /// <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;
 }
Example #14
0
        // 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);
            }
        }
Example #15
0
        /// <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));
        }
Example #19
0
 public void SetInputFile(string name, InputFileType type)
 {
     string arg = EnumHelper.GetDescription(type);
     SetArgument(arg, name);
 }
Example #20
0
        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;
        }
Example #21
0
    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
    }
Example #22
0
 public InputFile(Some <string> path, InputFileType type, Option <string> content)
 {
     Path    = path;
     Type    = type;
     Content = content;
 }