Изоляция экземпляров семейства для дальнейшего экспорта в DWG
Проблема следующая: нужно взять оборудование, представленное в виде семейств категории Типовые модели на 3D виде и для каждого оборудования создать отдельный вид для дальнейшего экспорта в DWG.
Один из способов представлен ниже. Мы берем все экземпляры семейств типовых моделей на текущем виде, затем, соответствующие семейства. Потом создаем вид для каждого семейства создаем новый вид с названием семейства.
Чтобы отображать на виде только определенные экземпляры семейств, нужно создать и установить новый фильтр на вид. На самом деле, Jeremy уже делал подобное (статью на блоге Jeremy писал на самом деле я и она также есть на нашем сайте – прим. переводчика) и мы немного его подправили для нашей задачи.
И в конце мы экспортировали созданные виды.
Код с комментариями представлен ниже:
- // Получаем текущий документ
- Document doc = commandData.Application.ActiveUIDocument.Document;
- // Берем все экземпляры семейств категории Типовые модели
- FilteredElementCollector collGenericModels =
- new FilteredElementCollector(doc, doc.ActiveView.Id);
- collGenericModels.OfClass(typeof(FamilyInstance));
- collGenericModels.OfCategory(BuiltInCategory.OST_GenericModel);
- // Но так как нам нужны семейства
- // создадим список идентификаторов семейств
- List<int> genericModelsFamiliesIds = new List<int>();
- foreach (FamilyInstance equip in collGenericModels)
- {
- ElementId symbolId = equip.Symbol.Id;
- if (!genericModelsFamiliesIds.Contains(symbolId.IntegerValue))
- genericModelsFamiliesIds.Add(symbolId.IntegerValue);
- }
- // получаем текущий вид
- View3D activeView = doc.ActiveView as View3D;
- if (activeView == null)
- {
- // Должен быть активный 3D вид
- message = "Запустите команду находясь на 3D виде" ;
- return Result.Failed;
- }
- // контролируем количество копий
- int copy = 1;
- // список созданных видов
- List<ElementId> viewIds = new List<ElementId>();
- foreach (int genericModelId in genericModelsFamiliesIds)
- {
- // Берем семейство
- FamilySymbol famSymbol = doc.GetElement(
- new ElementId(genericModelId)) as FamilySymbol;
- // Создаем вид поутем создания копии текущего вида
- ElementId genericModelViewId = activeView.Duplicate(
- ViewDuplicateOption.Duplicate);
- // добавляем этот вид в список
- viewIds.Add(genericModelViewId);
- View3D genericModelView = doc.GetElement(
- genericModelViewId) as View3D;
- // Здесь можно настроить имя вида
- string viewName = string.Format("MM-{0}", famSymbol.Name);
- try
- {
- // пытаемся задать новое имя
- genericModelView.ViewName = viewName;
- }
- catch
- {
- // по идее не должно случиться.
- // если только у вас регламент наименований слишком сложный
- viewName = string.Format("{0} - Copy ({1})", viewName, copy);
- genericModelView.ViewName = viewName;
- copy++;
- }
- // Спрячем все категории на виде
- foreach (Category cat in doc.Settings.Categories)
- {
- try { genericModelView.SetVisibility(cat, false); }
- catch { /* não aplicável */}
- }
- // И установим видимость Типовых моделей
- Category catGenericModel = doc.Settings.Categories.
- get_Item(BuiltInCategory.OST_GenericModel);
- genericModelView.SetVisibility(catGenericModel, true);
- // Сейчас создадим фильтр
- // С префиксом F_
- ParameterFilterElement newFilter =
- ParameterFilterElement.Create(
- doc, string.Format("F_{0}", viewName),
- new[] { catGenericModel.Id });
- // Задаем правило, что отображать только экземпляры с определенным названием типоразмера
- FilterRule rule = ParameterFilterRuleFactory.
- CreateNotEqualsRule(
- new ElementId(BuiltInParameter.ALL_MODEL_TYPE_NAME),
- famSymbol.Name, true);
- // Применяем правило
- newFilter.SetRules(new[] { rule });
- genericModelView.AddFilter(newFilter.Id);
- genericModelView.SetFilterVisibility(newFilter.Id, false);
- }
- // Ну и наконец экспортируем виды в DWG
- DWGExportOptions options = DWGExportOptions.GetPredefinedOptions(
- doc, "Standard");
- doc.Export("c:\\temp_rvt\\", "GenericModels", viewIds, options);
Источник: http://adndevblog.typepad.com/aec/2015/04/revit-api-training-and-some-manual-work-automation.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2732
Опубликовано 23.05.2015