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

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 06-08-2019, 02:11:27

Название: Ошибка при объединении областей
Отправлено: Алексей Терно от 06-08-2019, 02:11:27
Области автокада имеют замечательные методы, например, объединение - две отдельные области можно объединить в одну. Но вот беда, при попытке объединения двух областей возникает ошибка 'Error Code Number is 83028'. Есть одна большая область и одна маленькая. Обе они расположены в плоскости XY в нулевой отметке:
(https://i.ibb.co/BfJ2r0z/2019-08-06-1-50-44.png)
Большая область (красная) состоит из двух частей - большой и маленькой слева. Вторая область - белая на правом рисунке. Вторая область имеет площадь 0.00000736 и периметр 385.84600827, т.е. она не нулевая. И при попытке объединения этих двух областей, возникает вышеуказанная ошибка. Подробное описание в командной строке, если объединять вручную через интерфейс автокада:
Код - Microsoft Registry [Выбрать]
  1. Сбой логической операции над 3D-телами или поверхностями.
  2. Ошибка операции моделирования:
  3. Error Code Number is 83028
Никаких вменяемых данных по этой ошибке я не нашел.
Если рядом создать новую область, например, из прямоугольника, то она без каких-либо проблем объединяется и с большой областью и с малой областью.
Может быть кто-нибудь подскажет, в чем проблема? В каком направлении копать?

Объединение выполняю вот так:
Код - C# [Выбрать]
  1. r0.BooleanOperation(BooleanOperationType.BoolUnite, r);
Во вложении чертеж с этими двумя областями.
Название: Re: Ошибка при объединении областей
Отправлено: Александр Ривилис от 06-08-2019, 08:53:54
Может быть кто-нибудь подскажет, в чем проблема? В каком направлении копать?
Тут нечего копать. Это один из "оченьдолгоиграющих багов" AutoCAD. Связано это (IMHO) с точностью работы с телами и областями на уровне 1e-6. Не лечится. Иногда помогает перенос поближе к (0,0,0)
Название: Re: Ошибка при объединении областей
Отправлено: trir от 06-08-2019, 10:29:28
когда мне понадобилось объеденять области - скачал геометрический движок от MS SQL Server'а (https://www.nuget.org/packages/Microsoft.SqlServer.Types/)
Название: Re: Ошибка при объединении областей
Отправлено: Алексей Терно от 07-08-2019, 00:29:50
Тут нечего копать. Это один из "оченьдолгоиграющих багов" AutoCAD. Связано это (IMHO) с точностью работы с телами и областями на уровне 1e-6. Не лечится.
Я очень расстроился :( Это означает, что в районе границ будут стопроцентные косяки (((
Я, конечно попробую, как-нибудь это обыграть, но много времени тратить не буду.
Спасибо за информацию!
Название: Re: Ошибка при объединении областей
Отправлено: Алексей Терно от 07-08-2019, 00:31:37
когда мне понадобилось объеденять области - скачал геометрический движок от MS SQL Server'а
А можно ссылку на какой-нибудь пример?
Название: Re: Ошибка при объединении областей
Отправлено: Дмитрий Загорулькин от 07-08-2019, 11:09:33
Я очень расстроился  Это означает, что в районе границ будут стопроцентные косяки (((
Не помогает временный перенос объектов в начало координат (Перенёс - объединил - вернул обратно)? Мне в аналогичной ситуации с 3D телами помогло (https://adn-cis.org/forum/index.php?topic=9318.0).
Название: Re: Ошибка при объединении областей
Отправлено: Алексей Терно от 07-08-2019, 11:11:58
Не помогает временный перенос объектов в начало координат (Перенёс - объединил - вернул обратно)? Мне в аналогичной ситуации с 3D телами помогло.
Я попробую, но меня смущает, что это помогает не всегда.
Название: Re: Ошибка при объединении областей
Отправлено: Александр Ривилис от 07-08-2019, 11:21:21
Я очень расстроился  Это означает, что в районе границ будут стопроцентные косяки (((
Не помогает временный перенос объектов в начало координат (Перенёс - объединил - вернул обратно)? Мне в аналогичной ситуации с 3D телами помогло (https://adn-cis.org/forum/index.php?topic=9318.0).
В данном случае нет. Фактически в данном случае меньшая область практически совпадает с частью большой области. Причем она очень узкая и длинная. Если чуть-чуть сдвинуть меньшую область, то UNION работает.