Как создать стену в ревит

Автор Тема: Как создать стену в ревит  (Прочитано 4598 раз)

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Как создать стену в ревит
« : 14-11-2018, 09:34:15 »
Мне нужно создать стену из базового семейства.
Как мне обратится к семейству и создать ее с помощью Revit API
Стена такая: "Базовая стена Подпорный - Бетон 300мм"


Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #1 : 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. }

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #2 : 14-11-2018, 10:17:08 »
Открываете справку на методе Wall.Create и смотрите по параметрам. Там настолько все просто, что даже примеров в интернете нет  :D

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #3 : 14-11-2018, 10:30:04 »
А что за класс такой Level?


Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #4 : 14-11-2018, 10:31:30 »
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #5 : 14-11-2018, 10:34:14 »
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену

Этот уровень есть какой-то по умолчанию? Откуда его "выдрать"
Конструктора у него нет

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #6 : 14-11-2018, 10:41:00 »
А что за класс такой Level?
Ой это даже не класс
Параметр LevelId - это идентификатор уровня, на котором вы создаете стену

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

Конечно, может быть ситуация, что уровней в проекте нет вообще - тогда вы должны вывести сообщение об этом и завершить команду

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #7 : 14-11-2018, 10:41:19 »

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #8 : 14-11-2018, 10:44:40 »
Забегая вперед скажу - типоразмер стены задается через метод ChangeTypeId() в который вы передаете идентификатор типоразмера. Нужный идентификатор также нужно получить через FiltererdElementCollector, правильно его построив, и выбрав из него нужный идентификатор по имени вашего типоразмера

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #9 : 14-11-2018, 10:47:23 »
У вас всегда есть уровни в проекте
Открыл пустой шаблон файла Ревита ни чего не знаю про уровни. Для меня это новое.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Как создать стену в ревит
« Ответ #10 : 14-11-2018, 10:51:53 »
Посмотрите еще пример в SDK: Samples\TransactionControl\CS

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #11 : 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



Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #12 : 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)).... Я не знаю ваших условий, поэтому коллектор сами делайте
Также уровень можно получить из текущего вида, если это, например, план.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Как создать стену в ревит
« Ответ #13 : 14-11-2018, 12:35:18 »
Создаю с чистого листа по шаблону строительства "голый файл"
 Перехожу в вид, например "Уровень 1"
Хочу получить уровень у активного вида

Код - C# [Выбрать]
  1.  var CurrLevel = doc.ActiveView.LevelId;
  2.  
Пишет ошибку No Level
 

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Как создать стену в ревит
« Ответ #14 : 14-11-2018, 12:38:38 »
Создаю с чистого листа по шаблону строительства "голый файл"
 Перехожу в вид, например "Уровень 1"
Хочу получить уровень у активного вида

Код - C# [Выбрать]
  1.  var CurrLevel = doc.ActiveView.LevelId;
  2.  
Пишет ошибку No Level
Надо брать не LevelId, а doc.ActiveView.GenLevel.Id