Формирование разделенной поверхности стен Revit API

Автор Тема: Формирование разделенной поверхности стен Revit API  (Прочитано 4974 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн RomanShibАвтор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
 Я пишу программу, которая формирует разделенную поверхность, используя ссылку на грань формы. Но при применении к стенам(искомая строка с выбором категории выделена ниже), программа ничего не делает. Как применить данную программу только ко всем стенам в проекте?



 
Код - C# [Выбрать]
  1.   public class Command : IExternalCommand
  2.     {
  3.         public Result Execute(
  4.           ExternalCommandData commandData,
  5.           ref string message,
  6.           ElementSet elements)
  7.         {
  8.             UIApplication app = commandData.Application;
  9.             Document doc = app.ActiveUIDocument.Document;
  10.  
  11.             Autodesk.Revit.Creation.Application creApp
  12.               = app.Application.Create;
  13.  
  14.             try
  15.             {
  16.                 FilteredElementCollector forms = new FilteredElementCollector(doc);
  17.                 forms.OfCategory(BuiltInCategory.OST_CurtainGridsWall); // СТРОКА С ВЫБОРОМ КАТЕГОРИИ
  18.  
  19.                 using (Transaction tx = new Transaction(doc))
  20.                 {
  21.                     tx.Start("Create Devided Surface");
  22.  
  23.                     foreach (Form form in forms)
  24.                     {
  25.                         FamilyItemFactory factory = doc.FamilyCreate;
  26.                         Options options = creApp.NewGeometryOptions();
  27.                         options.ComputeReferences = true;
  28.                         options.View = doc.ActiveView;
  29.                         GeometryElement element = form.get_Geometry(options);
  30.  
  31.                         foreach (GeometryObject geoObject in element) // 2013
  32.                         {
  33.                             Solid solid = geoObject as Solid;
  34.                             foreach (Face face in solid.Faces)
  35.                             {
  36.                                 if (face.Reference != null)
  37.                                 {
  38.                                     if (null != face)
  39.                                     {
  40.  
  41.                                     }
  42.                                 }
  43.                             }
  44.                         }
  45.                     }
  46.                     tx.Commit();
  47.                 }
  48.  
  49.                 return Result.Succeeded;
  50.             }
  51.             catch (Exception ex)
  52.             {
  53.                 message = ex.Message;
  54.                 return Result.Failed;
  55.             }
  56.         }
  57.     }
« Последнее редактирование: 18-11-2021, 00:39:53 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
RomanShib,
Приветствую на форуме!
Напоминаю правило форматирования кода на нашем форуме (у меня в подписи)!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Ihar

  • ADN OPEN
  • Сообщений: 18
  • Карма: 2
OST_CurtainGridsWall - это не витражная стена, а разрезка стены. Вам нужно использовать OST_Walls а потом уже из них выбирать витражные стены. Не совсем понятно что потом вы хотите с этими стенами сделать(

Оффлайн RomanShibАвтор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Задумка такая, что я хочу накладывать моделирующую штриховку на стены в проекте. Для начала на все, а потом только на выбранные.
Я прочитал, что для этого сначала нужно разделить поверхность, а уже потом накладывать штриховку.
Только начинаю свое знакомство с Revit, поэтому возможно я что-то не так делаю.((

Отмечено как Решение RomanShib 18-11-2021, 16:44:01

Оффлайн Ihar

  • ADN OPEN
  • Сообщений: 18
  • Карма: 2
Штриховка не на стену накладывается, а на материал. Нужно получить стену, затем выбрать ее слои методом GetCompoundStructure(), потом получить слой GetLayers, а у слоя есть свойство MaterialId. Можно заменить на другой материал или отредактировать тот что есть, добавить моделирующую штриховку.

Делить можно витражные стены на панели или обычные стены можно делить на части, а потом уже части делить на участки, которым потом можно отдельные материалы задавать.

Оффлайн RomanShibАвтор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Большое спасибо за разъяснение