Получить список листов и выбрать нужный лист по его типу

Автор Тема: Получить список листов и выбрать нужный лист по его типу  (Прочитано 5208 раз)

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

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Подскажите в каком классе я могу получить список листов.
Мне нужно в активном документе Revit:
1) получить нужный лист (выделив тот который соотв определенному типу листа)
2) сделать его активным
3) Импортировать этот лист dwg

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
1) см. FilteredElementCollector, что-то вроде:
Код - C# [Выбрать]
  1. var col = new FilteredElementCollector(doc);
  2. var sheet = col.OfClass(typeof(ViewSheet)).Cast<ViewSheet>().First(<your condition>);

2) uiDocument.ActiveView =

3) document.Export

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Делаю экспорт вот так.
Пока еще не разобрался как получить объекты геометрии.
Код - C# [Выбрать]
  1. string folder = "C:\\SOURCE_RVT\\";
  2.         string fn = folder + "file.rvt";
  3.         UIDocument uidoc = data.Application.OpenAndActivateDocument(fn);
  4.         Document doc = uidoc.Document;
  5.  
  6.         GeometryObject gObj = ???; Тут вот не понятно как получить объекты геометрии
  7.         ICollection<ElementId> elemid = doc.ActiveView.GetGeneratingElementIds(gObj);
  8.  
  9.         DWGExportOptions opt = new DWGExportOptions();
  10.         opt.ExportOfSolids = SolidGeometry.ACIS;  
  11.         string folderDWGUOT = "C:\\EXPORT\\DWG\\";
  12.         doc.Export(folderDWGUOT, "file.dwg", elemid, opt);

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Может вообще все не так делаю в этих строчках
Мне нужно получить перечень элементов активного вида.
Код - C# [Выбрать]
  1.         GeometryObject gObj = ???;
  2.         ICollection<ElementId> elemid = doc.ActiveView.GetGeneratingElementIds(gObj);

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
не-а. не надо.
Код - C# [Выбрать]
  1. public bool Export(
  2.         string folder,
  3.         string name,
  4.         ICollection<ElementId> views,
  5.         DWGExportOptions options
  6. )
  7.  

сюда передается перечень id-шек видов, а не элементов в них. Если когда-нибудь понадобится получать элементы в текущем виде, используйте также FilteredElementCollector, в конструктор 2 параметром нужно передать id вида. Метод GetGeneratingElementIds он для другого. У вида вообще не имеет смысла. Это относится, например, если некая поверхность получается путем объединением элементов с твердотельной и пустотной геометрием, то вызвав этот метод с переданной поверхностью можно получить, какие элементы эту поверхность образуют

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
ICollection<ElementId> views
А как это список видов получить?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
1) см. FilteredElementCollector, что-то вроде:
Код - C# [Выбрать]

    var col = new FilteredElementCollector(doc);
    var sheet = col.OfClass(typeof(ViewSheet)).Cast<ViewSheet>().First(<your condition>);

Ну разве что вместо .First(...) Использовать .Where(...).Select(x => x.Id).ToList();

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Сделал так

Сделал так и все равно ругается

Код - C# [Выбрать]
  1.         try
  2.         {
  3.             var col = new FilteredElementCollector(doc);
  4.             ICollection<ElementId> sheet = col.OfClass(typeof(ElementId)).Cast<ElementId>().ToList<ElementId>();
  5.             DWGExportOptions opt = new DWGExportOptions();
  6.             opt.ExportOfSolids = SolidGeometry.ACIS;
  7.             doc.Export(folderDWGUOT, "file.dwg", sheet, opt);
  8.  
  9.         }
  10.         catch (Exception ex)
  11.         {
  12.             MessageBox.Show(ex.Message);
  13.         }
  14.  

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
OfClass(typeof(ElementId))


Естественно, что это??? Чтобы получить листы, нужно col.OfClass(typeof(ViewSheet))