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); }
public ExtractionReportInfo() { ExtractionData = new ExtractionData(); }
public CityModifier(ExtractionData dataForExtraction) { DataForExtraction = dataForExtraction; }
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); }