public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { _uiDoc = commandData.Application.ActiveUIDocument; var doc = _uiDoc.Document; if (doc.ActiveView.ViewType != ViewType.ProjectBrowser) { using (var trg = new TransactionGroup(doc, "Копирование значений имя системы")) { trg.Start(); foreach (var cat in GetDuctCategories()) { var elementsByCat = new FilteredElementCollector(doc) .OfCategory(cat) .WhereElementIsNotElementType() .ToList(); if (elementsByCat.Count > 0) { RevitFunctions.CopySystemNameValue(doc, elementsByCat); } } trg.Assimilate(); } var td = new TaskDialog("Copy views") { Id = "ID_TaskDialog_Copy_Views", MainIcon = TaskDialogIcon.TaskDialogIconInformation, Title = "Создание копий видов с применением фильтра", TitleAutoPrefix = false, AllowCancellation = true, MainInstruction = "Данные из параметра Имя системы для всех элементов систем воздуховодов скопированы", MainContent = "Хотите создать копии текущего вида с применением фильтров по системам?" }; td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Да, создать фильтры и виды"); td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Нет"); var tdRes = td.Show(); if (tdRes != TaskDialogResult.CommandLink1) { return(Result.Cancelled); } var sysNameParamElement = new FilteredElementCollector(doc) .OfClass(typeof(ParameterElement)) .FirstOrDefault(p => p.Name == "ИмяСистемы"); var sysNameParam = sysNameParamElement as ParameterElement; foreach (var systemName in GetDuctSystemNames(doc)) { CreateFilterForDuctSystem(doc, sysNameParam, systemName); } } else { TaskDialog.Show("Предупреждение", "Не активирован вид для создания копий с применением фильтра"); } return(Result.Succeeded); }
private static void CopyMassValues(CopyMassOperation operation, TableSectionData tsDada, int row, IEnumerable <Element> elements) { var reserve = 1d; if (!string.IsNullOrEmpty(operation.ReserveParameter)) { if (RevitFunctions.TryGetGlobalReserveValue(_doc, operation.ReserveParameter, out double outValue)) { reserve = outValue; } } else { reserve = operation.Reserve; } var value = 0d; var column = operation.SourceColumn - 1; if (column >= 0) { if (column < tsDada.NumberOfColumns) { var data = tsDada.GetCellText(row, column); if (double.TryParse(data.Replace(',', '.'), out var outValue)) { value = outValue; } } } RevitFunctions.CopyMassValue(_doc, operation.Parameter, value * reserve, elements); }
private static void CopyVolumeValues(CopyVolumeOperation operation, IEnumerable <Element> elements) { var reserve = 1d; if (!string.IsNullOrEmpty(operation.ReserveParameter)) { if (RevitFunctions.TryGetGlobalReserveValue(_doc, operation.ReserveParameter, out double outValue)) { reserve = outValue; } } else { reserve = operation.Reserve; } RevitFunctions.CopyVolumeValue(_doc, operation.Parameter, reserve, elements); }
private static void CopyStringValues(CopyStringOperation operation, TableSectionData tsDada, int row, List <Element> elements) { var value = string.Empty; var column = operation.SourceColumn - 1; if (column >= 0) { if (column < tsDada.NumberOfColumns) { value = tsDada.GetCellText(row, column); } } else { value = operation.Value; } RevitFunctions.CopyStringValue(_doc, operation.Parameter, value, elements); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiDoc = commandData.Application.ActiveUIDocument; var doc = uiDoc.Document; if (doc.ActiveView.ViewType == ViewType.Schedule) { var td = new TaskDialog("Auto-numbering") { Id = "ID_TaskDialog_Auto-numbering", MainIcon = TaskDialogIcon.TaskDialogIconInformation, Title = "Автонумерация позиции", TitleAutoPrefix = false, AllowCancellation = true, MainInstruction = "Для автонумерации позиции могут использоваться номер строки или индекс вложенных семейств", MainContent = "Выберите способ автонумерации:" }; td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "По строке элемента в спецификации"); td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "По вложенным семействам"); var tdRes = td.Show(); var sub = tdRes switch { TaskDialogResult.CommandLink1 => false, TaskDialogResult.CommandLink2 => true, _ => false }; if (!(uiDoc.ActiveView is ViewSchedule locVs)) { return(Result.Succeeded); } var tableData = locVs.GetTableData(); var tableSectionData = tableData.GetSectionData(SectionType.Body); if (tableSectionData.NumberOfRows <= 0) { return(Result.Failed); } var startIndex = 1; //Стартовый значение для номера using var tGroup = new TransactionGroup(doc, "Автонумерация спецификации: " + locVs.Name); tGroup.Start(); for (var rInd = 0; rInd < tableSectionData.NumberOfRows; rInd++) { var elementsOnRow = RevitFunctions.GetElementsOnRow(doc, locVs, rInd); if (null == elementsOnRow) { continue; } if (sub) { startIndex = SetNum(doc, startIndex, elementsOnRow, true); } else { SetNum(doc, startIndex++, elementsOnRow, false); } } tGroup.Assimilate(); } else { TaskDialog.Show("Предупреждение", "Для автонумерации требуется открыть спецификацию!"); } return(Result.Succeeded); }
private static void CopyToAdsk(ViewSchedule vs, IReadOnlyCollection <IOperation> operations) { var tData = vs.GetTableData(); var tsDada = tData.GetSectionData(SectionType.Body); if (operations.Count == 0) { return; } TransactionManager.CreateTransactionGroup(_doc, "Копирование параметров", () => { for (var rInd = 0; rInd < tsDada.NumberOfRows; rInd++) { foreach (var operation in operations) { var elements = RevitFunctions.GetElementsOnRow(_doc, vs, rInd); if (elements == null) { continue; } switch (operation.Name) { case Operation.CopyString: if (operation is CopyStringOperation stringOperation) { CopyStringValues(stringOperation, tsDada, rInd, elements); } break; case Operation.CopyInteger: if (operation is CopyIntegerOperation integerOperation) { CopyIntegerValues(integerOperation, tsDada, rInd, elements); } break; case Operation.CopyLength: if (operation is CopyLengthOperation lengthOperation) { CopyLengthValues(lengthOperation, elements); } break; case Operation.CopyArea: if (operation is CopyAreaOperation areaOperation) { CopyAreaValues(areaOperation, elements); } break; case Operation.CopyVolume: if (operation is CopyVolumeOperation volumeOperation) { CopyVolumeValues(volumeOperation, elements); } break; case Operation.CopyMass: if (operation is CopyMassOperation massOperation) { CopyMassValues(massOperation, tsDada, rInd, elements); } break; case Operation.CopyTemperature: if (operation is CopyTemperatureOperation temperatureOperation) { CopyTemperatureValues(temperatureOperation, elements); } break; default: throw new ArgumentOutOfRangeException(); } } } }); }
private static void CopyTemperatureValues(CopyTemperatureOperation operation, IEnumerable <Element> elements) { RevitFunctions.CopyTemperatureValue(_doc, operation.Parameter, elements); }