Вычитание регионов

Автор Тема: Вычитание регионов  (Прочитано 11805 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вычитание регионов
« Ответ #15 : 18-06-2022, 20:18:52 »
Что-то я не вижу, чтобы ты добавлял в базу результат Intersect
Посмотри пример отсюда: https://help.autodesk.com/view/ACD/2017/DEU/?guid=GUID-5F8D4718-D0A5-41F9-9178-A4508133855A
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: 0
Re: Вычитание регионов
« Ответ #16 : 18-06-2022, 20:46:35 »
Объекты добавляются в чертеж тут:
List<СomplicatedRegion> RegionСС = GetRegion(WorkLayer.layerСС);
List<СomplicatedRegion> RegionOZ = GetRegion(WorkLayer.layerOZ);

Дополнительного добавления не надо будет ошибка, что уже есть такой объект.


Clone тоже не дал результатов.

Код - C# [Выбрать]
  1. //выбираем регионы по стеснености
  2.                     Region region_CC = tr.GetObject(regionСС.Id, OpenMode.ForWrite) as Region;
  3.                     //Создаем копию изменяемого региона
  4.                     //CopyRegion(out ObjectId idRegion1, region_CC);
  5.                     //Region r1 = tr.GetObject(idRegion1, OpenMode.ForWrite) as Region;
  6.                     Region r1 = (Region)region_CC.Clone();
  7.                     //Плошадь для сравнения изменений
  8.                     double area01 = r1.Area;
  9.                     int k = 1;
  10.                     //Сортировка - поиск обединенных регионов
  11.                     foreach (СomplicatedRegion regionOZ in RegionOZ)
  12.                     {
  13.                         //Создаем копию изменяемого региона
  14.                         //CopyRegion(out ObjectId idRegion2, tr.GetObject(regionOZ.Id, OpenMode.ForWrite) as Region);
  15.                         //Region r2 = tr.GetObject(idRegion2, OpenMode.ForWrite) as Region;
  16.                         Region region_OZ = tr.GetObject(regionOZ.Id, OpenMode.ForWrite) as Region;
  17.                         Region r2 = (Region)region_OZ.Clone();
  18.                         //Поиск общего пересечения
  19.                         r1.BooleanOperation(BooleanOperationType.BoolIntersect, r2);
  20.                         //blocktableRecord.AppendEntity(r1);
  21.                         //tr.AddNewlyCreatedDBObject(r1, true);
  22.  
  23.                         //region_CC.BooleanOperation(BooleanOperationType.BoolSubtract, r);
  24.                         //r1.BooleanOperation(BooleanOperationType.BoolUnite, r2);
  25.                         MessageBox.Show("k = " + k.ToString());
  26.                         k++;
  27.                     }

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

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: 0
Re: Вычитание регионов
« Ответ #17 : 18-06-2022, 20:56:22 »
Скорее всего проблема в создании клона (копии),
Если взять чистые списки созданных регионов, то они нормально объединяются , но при этом после каждой операции из списка исчезает объект.

пока над этим поработаю.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вычитание регионов
« Ответ #18 : 18-06-2022, 21:18:22 »
Кстати, я не увидел у тебя в коде CheckInterference. Т.е. ты совсем не проверяешь есть ли вообще пересечение областей.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: 0
Re: Вычитание регионов
« Ответ #19 : 18-06-2022, 21:27:57 »
Пока нет. (сейчас главное пересечений добиться)
BooleanOperation вернет исходный регион если нет пересечек.
CheckInterference - это же для 3dSolid.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вычитание регионов
« Ответ #20 : 18-06-2022, 21:54:15 »
CheckInterference - это же для 3dSolid.
Точно. Склероз.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: 0
Re: Вычитание регионов
« Ответ #21 : 19-06-2022, 10:42:59 »
В общем ошибка была в логике, получалось так:
сперва создается копия р1 участка (большого).
Потом берётся список и копии р2.
При первом изменении р1 он уже неравен р1 - т.е. пересечение срабатывает.
А потом (по данным из примера) уже изменный р1 ищет пересечение с р2 остальными, а их то нету - поэтому и Region ==0.

Александр спасибо Вам - в очередной раз!!!