Как определить параметры экземпляра семейства, а не типа?

Автор Тема: Как определить параметры экземпляра семейства, а не типа?  (Прочитано 13303 раз)

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

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

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




Отмечено как Решение Пашин Евгений 30-12-2015, 14:21:06

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вопрос снят с повестки дня ) На всякий случай код напишу для тех, кто еще не в курсе:

Код - vb.net [Выбрать]
  1.  
  2. ....
  3.                     Dim listParameters As ParameterSet = el.Parameters ' el As Family
  4.  
  5.                     For Each par As Parameter In listParameters
  6.                         Dim name As String = par.Definition.Name
  7.                         Dim val As String = ParameterToString(par)
  8.                         If name = "Маркировка" Then
  9.                             MsgBox(val)
  10.                         End If
  11.                     Next
  12.  

Код - vb.net [Выбрать]
  1.     Public Shared Function ParameterToString(ByVal param As Parameter) As String
  2.         Dim val As String = "none"
  3.         If param Is Nothing Then
  4.             Return val
  5.         End If
  6.         Select Case param.StorageType
  7.             Case StorageType.Double
  8.                 Dim dVal As Double = param.AsDouble
  9.                 val = dVal.AsValueString
  10.             Case StorageType.Integer
  11.                 Dim iVal As Integer = param.AsInteger
  12.                 val = iVal.ToString()
  13.             Case StorageType.String
  14.                 Dim sVal As String = param.AsString
  15.                 val = sVal
  16.             Case StorageType.ElementId
  17.                 Dim idVal As ElementId = param.AsElementId
  18.                 val = idVal.IntegerValue.ToString
  19.             Case StorageType.None
  20.             Case Else
  21.         End Select
  22.         Return val
  23.     End Function
« Последнее редактирование: 17-12-2015, 10:44:49 от Пашин Евгений »

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
а я просто смотрю LookupParameter("Комментарии")
только вот как вернуть через .AsString()   текст по русски а не кодировка :
u'\u0432\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u044c'
 :)
P.S. я так понимаю только инглишь воспринимает ?
P.S.S.  .AsStringRus() не помогает  ::)

Оффлайн Андрей Фазлеев

  • ADN Club
  • Сообщений: 24
  • Карма: 8
    • Andrey Stroitel
Эти параметры системные, их лучше по BuiltInParameter доставать

Код - C# [Выбрать]
  1. Parameter p = elem.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS);

Таким образом можно доставать один и тот же параметр вне зависимости от локализации Revit
« Последнее редактирование: 17-12-2015, 00:45:23 от Андрей Фазлеев »

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
фильтровать проще вроде как , через ElementCategoryFilter
и значения лучше взять с нужной категории через LookupParameter

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
лучше скажите как получить string на русском

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
лучше скажите как получить string на русском

У Вас действительно есть такая проблема?

Можно для примера проект с данными показать... глядишь, может что-нибудь получится сделать!

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
   Public Shared Function ParameterToString(ByVal param As Parameter) As String
        Dim val As String = "none"
        If param Is Nothing Then
            Return val
        End If
        Select Case param.StorageType
            Case StorageType.Double
                Dim dVal As Double = param.AsDouble
                val = dVal.ToString
            Case StorageType.Integer
                Dim iVal As Integer = param.AsInteger
                val = iVal.ToString()
            Case StorageType.String
                Dim sVal As String = param.AsString
                val = sVal
            Case StorageType.ElementId
                Dim idVal As ElementId = param.AsElementId
                val = idVal.IntegerValue.ToString
            Case StorageType.None
            Case Else
        End Select
        Return val
    End Function
Евгений, а чем Parameter.AsValueString не угодил? Также в вашем варианте не учитываются единицы измерения. Например, если у вас длина 1000 мм, то в случае вашего метода, вернется значение 3,28.

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

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
только вот как вернуть через .AsString()   текст по русски а не кодировка :
u'\u0432\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u044c'
Есть подозрения, что это особенности Python. Ни разу не сталкивался с такой проблемой.

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
да нет ,особой проблемы нету , если мы извлекаем и передаем текст все нормально , если текст получить из какого либо строкового параметра то манипулировать с этим текстом невозможно если он на русском. Ядро питона в ревит не понимает русские символы.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
,особой проблемы нету
манипулировать с этим текстом невозможно если он на русском. Ядро питона в ревит не понимает русские символы
А разве это не есть проблема?:)
Может Александр подскажет как быть. Я с Python не работаю.

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Евгений, а чем Parameter.AsValueString не угодил? Также в вашем варианте не учитываются единицы измерения. Например, если у вас длина 1000 мм, то в случае вашего метода, вернется значение 3,28.

Parameter.AsValueString вернул мне пустую строку. В случае с маркировкой.

А ответ на вопрос прост - чтобы получить параметры экземпляра, а не типа, надо взять параметры экземпляра, а не типа.) Т.е. работать надо с объектом экземпляра, а не типа, когда просматриваете параметры.

Да, так и сделал... просто увлекся LookUp-ом и "завернул за угол" FamilyInstance -> Symbol -> Parameters... Хотя просто требовалось FamilyInstance -> Parameters! Я это понял уже после того, как открыл тему.

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
.AsValueString возвращает например название типа или семейства , у меня тоже у маркировки none
А разве это не есть проблема?:)
мне особо не нужно текст переделывать но просто немного напрягло )

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Евгений, а чем Parameter.AsValueString не угодил? Также в вашем варианте не учитываются единицы измерения. Например, если у вас длина 1000 мм, то в случае вашего метода, вернется значение 3,28

Виктор, Вы были правы! Код подправил )

Оффлайн miko

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
так теперь же у вас не [1000] a  ['1000'], если просто AsDouble то в алгоритм кода попадает, да ,3.28, но вернется в сам проект опять 1000. Ну у меня так :)