public bool ConversationNodeContainedInChildren(IConversationTree conversationTree, IConversationTreeNode node)
        {
            if (node.HasChildren)
            {
                this.LoadItemParts(conversationTree, (from n in node.ChildNodes
                                                      select n.MainStoreObjectId).ToList <StoreObjectId>());
            }
            ItemPart itemPart = this.GetItemPart(conversationTree, node.MainStoreObjectId);

            if (itemPart != null && itemPart.Attachments != null && itemPart.Attachments.Count > 0)
            {
                return(false);
            }
            foreach (IConversationTreeNode conversationTreeNode in node.ChildNodes)
            {
                if (this.HasLoadedItemPart(conversationTreeNode.MainStoreObjectId))
                {
                    LoadedItemPart loadedItemPart = this.GetItemPart(conversationTree, node.MainStoreObjectId) as LoadedItemPart;
                    ExtractionData extractionData = null;
                    if (loadedItemPart.BodyFragmentInfo != null && this.IsBodyPartPresent(loadedItemPart.BodyFragmentInfo, node.StorePropertyBags[0], true, out extractionData))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        public bool IsBodyPartPresent(BodyFragmentInfo childBodyFragment, IStorePropertyBag parentPropertyBag, bool ignoreCache, out ExtractionData extractionData)
        {
            StoreObjectId objectId = ((VersionedId)parentPropertyBag.TryGetProperty(ItemSchema.Id)).ObjectId;
            KeyValuePair <ConversationBodyScanner, StoreObjectId> key = new KeyValuePair <ConversationBodyScanner, StoreObjectId>(childBodyFragment.BodyScanner, objectId);

            if (this.loadStatus.TryGetValue(key, out extractionData))
            {
                bool flag = extractionData != null && extractionData.BodyFragment != null;
                if (flag || !ignoreCache)
                {
                    return(flag);
                }
            }
            if (!ignoreCache && this.loadedItemParts.ContainsKey(objectId))
            {
                extractionData = new ExtractionData();
            }
            else
            {
                byte[] array = parentPropertyBag.TryGetProperty(ItemSchema.BodyTag) as byte[];
                if (array == null && ignoreCache)
                {
                    LoadedItemPart loadedItemPart = null;
                    if (this.loadedItemParts.TryGetValue(objectId, out loadedItemPart) && loadedItemPart.BodyFragmentInfo != null && loadedItemPart.BodyFragmentInfo.BodyTag != null)
                    {
                        array = loadedItemPart.BodyFragmentInfo.BodyTag.ToByteArray();
                    }
                }
                this.optimizationInfo.IncrementBodyTagMatchingAttempts();
                if (array != null)
                {
                    extractionData = new ExtractionData(childBodyFragment, BodyTagInfo.FromByteArray(array));
                    if (extractionData.BodyFragment != null)
                    {
                        this.loadStatus[key] = extractionData;
                        if (!extractionData.IsFormatReliable)
                        {
                            this.optimizationInfo.UpdateItemBodyFormatMismatched(objectId);
                            this.optimizationInfo.IncrementBodyTagMatchingIssues();
                        }
                    }
                    else
                    {
                        this.optimizationInfo.UpdateItemBodyTagMismatched(objectId);
                        this.optimizationInfo.IncrementBodyTagMatchingIssues();
                    }
                }
                else
                {
                    extractionData = new ExtractionData();
                    this.optimizationInfo.UpdateItemBodyTagNotPresent(objectId);
                    this.optimizationInfo.IncrementBodyTagMatchingIssues();
                }
            }
            this.loadStatus[key] = extractionData;
            return(extractionData.BodyFragment != null);
        }
Ejemplo n.º 3
0
 public ExtractionReportInfo()
 {
     ExtractionData = new ExtractionData();
 }
Ejemplo n.º 4
0
 public CityModifier(ExtractionData dataForExtraction)
 {
     DataForExtraction = dataForExtraction;
 }
Ejemplo n.º 5
0
 public UnitModifier(ExtractionData dataForExtraction)
 {
     DataForExtraction = dataForExtraction;
 }
        /// <summary>	Extracts a model. </summary>
        public void Extract()
        {
            var extractorSettings = SettingsHandler.ModelExtractor.Extractor;

            if (!Directory.Exists(extractorSettings.DataFolder))
            {
                mMessageHandler.SendMessage("The selected data directory does not exist");
                return;
            }

            if (!Directory.Exists(extractorSettings.TagsFolder))
            {
                mMessageHandler.SendMessage("The selected tags directory does not exist");
                return;
            }

            var tagsDir = new BlamPath(extractorSettings.TagsFolder);
            var dataDir = new BlamPath(extractorSettings.DataFolder);

            // Get the input files
            var modelFiles = GetInputFiles(tagsDir.AbsoluteFolder);

            if (modelFiles == null)
            {
                mMessageHandler.SendMessage("No models selected");
                return;
            }

            // Check that all of the selected models reside in the tags directory
            foreach (var modelFile in modelFiles)
            {
                var absoluteModelFile = Path.GetFullPath(modelFile);
                if (System.String.Compare(absoluteModelFile, 0, tagsDir.AbsoluteFolder, 0, tagsDir.AbsoluteFolder.Length, true) != 0)
                {
                    System.Windows.Forms.MessageBox.Show("A selected model file is not under the tags directory", "Invalid File Path", System.Windows.Forms.MessageBoxButtons.OK);
                    return;
                }
            }

            // Partially set up the model extraction data
            var modelExtractionData = new ModelExtractionData()
            {
                JobInterface = this,

                TagsDirectory = tagsDir,
                DataDirectory = dataDir
            };

            // Build the Collada settings
            var colladaSettings         = SettingsHandler.ModelExtractor.Collada;
            var colladaSettingsInstance = new ColladaSettingsInstance()
            {
                Overwrite     = colladaSettings.Overwrite,
                BitmapFormat  = colladaSettings.BitmapFormat,
                RootDirectory = dataDir.AbsoluteFolder
            };

            // Create extraction jobs for the selected models
            foreach (var modelFile in modelFiles)
            {
                var extractionData = new ExtractionData();

                extractionData.Set(modelExtractionData);
                extractionData.Set(colladaSettingsInstance, typeof(IColladaSettings));

                foreach (var extractorUI in mExtractors)
                {
                    var data = extractorUI.GetExtractionData();

                    if (data != null)
                    {
                        extractionData.Set(data);
                    }
                }

                AddJob(modelFile, extractionData);
            }
        }
 private bool IsBodyPartPresent(BodyFragmentInfo childBodyFragment, IStorePropertyBag parentPropertyBag, out ExtractionData extractionData)
 {
     return(this.IsBodyPartPresent(childBodyFragment, parentPropertyBag, false, out extractionData));
 }
        private bool CanSkipDiffing(IConversationTree conversationTree, LoadedItemPart loadedItemPart, out ExtractionData extractionData)
        {
            extractionData = null;
            IConversationTreeNode conversationTreeNode;

            if (conversationTree.TryGetConversationTreeNode(loadedItemPart.ObjectId, out conversationTreeNode))
            {
                IConversationTreeNode parentNode = conversationTreeNode.ParentNode;
                return(parentNode != null && parentNode.HasData && this.IsBodyPartPresent(loadedItemPart.BodyFragmentInfo, parentNode.StorePropertyBags[0], out extractionData));
            }
            return(false);
        }