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

ADN Club => Revit API => Тема начата: RomanShib от 18-11-2021, 00:29:12

Название: Формирование разделенной поверхности стен Revit API
Отправлено: RomanShib от 18-11-2021, 00:29:12
 Я пишу программу, которая формирует разделенную поверхность, используя ссылку на грань формы. Но при применении к стенам(искомая строка с выбором категории выделена ниже), программа ничего не делает. Как применить данную программу только ко всем стенам в проекте?



 
Код - 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.     }
Название: Re: Формирование разделенной поверхности стен Revit API
Отправлено: Александр Ривилис от 18-11-2021, 00:38:59
RomanShib,
Приветствую на форуме!
Напоминаю правило форматирования кода на нашем форуме (у меня в подписи)!
Название: Re: Формирование разделенной поверхности стен Revit API
Отправлено: Ihar от 18-11-2021, 02:44:04
OST_CurtainGridsWall - это не витражная стена, а разрезка стены. Вам нужно использовать OST_Walls а потом уже из них выбирать витражные стены. Не совсем понятно что потом вы хотите с этими стенами сделать(
Название: Re: Формирование разделенной поверхности стен Revit API
Отправлено: RomanShib от 18-11-2021, 11:13:09
Задумка такая, что я хочу накладывать моделирующую штриховку на стены в проекте. Для начала на все, а потом только на выбранные.
Я прочитал, что для этого сначала нужно разделить поверхность, а уже потом накладывать штриховку.
Только начинаю свое знакомство с Revit, поэтому возможно я что-то не так делаю.((
Название: Re: Формирование разделенной поверхности стен Revit API
Отправлено: Ihar от 18-11-2021, 14:25:21
Штриховка не на стену накладывается, а на материал. Нужно получить стену, затем выбрать ее слои методом GetCompoundStructure(), потом получить слой GetLayers, а у слоя есть свойство MaterialId. Можно заменить на другой материал или отредактировать тот что есть, добавить моделирующую штриховку.

Делить можно витражные стены на панели или обычные стены можно делить на части, а потом уже части делить на участки, которым потом можно отдельные материалы задавать.
Название: Re: Формирование разделенной поверхности стен Revit API
Отправлено: RomanShib от 18-11-2021, 16:44:47
Большое спасибо за разъяснение