void ProcessLinkedDocuments() { List <string> LinkedDocumentsToRemove = new List <string>(); // Check for modified linked documents. foreach (var LinkedDocEntry in RootCache.LinkedDocumentsCache) { // Check if the link was removed. string LinkedDocPath = LinkedDocEntry.Key; if (!ExportedLinkedDocuments.ContainsKey(LinkedDocPath)) { LinkedDocumentsToRemove.Add(LinkedDocPath); continue; } // Check if the link was modified. FCachedDocumentData LinkedDocCache = LinkedDocEntry.Value; if (ModifiedLinkedDocuments.Contains(LinkedDocCache.SourceDocument)) { LinkedDocCache.Purge(DatasmithScene, true); } LinkedDocCache.ExportedElements.Clear(); } foreach (var LinkedDoc in LinkedDocumentsToRemove) { RootCache.LinkedDocumentsCache[LinkedDoc].Purge(DatasmithScene, true); RootCache.LinkedDocumentsCache.Remove(LinkedDoc); } }
public void OnBeginLinkedDocument(Document InDocument) { if (!CurrentCache.LinkedDocumentsCache.ContainsKey(InDocument.PathName)) { CurrentCache.LinkedDocumentsCache[InDocument.PathName] = new FCachedDocumentData(InDocument); } CacheStack.Push(CurrentCache.LinkedDocumentsCache[InDocument.PathName]); CurrentCache = CurrentCache.LinkedDocumentsCache[InDocument.PathName]; }
private void Destroy(Application InApp) { StopMetadataExport(); InApp.DocumentChanged -= DocumentChangedHandler; DocumentChangedHandler = null; DatasmithDirectLink = null; DatasmithScene = null; RootCache = null; ModifiedLinkedDocuments.Clear(); }
private FDirectLink(Document InDocument) { RootCache = new FCachedDocumentData(InDocument); CurrentCache = RootCache; DatasmithScene = new FDatasmithFacadeScene( FDatasmithRevitExportContext.HOST_NAME, FDatasmithRevitExportContext.VENDOR_NAME, FDatasmithRevitExportContext.PRODUCT_NAME, InDocument.Application.VersionNumber); SceneName = Path.GetFileNameWithoutExtension(RootCache.SourceDocument.PathName); string SceneLabel = Path.GetFileNameWithoutExtension(InDocument.PathName); DatasmithScene.SetLabel(SceneLabel); DocumentChangedHandler = new EventHandler <DocumentChangedEventArgs>(OnDocumentChanged); InDocument.Application.DocumentChanged += DocumentChangedHandler; }
public void OnEndLinkedDocument() { CacheStack.Pop(); CurrentCache = CacheStack.Count > 0 ? CacheStack.Peek() : RootCache; }