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

ADN Club => Revit API => Тема начата: Алексей (IdeaSoft) от 14-11-2018, 09:34:15

Название: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 09:34:15
Мне нужно создать стену из базового семейства.
Как мне обратится к семейству и создать ее с помощью Revit API
Стена такая: "Базовая стена Подпорный - Бетон 300мм"

Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 10:14:38
Как-то так пытаюсь

Код - C# [Выбрать]
  1. [TransactionAttribute(TransactionMode.Manual)]
  2. [RegenerationAttribute(RegenerationOption.Manual)]
  3. class создать_стены : IExternalCommand
  4. {
  5.     public Result Execute(ExternalCommandData data,
  6.                       ref string str,
  7.                       RVT_DB.ElementSet elem)
  8.     {
  9.         RVT_DB.Wall w = new RVT_DB.Wall();
  10.  
  11.         // Полагаю, что присвоить имя стене это и есть выбрать ее из семейства
  12.         w.Name = "Подпорный - Бетон 300мм";
  13.        
  14.         var doc = data.Application.ActiveUIDocument.Document;
  15.  
  16.         using (RVT_DB.Transaction tr = new RVT_DB.Transaction(doc, "Create wall"))
  17.         {
  18.             tr.Start();
  19.             // Тут нужно как-то добавить стену как-то в документ
  20.             tr.Commit();
  21.         }
  22.  
  23.         return Result.Succeeded;
  24.  
  25.     }
  26.  
  27. }
Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 10:17:08
Открываете справку на методе Wall.Create (http://www.revitapidocs.com/2015/4a42066c-bc44-0f99-566c-4e8327bc3bfa.htm) и смотрите по параметрам. Там настолько все просто, что даже примеров в интернете нет  :D
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 10:30:04
А что за класс такой Level?

Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 10:31:30
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 10:34:14
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену

Этот уровень есть какой-то по умолчанию? Откуда его "выдрать"
Конструктора у него нет
Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 10:41:00
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену

Этот уровень есть какой-то по умолчанию? Откуда его "выдрать"
Конструктора у него нет
В смысле "конструктор"? В смысле "выдрать"? Вы сам Ревит в глаза-то видели? У вас всегда есть уровни в проекте и нужный вам вы ищите по условиям, нужным вам.
Например, через new FilteredElementCollector(doc).OfType(typeof(Level)).... Я не знаю ваших условий, поэтому коллектор сами делайте
Также уровень можно получить из текущего вида, если это, например, план.

Конечно, может быть ситуация, что уровней в проекте нет вообще - тогда вы должны вывести сообщение об этом и завершить команду
Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 10:41:19
Посмотрите еще эту тему - https://thebuildingcoder.typepad.com/blog/2017/11/automatic-wall-creation.html
Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 10:44:40
Забегая вперед скажу - типоразмер стены задается через метод ChangeTypeId() в который вы передаете идентификатор типоразмера. Нужный идентификатор также нужно получить через FiltererdElementCollector, правильно его построив, и выбрав из него нужный идентификатор по имени вашего типоразмера
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 10:47:23
У вас всегда есть уровни в проекте
Открыл пустой шаблон файла Ревита ни чего не знаю про уровни. Для меня это новое.
Название: Re: Как создать стену в ревит
Отправлено: Александр Игнатович от 14-11-2018, 10:51:53
Посмотрите еще пример в SDK: Samples\TransactionControl\CS
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 11:13:42
https://thebuildingcoder.typepad.com/blog/2017/11/automatic-wall-creation.html
Хороший пример у Джереми
Все понятно мне в нем

только вот LevelId он берет у некого куба.
Код - C# [Выбрать]
  1.       return Wall.Create( doc, curve.CreateReversed(),
  2.         wallTypeId, cube.LevelId, height, 0, false,
  3.         false );

Что это за куб В примере он его ищет
Код - C# [Выбрать]
  1. var cubes = RVT_AP.Application.FindCubes(doc);

В пустой шаблон Ревит и ни каких кубов там нет .
Все что у меня есть это просто координаты положения стен которые я беру из чертежа dwg


Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 11:15:05
только вот LevelId он берет у некого куба.
      return Wall.Create( doc, curve.CreateReversed(),
        wallTypeId, cube.LevelId, height, 0, false,
        false );
У вас всегда есть уровни в проекте и нужный вам вы ищите по условиям, нужным вам.
Например, через new FilteredElementCollector(doc).OfType(typeof(Level)).... Я не знаю ваших условий, поэтому коллектор сами делайте
Также уровень можно получить из текущего вида, если это, например, план.
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 12:35:18
Создаю с чистого листа по шаблону строительства "голый файл"
 Перехожу в вид, например "Уровень 1"
Хочу получить уровень у активного вида

Код - C# [Выбрать]
  1.  var CurrLevel = doc.ActiveView.LevelId;
  2.  
Пишет ошибку No Level
 
Название: Re: Как создать стену в ревит
Отправлено: Александр Пекшев aka Modis от 14-11-2018, 12:38:38
Создаю с чистого листа по шаблону строительства "голый файл"
 Перехожу в вид, например "Уровень 1"
Хочу получить уровень у активного вида

Код - C# [Выбрать]
  1.  var CurrLevel = doc.ActiveView.LevelId;
  2.  
Пишет ошибку No Level
Надо брать не LevelId, а doc.ActiveView.GenLevel.Id
Название: Re: Как создать стену в ревит
Отправлено: Алексей (IdeaSoft) от 14-11-2018, 13:13:16
Спасибо всем! Все получилось!