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

ADN Club => Revit API => Тема начата: enot от 28-10-2018, 23:51:38

Название: Накопление результата вычитания геометрии
Отправлено: enot от 28-10-2018, 23:51:38
вычитание геометрии можно осуществить для двух элементов через
http://www.revitapidocs.com/2018/89cb7975-cc76-65ba-b996-bcb78d12161a.htm (http://www.revitapidocs.com/2018/89cb7975-cc76-65ba-b996-bcb78d12161a.htm)

есть исходный элемент
Код - C# [Выбрать]
  1. Solid first_geometry ;
и список элементов
Код - C# [Выбрать]
  1. List<Solid> lst_solids = new List<Solid>();
  2. lst_solids.Add(solid_1);
  3. lst_solids.Add(solid_2);
  4. lst_solids.Add(solid_3);
  5.  

Вопрос:

Как осуществить вычитание из исходного элемента список элементов (накопление результата вычитания)?

Код - C# [Выбрать]
  1. Solid result = BooleanOperationsUtils.ExecuteBooleanOperation(first_geometry , lst_solids, BooleanOperationsType.Difference);
???
Название: Re: Накопление результата вычитания геометрии
Отправлено: Александр Пекшев aka Modis от 28-10-2018, 23:58:45
Что-то типа того. Писал "на коленке"
Код - C# [Выбрать]
  1. List<Solid> lst_solids = new List<Solid>();
  2. lst_solids.Add(solid_1);
  3. lst_solids.Add(solid_2);
  4. lst_solids.Add(solid_3);
  5.  
  6. Solid result = null;
  7. for (int i = 1; i < lst_solids.Count; i++)
  8. {
  9.     if (result == null)
  10.         result = BooleanOperationsUtils.ExecuteBooleanOperation(lst_solids[i - 1], lst_solids[i], BooleanOperationsType.Difference);
  11.     else
  12.         result = BooleanOperationsUtils.ExecuteBooleanOperation(result, lst_solids[i], BooleanOperationsType.Difference);
  13. }
Название: Re: Накопление результата вычитания геометрии
Отправлено: enot от 29-10-2018, 00:13:29
что-то не выходит
Код - C# [Выбрать]
  1. MessageBox.Show( result.SurfaceArea.ToString());
дает ноль

мне нужно от first_geometry  отнимать элементы списка lst_solids

Пошагово так:
s1 = first_geometry - solid_1
s2 = s1 - solid_2
s3 = s2 - solid_3

result =s_3

Проблема в том, что количество солидов в lst_solids заранее неизвестно , нужно что то универсальное


Название: Re: Накопление результата вычитания геометрии
Отправлено: Александр Ривилис от 29-10-2018, 00:50:07
Проблема в том, что количество солидов в lst_solids заранее неизвестно , нужно что то универсальное
Ну и что? Из исходного по очереди вычитаешь все элементы из списка. Не понимаю в чем проблема.
Код - C# [Выбрать]
  1.     List<Solid> lst_solids = new List<Solid>();
  2.     lst_solids.Add(solid_1);
  3.     lst_solids.Add(solid_2);
  4.     lst_solids.Add(solid_3);
  5.      
  6.     Solid result = first_geometry;
  7.     for (int i = 0; i < lst_solids.Count; i++)
  8.     {
  9.           result = BooleanOperationsUtils.ExecuteBooleanOperation(result, lst_solids[i], BooleanOperationsType.Difference);
  10.     }
Название: Re: Накопление результата вычитания геометрии
Отправлено: enot от 29-10-2018, 01:00:48
 Александр Ривилис, Спасибо)
Название: Re: Накопление результата вычитания геометрии
Отправлено: Александр Ривилис от 29-10-2018, 01:04:10
Александр Ривилис, Спасибо)
Это не мне спасибо, а Александру Пекшеву aka Modis. Я просто чуть-чуть подправил его код "в связи с вновь открывшимися обстоятельствами". Можно было бы использовать и его код, если бы в список сначала добавить first_geometry, а затем уже solid_1, solid_2, solid_3...
Название: Re: Накопление результата вычитания геометрии
Отправлено: enot от 29-10-2018, 01:24:37
Александр Ривилис
да, вы правы.
Рабочий ответ был ранее от  Александр Пекшев aka Modis