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

ADN Club => Revit API => Тема начата: Алексей (IdeaSoft) от 03-09-2018, 12:59:21

Название: Получить список листов и выбрать нужный лист по его типу
Отправлено: Алексей (IdeaSoft) от 03-09-2018, 12:59:21
Подскажите в каком классе я могу получить список листов.
Мне нужно в активном документе Revit:
1) получить нужный лист (выделив тот который соотв определенному типу листа)
2) сделать его активным
3) Импортировать этот лист dwg
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Александр Игнатович от 03-09-2018, 13:05:22
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
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Алексей (IdeaSoft) от 03-09-2018, 13:32:45
Делаю экспорт вот так.
Пока еще не разобрался как получить объекты геометрии.
Код - 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);
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Алексей (IdeaSoft) от 03-09-2018, 13:46:29
Может вообще все не так делаю в этих строчках
Мне нужно получить перечень элементов активного вида.
Код - C# [Выбрать]
  1.         GeometryObject gObj = ???;
  2.         ICollection<ElementId> elemid = doc.ActiveView.GetGeneratingElementIds(gObj);
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Александр Игнатович от 03-09-2018, 13:54:02
не-а. не надо.
Код - 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 он для другого. У вида вообще не имеет смысла. Это относится, например, если некая поверхность получается путем объединением элементов с твердотельной и пустотной геометрием, то вызвав этот метод с переданной поверхностью можно получить, какие элементы эту поверхность образуют
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Алексей (IdeaSoft) от 03-09-2018, 13:57:38
ICollection<ElementId> views
А как это список видов получить?
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Александр Игнатович от 03-09-2018, 13:59:47
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();
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Алексей (IdeaSoft) от 03-09-2018, 17:21:20
Сделал так

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

Код - 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.  
Название: Re: Получить список листов и выбрать нужный лист по его типу
Отправлено: Александр Игнатович от 03-09-2018, 17:47:02
OfClass(typeof(ElementId))


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