Как получить список BuiltInCategory назначенных общему параметру?

Автор Тема: Как получить список BuiltInCategory назначенных общему параметру?  (Прочитано 1789 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BrayanАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Всем Доброго,
Вроде разобрался как добавлять общие параметры в проект и как извлечь все общие параметры из проекта.
Теперь понадобилось получить список категорий объектов (BuiltInCategory) назначенных общему параметру. Как это правильно делается?
Для поиска общих параметров в проекте и их записи в класс я использую такой код:

Код - C# [Выбрать]
  1.  //Class for shared parameters
  2.         public class SharedParameterInfo
  3.         {
  4.             public SharedParameterElement element { get; set; }
  5.             public Guid guid { get; set; }
  6.             public string name { get; set; }
  7.             public ParameterType type { get; set; }
  8.             public BuiltInParameterGroup group { get; set; }
  9.  
  10.             public SharedParameterInfo(Autodesk.Revit.DB.Document rvtDoc, InternalDefinition iDefinition)
  11.             {
  12.                 //get SharedParameterElement by Id
  13.                 if (rvtDoc.GetElement(iDefinition.Id) is SharedParameterElement sharedParamElement)
  14.                 {
  15.                     element = sharedParamElement;
  16.                     guid = sharedParamElement.GuidValue;//get guid
  17.                     name = iDefinition.Name;
  18.                     type = iDefinition.ParameterType;
  19.                     group = iDefinition.ParameterGroup;
  20.                 }
  21.             }
  22.         }
  23.  
  24.         //Function to get shared parameters
  25.         public static void UgetSharedParameters(Autodesk.Revit.DB.Document rvtDoc)
  26.         {
  27.             BindingMap bindMap = rvtDoc.ParameterBindings;
  28.             DefinitionBindingMapIterator dbmIterator = bindMap.ForwardIterator();
  29.             dbmIterator.Reset();
  30.             while (dbmIterator.MoveNext())
  31.             {
  32.                 InternalDefinition iDefinition = (InternalDefinition)dbmIterator.Key;//adduction Def to InternalDef
  33.                 if (null != iDefinition)
  34.                 {
  35.                     SharedParameterInfo spi = new SharedParameterInfo(rvtDoc, iDefinition);
  36.                     if(spi.element != null) sharedParamsList.Add(spi);
  37.                 }
  38.             }
  39.         }
  40.        

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Возьми свой iDefinition (строка 32), получи из bindMap:
Код - C# [Выбрать]
  1. var binding = bindMap.get_Item(iDefinition);

У binding будет свойство Categories

Отмечено как Решение Александр Ривилис 22-11-2020, 19:30:53

Оффлайн BrayanАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 1
Спасибо, получилось так:
Код - C# [Выбрать]
  1. //Class for shared parameters
  2.         public class SharedParameterInfo
  3.         {
  4.             public SharedParameterElement SPelement { get; set; }
  5.             public Guid SPguid { get; set; }
  6.             public string SPname { get; set; }
  7.             public ParameterType SPtype { get; set; }
  8.             public BuiltInParameterGroup SPgroup { get; set; }
  9.             public bool SPcatpl { get; set; }
  10.  
  11.             public SharedParameterInfo(Autodesk.Revit.DB.Document rvtDoc, InternalDefinition iDefinition)
  12.             {
  13.                 SharedParameterElement sharedParamElement = rvtDoc.GetElement(iDefinition.Id) as SharedParameterElement;//get SharedParameterElement by Id
  14.                 if (null != sharedParamElement)
  15.                 {
  16.                     SPelement = sharedParamElement;
  17.                     SPguid = sharedParamElement.GuidValue;//get guid
  18.                     SPname = iDefinition.Name;
  19.                     SPtype = iDefinition.ParameterType;
  20.                     SPgroup = iDefinition.ParameterGroup;
  21.  
  22.                     //Check plate category
  23.                     ElementBinding elBind = (ElementBinding)rvtDoc.ParameterBindings.get_Item(iDefinition);
  24.                     CategorySet catset = elBind.Categories;
  25.  
  26.                     //get all categories
  27.                     //foreach (Category cat in catset)
  28.                     //{
  29.                     //    string cname = cat.Name;
  30.                     //}
  31.  
  32.                     Category category = Category.GetCategory(rvtDoc, BuiltInCategory.OST_StructConnectionPlates);
  33.                     SPcatpl = catset.Contains(category);//Check category BuiltInCategory.OST_StructConnectionPlates
  34.                 }
  35.             }
  36.         }
  37.