Параметры по типоразмеру

Автор Тема: Параметры по типоразмеру  (Прочитано 23772 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Параметры по типоразмеру
« : 02-04-2015, 18:49:28 »
Здравствуйте можно ли как то изменять параметры, у которых тип по типоразмеру семейства???

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметры по типоразмеру
« Ответ #1 : 03-04-2015, 06:07:34 »
День добрый!

Да, также как и для параметров любого экземпляра. Только сначала нужно получить сам типоразмер, например, типоразмер элемента elem

Код - C# [Выбрать]
  1. doc.GetElement(elem.GetTypeId())

Либо найти нужные типоразмеры с помощью FilteredElementCollector

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #2 : 03-04-2015, 08:01:28 »
Саша, а ты действительно понял вопрос Ярослава?
Понять фразу
у которых тип по типоразмеру семейства
я так и не смог. Ярослав, поясните.

Если же действительно нужно изменить параметр типоразмера, то Александр прав. Параметры можно изменять у любого класса типа Element. Класс Element является базовым классом для класса типоразмера - ElementType.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметры по типоразмеру
« Ответ #3 : 03-04-2015, 08:17:25 »
Конечно, на 100% я не уверен, но примерно в такой формулировке вопросы уже слышал.
Видимо, это проистекает из-за Revit-овского окошка свойств параметра с переключалкой тип/экземпляр

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Параметры по типоразмеру
« Ответ #4 : 03-04-2015, 08:34:04 »
здравствуйте!
Извините что был не корректен.
Я имел ввиду параметры у которых тип параметра "Типоразмер семейства":
http://knowledge.autodesk.com/support/revit-products/learn-explore/caas/CloudHelp/cloudhelp/2015/RUS/Revit-Customize/files/GUID-921F7A15-D191-4F75-8243-4989C482E253-htm.html седьмой пункт предпоследняя стока в табличке.
Спасибо за понимание.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #5 : 03-04-2015, 08:39:40 »
Ярослав,
Спасибо за пояснение.
Да, конечно, можно. StorageType у таких параметров равен ElementId. Т.е. вам нужно записать ElementId нужного типоразмера с помощью метода Parameter.Set(ElementId id)

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Параметры по типоразмеру
« Ответ #6 : 03-04-2015, 08:40:29 »
Ну да, был не прав :-)

Виктор вперед успел ответить :-)

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Параметры по типоразмеру
« Ответ #7 : 03-04-2015, 09:14:45 »
А можно не через ElementId а через его имя(значение). Просто у меня в зависимости от  string значения одного параметра должно приниматся значение второго(того у которого тип "Типоразмер семейства").

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #8 : 03-04-2015, 09:18:16 »
Ярослав, Можно конечно попробовать через Parameter.SetValueString, но честно говоря не знаю, сработает ли это в случае, если тип параметра ElementId. В любом случае, это не очень хорошая идея.
Простой пример. Что если есть два типоразмера (различных семейств), у которых одинаковое название? Так что по Id - самый надежный способ.

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Параметры по типоразмеру
« Ответ #9 : 03-04-2015, 10:18:06 »
Ну что то никак оно у меня не идет.
Значение не получает ни через Id  ни через SetValueString.
Но оно находит нужный параметр но значение ему не писваевает посмотрите что тут не так??
Код - C# [Выбрать]
  1.   var collector = new FilteredElementCollector(doc, view.Id);
  2.    var sht = collector.OfCategory(BuiltInCategory.OST_TitleBlocks)
  3.                         .WhereElementIsNotElementType().FirstElement();
  4.     int zna = 100445;// ето ID значения параметра
  5.     var pr = sht.GetParameters("Строка 1 подпись");
  6.     foreach (Parameter parame in pr)
  7.      {
  8.         parame.Set(zna);
  9.      }
  10.  
« Последнее редактирование: 03-04-2015, 10:24:13 от Виктор Чекалин »

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #10 : 03-04-2015, 10:26:44 »
Ярослав,
Переменная zna имеет тип int, а значит, вызывается метод Parameter.Set(int value), вместо Parameter.Set(ElementId id)
Нужно передавать именно ElementId.
Код - C# [Выбрать]
  1. var zna = new ElementId(100445);

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #11 : 03-04-2015, 10:28:27 »
Ярослав,
Параметр Строка 1 подпись действительно имеет тип ElementId? Название у него не очень подходит для этого, поэтому есть сомнения.

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Параметры по типоразмеру
« Ответ #12 : 03-04-2015, 10:34:47 »
Заработало!! Спасибо!!
А если использовать SetValueString
то что нужно присвоить zna? просто string?
string zna = "значение";
???

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Параметры по типоразмеру
« Ответ #13 : 03-04-2015, 10:40:27 »
Если SetValueString, то
Код - C# [Выбрать]
  1. var zna = "Название типоразмера, имеющего идентификатор 100445";
  2.  foreach (Parameter parame in pr)
  3.      {
  4.         parame.SetValueString(zna);
  5.      }
  6.  
Но имейте ввиду, что если в проекте будет несколько типоразмеров с таким именем, то возможны два варианта:
1) вылетет с ошибкой
2) Revit подставит первый попавшийся типоразмер с таким именем. Не обязетельно это будет то семейство, которое вам нужно. Т.е. может в одном случае подставит верно, а в другом нет.
« Последнее редактирование: 03-04-2015, 10:51:02 от Виктор Чекалин »

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

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Параметры по типоразмеру
« Ответ #14 : 03-04-2015, 10:59:22 »
А вот здесь оно не хочет брать!
В проекте нет типоразмеров с таким именем и не будет.
Нужный елемент есть вложеным семейством в семейство "Основной надписи".
А при загрузке семейства "основной надписи" в разные проекты Id вложеного елемента будет оставатся таким же???