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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 6
0
        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();
                        }
                    }
                }
            });
        }
Ejemplo n.º 7
0
 private static void CopyTemperatureValues(CopyTemperatureOperation operation, IEnumerable <Element> elements)
 {
     RevitFunctions.CopyTemperatureValue(_doc, operation.Parameter, elements);
 }