Как получить все свойства семейства по его ID?

Автор Тема: Как получить все свойства семейства по его ID?  (Прочитано 5059 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Подскажите, пожалуйста, как получить все свойства семейства по его ID?

Можно ориентир... дальше сам разберусь.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Что то уж совсем легкий вопрос. В справку все таки нужно иногда заглядывать. Element.Parameters

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Element.Parameters

Повторюсь наверное, но многое для Вас будет легким, когда для меня (пока) это лес дремучий, с учетом того, что мне пока не до конца ясно: что? откуда? куда? Я пока не ясно все понимаю. Revit API насыщен классами, которые между собой переплетаются. К тому же накладывается мое слабое владение инструментарием самого Revit-а. Уверен, справка поможет, но Ваш краткий ответ поможет не полностью лопатить справку, а лишь конкретный раздел :) В любом случае спасибо.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Красота: ввел Element.Parameters и сразу попал на пример с кодом :)
Буду разбирать.

Отмечено как Решение Пашин Евгений 22-10-2015, 06:52:03

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Наконец-то добил этот вопрос:

Код - vb.net [Выбрать]
  1. ' ...
  2.     Public Sub Show_Parameters_Of_Element_By_Id(ByVal Id As String)
  3.         Dim uiApp As Autodesk.Revit.UI.UIApplication = myCD.Application
  4.         Dim App As Autodesk.Revit.ApplicationServices.Application = uiApp.Application
  5.         Dim uiDoc As UIDocument = uiApp.ActiveUIDocument
  6.         Dim Doc As Document = uiDoc.Document
  7.  
  8.         Dim coll As FilteredElementCollector = New FilteredElementCollector(Doc).OfClass(GetType(DB.Family))
  9.  
  10.         Me.ListView2.Clear()
  11.         Me.ListView2.Columns.Add("№")                       '0
  12.         Me.ListView2.Columns.Add("Designation")             '1
  13.         Me.ListView2.Columns.Add("Value")                   '2
  14.         Me.ListView2.Columns.Add("Additional value")        '3
  15.  
  16.         Dim acElNum As Integer = 1
  17.  
  18.         For Each acEl As DB.Element In coll
  19.  
  20.             Dim acElId As Integer = acEl.Id.IntegerValue
  21.  
  22.             Select Case acElId
  23.                 Case Id
  24.                     Dim acElFam As DB.Family = CType(acEl, DB.Family)
  25.  
  26.                     Add_New_Element_ListView2(CType(acElNum, String), _
  27.                     "Местоположение семейства", IIf(acElFam.IsInPlace, "Местный", "Загруженный"), "Family.IsInPlace") : acElNum += 1
  28.  
  29.                     Add_New_Element_ListView2(CType(acElNum, String), _
  30.                     "Имя семейства", acEl.Name.ToString, "Family.Name") : acElNum += 1
  31.  
  32.                     Add_New_Element_ListView2(CType(acElNum, String), _
  33.                     "Семейство рукотворное", IIf(acElFam.IsOwnerFamily, "Да", "Нет"), "Family.IsOwnerFamily") : acElNum += 1
  34.  
  35.                     Add_New_Element_ListView2(CType(acElNum, String), _
  36.                     "ID", acEl.Id.IntegerValue.ToString, "Family.Id.IntegerValue.ToString") : acElNum += 1
  37.  
  38.                     Add_New_Element_ListView2(CType(acElNum, String), _
  39.                     "GUID", acEl.UniqueId.ToString, "Family.UniqueId.ToString") : acElNum += 1
  40.  
  41.                     Add_New_Element_ListView2(CType(acElNum, String), _
  42.                     "Тип элемента", acEl.GetType.Name.ToString, "Family.GetType.Name.ToString") : acElNum += 1
  43.  
  44.                     Dim s As String = String.Empty
  45.                     If Not Nothing Is acEl.Category Then
  46.                         s = acEl.Category.Name
  47.                     End If
  48.                     If 0 = s.Length AndAlso TypeOf acEl Is Family AndAlso Not Nothing Is DirectCast(acEl, Family).FamilyCategory Then
  49.                         s = DirectCast(acEl, Family).FamilyCategory.Name
  50.                     End If
  51.                     If 0 = s.Length Then
  52.                         s = "unknown"
  53.                     End If
  54.  
  55.                     Add_New_Element_ListView2(CType(acElNum, String), _
  56.                     "Имя категории", s, "Family.Category.Name") : acElNum += 1
  57.  
  58.                     If TypeOf acEl Is Wall Then
  59.                         s = "Wall (Стена)"
  60.                     ElseIf TypeOf acEl Is Floor Then
  61.                         s = "Floor (Пол)"
  62.                     ElseIf TypeOf acEl Is RoofBase Then
  63.                         s = "Roof (Крыша)"
  64.                     ElseIf TypeOf acEl Is FamilyInstance Then
  65.                         If acEl.Category.Id.IntegerValue = _
  66.                             BuiltInCategory.OST_Doors Then
  67.                             s = "Door (Дверь)"
  68.                         ElseIf acEl.Category.Id.IntegerValue = _
  69.                             BuiltInCategory.OST_Windows Then
  70.                             s = "Window (Окно)"
  71.                         ElseIf acEl.Category.Id.IntegerValue = _
  72.                             BuiltInCategory.OST_Furniture Then
  73.                             s = "Furniture (Фурнитура)"
  74.                         Else
  75.                             s = "Component family instance (Компонент экземпляра семейства)"
  76.                         End If
  77.  
  78.                     ElseIf TypeOf acEl Is HostObject Then
  79.                         s = "System family instance (Системный экземпляр семейства)"
  80.                     Else
  81.                         s = "Другой"
  82.                     End If
  83.                     Add_New_Element_ListView2(CType(acElNum, String), _
  84.                     "Тип семейства", s, "TypeOf Family Is ...") : acElNum += 1
  85.  
  86.                     ' Параметры семейства
  87.                     Dim params As ParameterSet = acEl.Parameters
  88.                     Dim nump As Integer = 1
  89.  
  90.                     For Each param As DB.Parameter In params
  91.                         Dim name As String = param.Definition.Name
  92.                         Dim val As String = ParameterToString(param)
  93.                         Add_New_Element_ListView2(CType(acElNum, String), _
  94.                         "Параметр #" & nump & " [" & name & "]", val, "Family.Definition.Name / ParamToString[Parameter]") : acElNum += 1
  95.                         nump += 1
  96.                     Next
  97.  
  98.                     Dim acPars As Object = acEl.GetOrderedParameters
  99.  
  100.                     For j As Integer = 0 To acPars.count - 1
  101.                         Dim acParsVal As DB.Parameter = CType(acPars(j), DB.Parameter)
  102.                         Add_New_Element_ListView2(CType(acElNum, String), _
  103.                         "Параметр #" & nump & " map #" & j + 1 & " [" & acPars(j).Definition.Name & "]", ParameterToString(acParsVal), "Family.Parameter.Definition.Name / ParamToString[Parameter]") : acElNum += 1
  104.                         nump += 1
  105.                     Next
  106.                 Case Else
  107.             End Select
  108.         Next
  109.  
  110.         For i As Integer = 0 To Me.ListView2.Columns.Count - 1
  111.             Me.ListView2.Columns(i).AutoResize(Windows.Forms.ColumnHeaderAutoResizeStyle.ColumnContent)
  112.         Next i
  113.     End Sub
  114.  
  115.  
  116.     Public Sub Add_New_Element_ListView2(ByVal element1 As String, ByVal element2 As String, ByVal element3 As String, ByVal element4 As String)
  117.         Dim acElNewLVI As New ListViewItem
  118.         With acElNewLVI
  119.             For i As Long = 0 To 3
  120.                 .SubItems.Add("")
  121.             Next
  122.             .SubItems(0).Text = element1
  123.             .SubItems(1).Text = element2
  124.             .SubItems(2).Text = element3
  125.             .SubItems(3).Text = element4
  126.         End With
  127.  
  128.         Me.ListView2.Items.Add(acElNewLVI)
  129.  
  130.     End Sub
  131.