Создание размера

Автор Тема: Создание размера  (Прочитано 7622 раз)

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

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Создание размера
« : 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
Но просмотрев построчно выполнение кода, понял что, все вроде должно срабатывать. Оказалось размеры создаются, но видимы они только при просмотре аналитической модели.
В данном примере образмериваются только стены, причем несущие, и причем размеры, в итоге, в скрытом виде. И как-то сильно все заморочено здесь.
А если я "стенами" не пользуюсь вообще? скорее понадобится образмеривать элементы, не имеющие аналитической модели? Или мне прежде всего надо всего лишь проставить размер между двумя вертикальными осями. Нет ли более подходящего, простого примера создания размера?

Отмечено как Решение Владимир П 30-09-2015, 16:37:55

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Создание размера
« Ответ #1 : 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

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Создание размера
« Ответ #2 : 30-09-2015, 10:16:07 »
Владимир, вот еще статья на русском. Перевод статьи, которую привел Александр.

Предупреждение   1   "Autodesk.Revit.UI.Selection.Selection.Elements" является устаревшим: ""This property is deprecated in Revit 2015. Use GetElementIds() and SetElementIds instead."
Это значит, что в текущей версии API появился новый метод/свойство, в замен того, на которое ругается. Использовать его еще можно, но в следующей версии Revit API он будет удален.

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Создание размера
« Ответ #3 : 30-09-2015, 16:42:34 »
Большое спасибо и Александру Игнатовичу, и Виктору Чекалину!
Попробовал воспроизвести первый пример. Не без некоторых сложностей, все получилось, размер получен. Ура!

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Создание размера
« Ответ #4 : 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-ой версии и не должно работать?
« Последнее редактирование: 01-10-2015, 13:27:57 от Владимир П »

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Создание размера
« Ответ #5 : 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-ы

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Создание размера
« Ответ #6 : 01-10-2015, 13:53:55 »

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

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