Как в коде c# плагина под ревит вывести глобальные параметры связей rvt в проекте?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как в коде c# плагина под ревит вывести глобальные параметры связей rvt в проекте?

Как в коде c# плагина под ревит вывести глобальные параметры связей rvt в проекте?

Ответ
Поиск в этой теме
Непрочитано 15.09.2023, 15:10 #1
Как в коде c# плагина под ревит вывести глобальные параметры связей rvt в проекте?
AlexV
 
Инженер
 
С-Пб
Регистрация: 02.10.2008
Сообщений: 3,691

Вобщем, такого рода код нарылся из интернетов и т.д., выводит общие параметры связей. Но, во первых, мне хотелось бы добраться до глобальных параметров. Подскажите, товарищи ученые, как? Во-вторых, похоже, "List<RevitLinkInstance> links = linkCollector.Cast<RevitLinkInstance>().ToList();" собирает каждый экземпляр связи, если оные накопированы. Как оставить в цикле только один экземпляр из..?

Код:
[Выделить все]
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
namespace ME.Functions.KJArm
{
    [Transaction(TransactionMode.Manual)]
    public class glo_param_in_filter : IExternalCommand
    {
        public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elems)
        {
            UIApplication a = cmdData.Application;
            UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
            Document doc = a.ActiveUIDocument.Document;
            Autodesk.Revit.ApplicationServices.Application app = doc.Application;
            UIApplication uiApp = cmdData.Application;      
            // Получение всех связей Revit в проекте
            FilteredElementCollector linkCollector = new FilteredElementCollector(doc)
                .OfClass(typeof(RevitLinkInstance));
            List<RevitLinkInstance> links = linkCollector.Cast<RevitLinkInstance>().ToList();
            // Перебор каждой связи
            foreach (RevitLinkInstance link in links)
            {
                Document linkedDoc = link.GetLinkDocument();

                if (linkedDoc != null)
                {
                    // Получение параметров связи
                    FilteredElementCollector collector = new FilteredElementCollector(linkedDoc)
                    .OfClass(typeof(SharedParameterElement));
                    List<SharedParameterElement> sharedParameters = collector.Cast<SharedParameterElement>().ToList();
                    // Перебор каждого глобального параметра и вывод информации
                    string strtmp = linkedDoc.PathName;
                    foreach (SharedParameterElement sharedParam in sharedParameters)
                      {
                         strtmp = strtmp+ sharedParam.Name + "\n";
                      }
                    TaskDialog.Show("Глобальный параметр: ", strtmp);

                }
            }


            return Result.Succeeded;
        }
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Просмотров: 1286
 
Непрочитано 15.09.2023, 15:26
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,101


https://www.revitapidocs.com/2016/ce...5aebc03581.htm
trir вне форума  
 
Автор темы   Непрочитано 20.09.2023, 13:42
#3
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,691


Вобщем, понавыловить значения имен и значений глобальных параметров связей худо-бедно получилось. Теперь бы еще научиться эти значения менять. Это, чувствую, посложнее будет. Наверное, напрямую с экземпляром linkedDoc вряд-ли получится что-то сделать.. А вот если дернуть из него имя/путь, открыть, в открытом документе навести шороху, сохранить и закрыть?

Код:
[Выделить все]
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;

namespace ME.Functions.KJArm
{
    [Transaction(TransactionMode.Manual)]
    public class glo_param_in_filter : IExternalCommand
    {
        public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elems)
        {
            UIApplication a = cmdData.Application;
            UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
            Autodesk.Revit.DB.Document doc = a.ActiveUIDocument.Document;
            Autodesk.Revit.ApplicationServices.Application app = doc.Application;
            UIApplication uiApp = cmdData.Application;     
            // Получение всех связей Revit в проекте
            FilteredElementCollector linkCollector = new FilteredElementCollector(doc)
                .OfClass(typeof(RevitLinkInstance));
            List<RevitLinkInstance> links = linkCollector.Cast<RevitLinkInstance>().ToList();
            string strtmp="";
            // Перебор каждой связи
            foreach (RevitLinkInstance link in links)
            {            
                Document linkedDoc = link.GetLinkDocument();
                if (linkedDoc != null)
                {
                    // Получение параметров связи
                    strtmp = linkedDoc.PathName + Environment.NewLine;
                    List<ElementId> ele = GlobalParametersManager.GetAllGlobalParameters(linkedDoc).ToList();
                    List<GlobalParameter> globalParam = new List<GlobalParameter>();
                    foreach (ElementId item in ele)
                    {
                        // Get global parameter from element Id.
                        var parameterSet = linkedDoc.GetElement(item) as GlobalParameter;
                        globalParam.Add(parameterSet);                  
                    }
                     foreach (GlobalParameter parameter in globalParam)
                    {
                        strtmp = strtmp + parameter.Name + "  !  ";
                        var pValue = parameter.GetValue();

                        // Проверяем, является ли значение типом IntegerParameterValue
                        var gpIpv = pValue as IntegerParameterValue;
                        if (gpIpv != null)
                        {
                            int gpInteger = gpIpv.Value;
                            strtmp = strtmp + gpInteger + Environment.NewLine;
                            // Обработка целочисленного значения
                        }
                        else
                        {
                            // Проверяем, является ли значение типом DoubleParameterValue
                            var gpDpv = pValue as DoubleParameterValue;
                            if (gpDpv != null)
                            {
                                double gpDouble = UnitUtils.ConvertFromInternalUnits(gpDpv.Value, UnitTypeId.Millimeters);
                                strtmp = strtmp + gpDouble + "Double" + Environment.NewLine; 
                                // Обработка значения типа double
                            }
                            else
                            {
                                // Проверяем, является ли значение типом StringParameterValue
                                var gpSpv = pValue as StringParameterValue;
                                if (gpSpv != null)
                                {
                                    string gpString =  gpSpv.Value;
                                    strtmp = strtmp + gpString + "String" + Environment.NewLine;
                                    // Обработка значения типа string
                                    if (parameter.Name == "Обозначение")
                                    {
                                        //
                                        //
                                    }
                                }
                                else
                                {
                                    strtmp = strtmp + pValue + "хз" +Environment.NewLine;
                                    // Обработка других типов глобальных параметров
                                }
                            }
                        }
                    }
                }
                TaskDialog.Show("Глобальный параметр: ", ""+ strtmp);
            }
            return Result.Succeeded;
        }
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как в коде c# плагина под ревит вывести глобальные параметры связей rvt в проекте?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Civil 3D «не запоминает» последние пользовательские параметры создания характерной линии. Gedezuk5 Вертикальные решения на базе AutoCAD 2 30.05.2018 15:49
Ревит 2015. Присвоение каждому типу в семействе тестовой надписи (марки). ALEKSEMANDR Revit 2 03.06.2016 14:17
Статическое испытание свай на выдергивание. Проектировщик указывает расчетную ( максимальную в проекте) накрузку на сваю или требуемую несущую способность сваи. мозголом из Самары Основания и фундаменты 23 23.03.2016 14:05
Нужны климатологические параметры некоторых Российских городов Николай89 Поиск литературы, чертежей, моделей и прочих материалов 3 14.12.2015 07:11
Расход материала и подрезки в проекте. Билдер Архитектура 5 05.11.2015 17:59