Exemplo n.º 1
0
        public void NullEntityModelSelector()
        {
            ModelExtractor extractor = new ModelExtractor();
            var            model     = new ModelDefinition <N>();

            var result = extractor.Extract(CreatePage(), model).First() as Dictionary <string, dynamic>;

            Assert.Equal("i am title", result["title"]);
            Assert.Equal("i am dotnetspider", result["dotnetspider"]);
        }
Exemplo n.º 2
0
        public void EntityModelSelector()
        {
            ModelExtractor extractor = new ModelExtractor();
            IModel         model     = new ModelDefinition <E>();

            var results = extractor.Extract(CreatePage(), model).ToList();

            Assert.Equal(2, results.Count());

            Assert.Equal("a", results[0]["title"]);
            Assert.Equal("b", results[1]["title"]);
        }
Exemplo n.º 3
0
        public void NullModelSelector()
        {
            var fields = new[]
            {
                new FieldSelector("./div[@class='title']", "title"),
                new FieldSelector("./div[@class='dotnetspider']", "dotnetspider"),
            };
            var            model     = new ModelDefinition(null, fields);
            ModelExtractor extractor = new ModelExtractor();

            var result = extractor.Extract(CreatePage(), model).First() as Dictionary <string, dynamic>;

            Assert.Equal("i am title", result["title"]);
            Assert.Equal("i am dotnetspider", result["dotnetspider"]);
        }
Exemplo n.º 4
0
        public void ModelSelector()
        {
            var entitySelector = new Selector("//div[@class='aaaa']");
            var fields         = new[]
            {
                new FieldSelector(".", "title"),
            };
            var            model     = new ModelDefinition(entitySelector, fields);
            ModelExtractor extractor = new ModelExtractor();

            var results = extractor.Extract(CreatePage(), model).ToList();

            Assert.Equal(2, results.Count());

            Assert.Equal("a", results[0]["title"]);
            Assert.Equal("b", results[1]["title"]);
        }
Exemplo n.º 5
0
        public TagViewer(Settings Settings, Extractor Output)
        {
            InitializeComponent();
            settings = Settings;
            output   = Output;

            vMeta = new MetaViewer();
            eBitm = new BitmapExtractor();
            eMode = new ModelExtractor();
            eSnd_ = new SoundExtractor();
            eSnd4 = new SoundExtractorH4();
            vUnic = new StringsViewer();
            eSbsp = new BSPExtractor();
            vS3D  = new S3DExplorer();

            eBitm.TagExtracted             += new TagExtractedEventHandler(extractor_TagExtracted);
            eMode.TagExtracted             += new TagExtractedEventHandler(extractor_TagExtracted);
            eSnd_.TagExtracted             += new TagExtractedEventHandler(extractor_TagExtracted);
            eSnd4.TagExtracted             += new TagExtractedEventHandler(extractor_TagExtracted);
            eSbsp.TagExtracted             += new TagExtractedEventHandler(extractor_TagExtracted);
            eBitm.ErrorExtracting          += new ErrorExtractingEventHandler(extractor_ErrorExtracting);
            eMode.ErrorExtracting          += new ErrorExtractingEventHandler(extractor_ErrorExtracting);
            eSnd_.ErrorExtracting          += new ErrorExtractingEventHandler(extractor_ErrorExtracting);
            eSnd4.ErrorExtracting          += new ErrorExtractingEventHandler(extractor_ErrorExtracting);
            eSbsp.ErrorExtracting          += new ErrorExtractingEventHandler(extractor_ErrorExtracting);
            eMode.FinishedRecursiveExtract += new FinishedRecursiveExtractEventHandler(eMode_FinishedRecursiveExtract);
            eSbsp.FinishedRecursiveExtract += new FinishedRecursiveExtractEventHandler(eMode_FinishedRecursiveExtract);

            eBitm.DefaultBitmFormat = settings.BitmFormat;
            eMode.DefaultBitmFormat = settings.BitmFormat;
            eMode.DefaultModeFormat = settings.ModeFormat;
            eSnd_.DefaultSnd_Format = settings.Snd_Format;
            eSbsp.DefaultBitmFormat = settings.BitmFormat;
            eSbsp.DefaultModeFormat = settings.ModeFormat;

            tabMeta = new TabPage("Meta Viewer");
            tabMeta.Controls.Add(vMeta);
            vMeta.Dock = DockStyle.Fill;

            tabRaw   = new TabPage("Raw Extractor");
            tabModel = new TabPage("Model Viewer");

            tabControl1.TabPages.Add(tabMeta);
        }
Exemplo n.º 6
0
        public ModelExtractor perfromModelExtraction()
        {
            foreach (ModelMesh meshModel in model.Meshes)
            {
                foreach (ModelMeshPart modelMeshPartModel in meshModel.MeshParts)
                {
                    modelExtractor = new ModelExtractor(modelMeshPartModel, new Vector3[modelMeshPartModel.NumVertices * 2], new VertexPositionTexture[modelMeshPartModel.NumVertices]);
                    modelExtractor.ExtractVertices();
                }
            }

            return modelExtractor;
        }
Exemplo n.º 7
0
        private void BatchExtract(CacheBase cache, List <TreeNode> parents, Settings settings, string dest, BackgroundWorker worker)
        {
            foreach (TreeNode parent in parents)
            {
                foreach (TreeNode child in parent.Nodes)
                {
                    if (worker.CancellationPending)
                    {
                        return;
                    }

                    if (child.Nodes.Count > 0)
                    {
                        BatchExtract(cache, new List <TreeNode>()
                        {
                            child
                        }, settings, dest, worker);
                        continue;
                    }

                    var tag   = child.Tag as CacheBase.IndexItem;
                    var fName = dest + ((settings.Flags.HasFlag(SettingsFlags.OutputByType)) ? "\\" + tag.ClassName : "") + "\\" + tag.Filename;
                    var tName = tag.Filename + "." + tag.ClassCode;

                    switch (tag.ClassCode)
                    {
                        #region bink
                    case "bink":
                        try
                        {
                            //only supports H4R
                            if (cache.Version < DefinitionSet.Halo4Retail)
                            {
                                continue;
                            }

                            fName += ".bik";

                            //AddLine("Extracting " + tName + "...");
                            if (settings.Flags.HasFlag(SettingsFlags.OverwriteTags) || !File.Exists(fName))
                            {
                                BinkExtractor.SaveBink(fName, cache, tag);
                                AddLine("Extracted " + tName + ".");
                                tagsExtracted++;
                            }
                        }

                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;

                        #endregion
                        #region bitm
                    case "bitm":
                        try
                        {
                            switch (settings.BitmFormat)
                            {
                            case BitmapFormat.TIF:
                                fName += ".tif";
                                break;

                            case BitmapFormat.DDS:
                                fName += ".dds";
                                break;

                            case BitmapFormat.RAW:
                                fName += ".bin";
                                break;
                            }

                            if (settings.Flags.HasFlag(SettingsFlags.OverwriteTags) || !File.Exists(fName))
                            {
                                BitmapExtractor.SaveAllImages(fName, cache, tag, settings.BitmFormat, settings.Flags.HasFlag(SettingsFlags.BitmapAlpha));
                                AddLine("Extracted " + tName + ".");
                                tagsExtracted++;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;

                        #endregion
                        #region mode
                    case "mode":
                    case "mod2":
                        try
                        {
                            switch (settings.ModeFormat)
                            {
                            case ModelFormat.EMF:
                                fName += ".emf";
                                break;

                            case ModelFormat.JMS:
                                fName += ".jms";
                                break;

                            case ModelFormat.OBJ:
                                fName += ".obj";
                                break;

                            case ModelFormat.AMF:
                                fName += ".amf";
                                break;
                            }

                            if (settings.Flags.HasFlag(SettingsFlags.OverwriteTags) || !File.Exists(fName))
                            {
                                ModelExtractor.SaveAllModelParts(fName, cache, tag, settings.ModeFormat, settings.Flags.HasFlag(SettingsFlags.SplitMeshes));
                                AddLine("Extracted " + tName + ".");
                                tagsExtracted++;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;

                        #endregion
                        #region sbsp
                    case "sbsp":
                        try
                        {
                            //AddLine("Extracting " + tName + "...");
                            switch (settings.ModeFormat)
                            {
                            case ModelFormat.EMF:
                                fName += ".emf";
                                break;

                            case ModelFormat.OBJ:
                                fName += ".obj";
                                break;

                            case ModelFormat.AMF:
                            case ModelFormat.JMS:
                                fName += ".amf";
                                break;
                            }

                            if (settings.Flags.HasFlag(SettingsFlags.OverwriteTags) || !File.Exists(fName))
                            {
                                BSPExtractor.SaveAllBSPParts(fName, cache, tag, settings.ModeFormat);
                                AddLine("Extracted " + tName + ".");
                                tagsExtracted++;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;

                        #endregion
                        #region snd!
                    case "snd!":
                        try
                        {
                            //H2, H3B not supported
                            if (cache.Version <= DefinitionSet.Halo3Beta)
                            {
                                continue;
                            }

                            //AddLine("Extracting " + tName + "...");
                            if (cache.Version < DefinitionSet.Halo4Retail)
                            {
                                SoundExtractor.SaveAllAsSeparate(dest + tag.Filename, cache, tag, settings.Snd_Format, settings.Flags.HasFlag(SettingsFlags.OverwriteTags));
                            }
                            else
                            {
                                (new SoundExtractorH4()).SaveAllAsSeparate(dest + tag.Filename, cache, tag, settings.Snd_Format, settings.Flags.HasFlag(SettingsFlags.OverwriteTags));
                            }

                            //SoundExtractor.SaveAllAsSingle(fName, cache, tag, settings.Snd_Format);
                            AddLine("Extracted " + tag.Filename + "." + tag.ClassCode + ".");
                            tagsExtracted++;
                        }
                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;

                        #endregion
                        #region unic
                    case "unic":
                        try
                        {
                            //H2 not supported
                            if (cache.Version < DefinitionSet.Halo3Beta)
                            {
                                continue;
                            }

                            fName += ".txt";

                            //AddLine("Extracting " + tName + "...");
                            if (settings.Flags.HasFlag(SettingsFlags.OverwriteTags) || !File.Exists(fName))
                            {
                                StringsViewer.SaveUnicStrings(fName, cache, tag, settings.Language);
                                AddLine("Extracted " + tName + ".");
                                tagsExtracted++;
                            }
                        }
                        catch (Exception ex)
                        {
                            AddLine("Error extracting " + tName + ":");
                            AddLine("--" + ex.Message.Replace("\r\n", " "));
                            tagsMissed++;
                        }
                        break;
                        #endregion
                    }
                }
            }
        }
Exemplo n.º 8
0
        public override object Execute(List <string> args)
        {
            if (args.Count != 3)
            {
                return(false);
            }

            var variantName   = args[0];
            var fileType      = args[1].ToLower();
            var modelFileName = args[2];

            switch (fileType)
            {
            case "obj":
            case "amf":
            case "dae":
                break;

            default:
                throw new NotImplementedException(fileType);
            }

            //
            // Find the variant to extract
            //

            if (Definition.RenderModel == null)
            {
                Console.WriteLine("The model does not have a render model associated with it.");
                return(true);
            }


            var modelVariant = Definition.Variants.FirstOrDefault(v => (CacheContext.GetString(v.Name) ?? v.Name.ToString()) == variantName);

            if (modelVariant == null && Definition.Variants.Count > 0 && fileType != "dae")
            {
                Console.WriteLine("Unable to find variant \"{0}\"", variantName);
                Console.WriteLine("Use \"listvariants\" to list available variants.");
                return(true);
            }

            //
            // Deserialize the render model tag
            //

            RenderModel renderModel;

            using (var cacheStream = CacheContext.TagCacheFile.OpenRead())
            {
                renderModel = CacheContext.Deserialize <RenderModel>(cacheStream, Definition.RenderModel);
            }

            if (renderModel.Geometry.Resource == null)
            {
                Console.WriteLine("Render model does not have a resource associated with it");
                return(true);
            }

            //
            // Deserialize the resource definition
            //

            var resourceContext    = new ResourceSerializationContext(CacheContext, renderModel.Geometry.Resource);
            var resourceDefinition = CacheContext.Deserialize <RenderGeometryApiResourceDefinition>(resourceContext);

            using (var resourceStream = new MemoryStream())
            {
                //
                // Extract the resource data
                //

                CacheContext.ExtractResource(renderModel.Geometry.Resource, resourceStream);

                var modelFile = new FileInfo(modelFileName);

                if (!modelFile.Directory.Exists)
                {
                    modelFile.Directory.Create();
                }

                switch (fileType)
                {
                case "obj":
                    ExtractObj(modelFile, renderModel, modelVariant, resourceDefinition, resourceStream);
                    break;

                case "amf":
                    ExtractAmf(modelFile, renderModel, modelVariant, resourceDefinition, resourceStream);
                    break;

                case "dae":
                    ModelExtractor extractor = new ModelExtractor(CacheContext, renderModel);
                    extractor.ExtractRenderModel();
                    extractor.ExportCollada(modelFile);
                    break;

                default:
                    throw new NotImplementedException(fileType);
                }
            }

            Console.WriteLine("Done!");

            return(true);
        }
Exemplo n.º 9
0
        public override object Execute(List <string> args)
        {
            string variantName;
            string fileType;
            string modelFileName;

            if (args.Count == 2)
            {
                variantName   = "*";
                fileType      = args[0].ToLower();
                modelFileName = args[1];
            }
            else if (args.Count == 3)
            {
                variantName   = args[0];
                fileType      = args[1].ToLower();
                modelFileName = args[2];
            }
            else
            {
                return(false);
            }

            switch (fileType)
            {
            case "obj":
            case "dae":
                break;

            default:
                throw new NotImplementedException(fileType);
            }

            if (Definition.Geometry.Resource == null)
            {
                Console.WriteLine("Render model does not have a resource associated with it");
                return(true);
            }

            //
            // Deserialize the resource definition
            //

            var resourceContext    = new ResourceSerializationContext(CacheContext, Definition.Geometry.Resource);
            var resourceDefinition = CacheContext.Deserializer.Deserialize <RenderGeometryApiResourceDefinition>(resourceContext);

            using (var resourceStream = new MemoryStream())
            {
                //
                // Extract the resource data
                //

                CacheContext.ExtractResource(Definition.Geometry.Resource, resourceStream);

                var modelFile = new FileInfo(modelFileName);

                if (!modelFile.Directory.Exists)
                {
                    modelFile.Directory.Create();
                }

                ModelExtractor extractor = new ModelExtractor(CacheContext, Definition);
                extractor.ExtractRenderModel(variantName);

                switch (fileType)
                {
                case "obj":
                    return(extractor.ExportObject(modelFile));

                case "dae":
                    return(extractor.ExportCollada(modelFile));

                default:
                    throw new NotImplementedException(fileType);
                }
            }
        }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            CanvasAppCommands command     = CanvasAppCommands.OTHER;
            CanvasModel       canvasModel = null;
            BaseCanvas        baseCanvas  = null;
            string            input       = string.Empty;

            do
            {
                try
                {
                    Console.Write("Enter the command: ");
                    input = Console.ReadLine().Trim();
                    if (Helper.IsValidInput(input))
                    {
                        if (Helper.IsExitCommand(input))
                        {
                            break;
                        }

                        command = Helper.GetCommandName(input);
                        if (canvasModel == null)
                        {
                            canvasModel = ModelExtractor.GetCanvasModel(input);

                            baseCanvas = new BaseCanvas();
                            baseCanvas.crateCanvas(canvasModel.Width, canvasModel.Height);
                        }

                        if (canvasModel != null)
                        {
                            if (command == CanvasAppCommands.LINE)
                            {
                                LineModel lineModal = new LineModel();

                                lineModal = ModelExtractor.GetLineModal(input);
                                baseCanvas.addLine(lineModal.X1, lineModal.Y1, lineModal.X2, lineModal.Y2);
                            }

                            if (command == CanvasAppCommands.RECTANGLE)
                            {
                                RectangleModel rectangleModel = new RectangleModel();

                                rectangleModel = ModelExtractor.GetRectangleModel(input);
                                baseCanvas.addRectangle(rectangleModel.X1, rectangleModel.Y1, rectangleModel.X2, rectangleModel.Y2);
                            }

                            if (command == CanvasAppCommands.BUCKET_FILL)
                            {
                                BucketFillModel bucketFillModel = new BucketFillModel();

                                bucketFillModel = ModelExtractor.GetBucketFillModel(input);
                                baseCanvas.fill(bucketFillModel.X, bucketFillModel.Y, Convert.ToChar(bucketFillModel.Colour));
                            }


                            baseCanvas.draw();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid Command!!! Please try again...\n");
                    }
                }
                catch (InvalidCastException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (ArgumentException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (InvalidOperationException ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Unable to create Canvas!!!");
                    Console.WriteLine("Please try again C 10 4 ==>  C widht height \n");
                }

                input = string.Empty;
            } while (command != CanvasAppCommands.QUIT);
        }