/// <summary> /// Возвращает текстовое представление настроек копирования элементов /// </summary> /// <param name="copyingOptions">Настройки копирования элементов</param> /// <returns>Текстовое представление настроек копирования элементов</returns> private string GetCopyingOptionsName(CopyingOptions copyingOptions) { switch (copyingOptions) { case CopyingOptions.AllowDuplicates: return(ModPlusAPI.Language.GetItem(LangItem, "co1")); case CopyingOptions.RefuseDuplicate: return(ModPlusAPI.Language.GetItem(LangItem, "co2")); case CopyingOptions.AskUser: return(ModPlusAPI.Language.GetItem(LangItem, "co3")); default: return(string.Empty); } }
/// <summary> /// Копирует все выбранные элементы в выбранные документы /// </summary> /// <param name="documentFrom">Документ из которого производится копирование</param> /// <param name="documentsTo">Список документов в которые осуществляется копирование</param> /// <param name="elements">Список элементов Revit</param> /// <param name="copyingOptions">Настройки копирования элементов</param> public async void CopyElements( RevitDocument documentFrom, IEnumerable <RevitDocument> documentsTo, List <BrowserItem> elements, CopyingOptions copyingOptions) { _uiApplication.Application.FailuresProcessing += Application_FailuresProcessing; var revitDocuments = documentsTo.ToList(); Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m5"), DateTime.Now.ToLocalTime(), documentFrom.Title, string.Join(", ", revitDocuments.Select(doc => doc.Title)))); Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m8"), GetCopyingOptionsName(copyingOptions))); var copyPasteOption = new CopyPasteOptions(); switch (copyingOptions) { case CopyingOptions.AllowDuplicates: copyPasteOption.SetDuplicateTypeNamesHandler(new CustomCopyHandlerAllow()); break; case CopyingOptions.RefuseDuplicate: copyPasteOption.SetDuplicateTypeNamesHandler(new CustomCopyHandlerAbort()); break; } foreach (var documentTo in revitDocuments) { foreach (var element in elements) { var succeed = true; try { await Task.Delay(100).ConfigureAwait(true); var elementId = new ElementId(element.Id); var revitElement = documentFrom.Document.GetElement(elementId); ICollection <ElementId> elementIds = new List <ElementId> { elementId }; using (var transaction = new Transaction( documentTo.Document, ModPlusAPI.Language.GetItem(LangItem, "m27"))) { transaction.Start(); try { if (revitElement.GetType() == typeof(Workset)) { if (documentTo.Document.IsWorkshared) { Workset.Create(documentTo.Document, revitElement.Name); } else { Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m9"), DateTime.Now.ToLocalTime(), documentTo.Title)); } } if (_stopCopyingOperation) { _stopCopyingOperation = false; OnPassedElementsCountChanged(true); return; } ElementTransformUtils.CopyElements( documentFrom.Document, elementIds, documentTo.Document, null, copyPasteOption); } catch (Exception e) { Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m7"), DateTime.Now.ToLocalTime(), element.Name, element.Id, element.CategoryName, e.Message)); succeed = false; } transaction.Commit(); } } catch (Exception e) { Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m7"), DateTime.Now.ToLocalTime(), element.Name, element.Id, element.CategoryName, e.Message)); succeed = false; } if (!succeed) { OnBrokenElementsCountChanged(); } _passedElements++; if (_passedElements == elements.Count * revitDocuments.Count) { OnPassedElementsCountChanged(true); _passedElements = 0; _uiApplication.Application.FailuresProcessing -= Application_FailuresProcessing; } else { OnPassedElementsCountChanged(false); } } } Logger.Instance.Add(string.Format( ModPlusAPI.Language.GetItem(LangItem, "m6"), DateTime.Now.ToLocalTime(), documentFrom.Title, string.Join(", ", revitDocuments.Select(doc => doc.Title)))); Logger.Instance.Add("---------"); }