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

ADN Club => Revit API => Тема начата: Владимир П от 29-09-2015, 17:36:51

Название: Создание размера
Отправлено: Владимир П от 29-09-2015, 17:36:51
Еще один простейший вопрос: как образмерить элементы модели?
Попробовал пойти тем же путем, найти пример в SDK... нашел
 c:\Revit 2015 SDK\Samples\CreateDimensions\
Сходу ничего не получилось. Думал причина в том, что Microsoft Visual C# 2013 ругается на: Предупреждение   1   "Autodesk.Revit.UI.Selection.Selection.Elements" является устаревшим: ""This property is deprecated in Revit 2015. Use GetElementIds() and SetElementIds instead."
"   C:\Revit 2015 SDK\Samples\CreateDimensions\Command.cs   108   37   CreateDimensions
Но просмотрев построчно выполнение кода, понял что, все вроде должно срабатывать. Оказалось размеры создаются, но видимы они только при просмотре аналитической модели.
В данном примере образмериваются только стены, причем несущие, и причем размеры, в итоге, в скрытом виде. И как-то сильно все заморочено здесь.
А если я "стенами" не пользуюсь вообще? скорее понадобится образмеривать элементы, не имеющие аналитической модели? Или мне прежде всего надо всего лишь проставить размер между двумя вертикальными осями. Нет ли более подходящего, простого примера создания размера?
Название: Re: Создание размера
Отправлено: Александр Игнатович от 30-09-2015, 06:23:41
Ну да, в примере получают аналитическую модель стены.

На самом деле все, что нужно для создания линейного размера - это 2 ссылки (Reference) - между ними и будет измеряться расстояние и линия Line - собственно для рисования размера.

Касательно ссылок (Reference) - они есть у всех геометрических объектов Revit, у линий, поверхностей, границ поверхности и т.д.

Неплохой пример построения размера между двумя линиями есть тут: http://thebuildingcoder.typepad.com/blog/2012/09/create-dimension-between-two-lines.html.

В случае 2-ух вертикальных осей Вам сначала нужно получить Grid.Curve (свойство, Retrieves an object that represents the geometry of the grid line), у них есть свои Reference, создать Line в нужном месте и вызвать doc.Create.NewDimension


Вот еще может пригодиться: http://thebuildingcoder.typepad.com/blog/2014/11/picking-pairs-and-dimensioning-family-instance-origin.html
Название: Re: Создание размера
Отправлено: Виктор Чекалин от 30-09-2015, 10:16:07
Владимир, вот еще статья на русском (http://adn-cis.org/sozdanie-razmera-mezhdu-czentrami-semejstv.html). Перевод статьи, которую привел Александр.

Предупреждение   1   "Autodesk.Revit.UI.Selection.Selection.Elements" является устаревшим: ""This property is deprecated in Revit 2015. Use GetElementIds() and SetElementIds instead."
Это значит, что в текущей версии API появился новый метод/свойство, в замен того, на которое ругается. Использовать его еще можно, но в следующей версии Revit API он будет удален.
Название: Re: Создание размера
Отправлено: Владимир П от 30-09-2015, 16:42:34
Большое спасибо и Александру Игнатовичу, и Виктору Чекалину!
Попробовал воспроизвести первый пример. Не без некоторых сложностей, все получилось, размер получен. Ура!
Название: Re: Создание размера
Отправлено: Владимир П от 30-09-2015, 18:55:13
В случае 2-ух вертикальных осей Вам сначала нужно получить Grid.Curve (свойство, Retrieves an object that represents the geometry of the grid line), у них есть свои Reference, создать Line в нужном месте и вызвать doc.Create.NewDimension
С "Ура" - это я поторопился, кажется... т.е. между двумя линиями, как в примере, все успешно, есть размер.
А вот когда я попытался заменить
   
Код - C# [Выбрать]
  1.  refArray.Append( dCurve1.GeometryCurve.Reference );
  2.  
на   
Код - C# [Выбрать]
  1.     refArray.Append( Grid1.Curve.Reference );
  2.  
как Вы рекомендовали, то в этом месте приложение выскакивает... хотя явной ошибки не показывает
Что не так?

Все это относится к работе "в плане". Попробовал воспроизвести тот же пример в виде "по фасаду" - уже не работает, даже с линиями, с которыми работает в плане. Казалось бы, в команде предусматривается  .ActiveView, а вот ведь какой казус...
Может опять, например, в 15-ой версии и не должно работать?
Название: Re: Создание размера
Отправлено: Александр Игнатович от 01-10-2015, 13:31:04
День добрый. Попробовал в 15-ой версии вот такой код (использовал Revit Python Shell), все сработало:

Код - Python [Выбрать]
  1. refArray = ReferenceArray()
  2. curves = []
  3.  
  4. for grid in selection:
  5.         refArray.Append(grid.Curve.Reference)
  6.         curves.append(grid.Curve)
  7.        
  8. line = Line.CreateBound(curves[0].GetEndPoint(0), curves[1].GetEndPoint(0))
  9.  
  10. t = Transaction(doc, "create dimension")
  11. t.Start()
  12.  
  13. doc.Create.NewDimension( doc.ActiveView, line, refArray )
  14.  
  15. t.Commit()

Выделяю 2 оси, строит размер

Насчет фасада. Для осей (Grid) все по-прежнему работает. Единственный момент, необходимо при построении line в коде выше изменить координату Z (без изменения тоже сработает, конечно, но, по-видимому, это не совсем тот результат, который Вы ожидаете)

Для уровней, походу, задача решается для Revit 2016. в нем у уровня есть метод GetCurvesInView, с помощью которого можно получить геометрию (линии в данном случае) и уже у них взять Reference-ы
Название: Re: Создание размера
Отправлено: Владимир П от 01-10-2015, 13:53:55

Насчет фасада. Для осей (Grid) все по-прежнему работает. Единственный момент, необходимо при построении line в коде выше изменить координату Z (без изменения тоже сработает, конечно, но, по-видимому, это не совсем тот результат, который Вы ожидаете)

Здравствуйте! Опять спасибо Вам! координату Z менял, еще много чего менял, почему-то без результата... Ну, раз у вас получается, попробую с вашим примером теперь поупражняться...