Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Пашин Евгений от 16-12-2015, 13:13:59

Название: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 16-12-2015, 13:13:59
Добрый день, подскажите в какую сторону копать, чтобы докопаться до параметров под знаками вопроса (см. рис.)?
Параметры красного окна я умею извлекать.


(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs16.postimg.org%2Fi3ujs6kvl%2Fneedthis.jpg&hash=12d443fddca070ca22d35881b7df62be) (http://postimg.org/image/i3ujs6kvl/)
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 16-12-2015, 13:27:12
Вопрос снят с повестки дня ) На всякий случай код напишу для тех, кто еще не в курсе:

Код - 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
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 16-12-2015, 23:03:56
а я просто смотрю LookupParameter("Комментарии")
только вот как вернуть через .AsString()   текст по русски а не кодировка :
u'\u0432\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u044c'
 :)
P.S. я так понимаю только инглишь воспринимает ?
P.S.S.  .AsStringRus() не помогает  ::)
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Андрей Фазлеев от 17-12-2015, 00:05:45
Эти параметры системные, их лучше по BuiltInParameter доставать

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

Таким образом можно доставать один и тот же параметр вне зависимости от локализации Revit
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 17-12-2015, 00:07:28
фильтровать проще вроде как , через ElementCategoryFilter
и значения лучше взять с нужной категории через LookupParameter
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 17-12-2015, 00:30:05
лучше скажите как получить string на русском
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 17-12-2015, 07:02:57
лучше скажите как получить string на русском

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

Можно для примера проект с данными показать... глядишь, может что-нибудь получится сделать!
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Виктор Чекалин от 17-12-2015, 08:30:32
   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.

Вопрос снят с повестки дня ) На всякий случай код напишу для тех, кто еще не в курсе:
Кстати код абсолютно не дает ответа на поставленный вами же вопрос:)
А ответ на вопрос прост - чтобы получить параметры экземпляра, а не типа, надо взять параметры экземпляра, а не типа.) Т.е. работать надо с объектом экземпляра, а не типа, когда просматриваете параметры.
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Виктор Чекалин от 17-12-2015, 08:31:46
только вот как вернуть через .AsString()   текст по русски а не кодировка :
u'\u0432\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u044c'
Есть подозрения, что это особенности Python. Ни разу не сталкивался с такой проблемой.
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 17-12-2015, 08:33:28
да нет ,особой проблемы нету , если мы извлекаем и передаем текст все нормально , если текст получить из какого либо строкового параметра то манипулировать с этим текстом невозможно если он на русском. Ядро питона в ревит не понимает русские символы.
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Виктор Чекалин от 17-12-2015, 08:39:59
,особой проблемы нету
манипулировать с этим текстом невозможно если он на русском. Ядро питона в ревит не понимает русские символы
А разве это не есть проблема?:)
Может Александр (http://adn-cis.org/forum/index.php?action=profile;u=203) подскажет как быть. Я с Python не работаю.
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 17-12-2015, 08:40:36
Евгений, а чем Parameter.AsValueString не угодил? Также в вашем варианте не учитываются единицы измерения. Например, если у вас длина 1000 мм, то в случае вашего метода, вернется значение 3,28.

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

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

Да, так и сделал... просто увлекся LookUp-ом и "завернул за угол" FamilyInstance -> Symbol -> Parameters... Хотя просто требовалось FamilyInstance -> Parameters! Я это понял уже после того, как открыл тему.
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 17-12-2015, 08:43:12
.AsValueString возвращает например название типа или семейства , у меня тоже у маркировки none
А разве это не есть проблема?:)
мне особо не нужно текст переделывать но просто немного напрягло )
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 17-12-2015, 10:46:09
Евгений, а чем Parameter.AsValueString не угодил? Также в вашем варианте не учитываются единицы измерения. Например, если у вас длина 1000 мм, то в случае вашего метода, вернется значение 3,28

Виктор, Вы были правы! Код подправил )
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 17-12-2015, 11:05:17
так теперь же у вас не [1000] a  ['1000'], если просто AsDouble то в алгоритм кода попадает, да ,3.28, но вернется в сам проект опять 1000. Ну у меня так :)
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 17-12-2015, 11:09:28
так теперь же у вас не [1000] a  ['1000'], если просто AsDouble то в алгоритм кода попадает, да ,3.28, но вернется в сам проект опять 1000. Ну у меня так

Длины и диаметры возвращает правильно... Посмотрим как дальше будет... Возникнут проблемы - тему возобновим )
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Виктор Чекалин от 18-12-2015, 09:22:22
Написал в помощь небольшую статью по работе с параметрами (http://adn-cis.org/rabota-s-parametrami.html).
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 18-12-2015, 09:25:51
Отличная статья!!!
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: miko от 18-12-2015, 23:46:18
А разве это не есть проблема?:)
Может Александр подскажет как быть. Я с Python не работаю.
разобрался....... это Unicode
>>> s = unicode("Привет", "KOI8-R")
 >>> s
 u'\u043f\xf7\u044f\u2500\u043f\u2566\u043f\u2561\u043f\u2563\u044f\u250c'
Название: Re: Как определить параметры экземпляра семейства, а не типа?
Отправлено: Пашин Евгений от 21-12-2015, 06:42:00
разобрался....... это Unicode
>>> s = unicode("Привет", "KOI8-R")
 >>> s
 u'\u043f\xf7\u044f\u2500\u043f\u2566\u043f\u2561\u043f\u2563\u044f\u250c'

Поздравляю!
Можно было бы новую тему создать на основе Вашего решения. Я думаю, мало кто знает об этом.