Как проверить, нарушена ли топология у тела?

Автор Akew, 24.04.17, 06:54:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Akew

24.04.17, 06:54:35 Последнее редактирование: 24.04.17, 08:58:24 от Starik
Добрый день!
Существует ли способ проверить, не нарушена ли топология у тела?
Тело принадлежит детали, которая была создана вручную (не программно).
Спасибо.

Можно попробовать ksReturnResult, но гарантии нет, что будет работать.
Для документа-модели, там есть значение для ошибочной топологии.

et3dError130 - 130 - Ошибочная топология

Akew

Цитата: Sabahs от 24.04.17, 08:20:03

et3dError130 - 130 - Ошибочная топология

Действительно, есть. Но только эту проверку нужно делать сразу после создания неправильного тела. А у меня - тело было уже готовым, это исходное данное. Его невозможно изменить, т.е., "открутить" операции его создания назад до операции, когда из нормального оно стало телом с нарушенной топологией.

Я не писал, что надо откручивать операции назад, а попробовать сделать какую нибудь манипуляцию с телом, ошибка не должна дать её сделать.

333

Можно попробовать
ksFeature::objectError == et3dError130

Ё

Цитата: Sabahs от 26.04.17, 06:48:34
Я не писал, что надо откручивать операции назад, а попробовать сделать какую нибудь манипуляцию с телом, ошибка не должна дать её сделать.

Это, конечно, остроумно. Но вряд ли можно употребить какую-то универсальную "махинацию"... Один из "внешних" признаков нарушенной топологии - нулевой объЁм тела. ( На самом деле, получающийся объЁм бывает отрицательным. Но "Компас" не считает "ниже нуля". ) Это когда перепутаны нормали поверхностей.
А вот когда самопересечения или несшитые грани? Попробовать "Отсечение поверхностью"?

Ё

 Мой вариант:
а) ко ВСЕМ поверхностям импортированного тела создать эквидистантные поверхности с НУЛЕВЫМ смещением. "Сшить" полученные эквидистанты с созданием тела и точностью "0".
Если "сшивка" прошла, то:
б) проверка ОБЪЁМА полученного от "сшивки" тела - ОБЪЁМ полученного от "сшивки" тела должна быть СТРОГО больше "0"-ля! Если ТОЧНО "0" - незамкнутая оболочка; если меньше "0"-ля - самопересечение, "вывернутость".

Ё

 Почему такой "витиеватый" алгоритм? Дело в том, что если обсчЁт топологии в "Компас"-е сделан в соответствии со "скрижалями" Н.Н.Голованова, то, вполне вероятно, что там есть один фундаментальный "косяк"... Косвенным тому подтверждением служат случаи отказов программы в выполнении булевых операций: как в составе формообразующих операций, так и самих по себе...

chelkar

Можно еще так попробовать.
Если у тела нормальная топология, то к каждому ребру будут примыкать ровно две грани.
Отсюдова решение. Берем все ребра и каждого ребра спрашиваем смежные грани через GetAdjacentFace (), спрашиваем дважды facePlus=TRUE и facePlus=FALSE. Если хотя бы одной грани нет, значит ребро краевое и оболочка тела в этом случае разомкнута.


Ё

 Для "сугрева": вся дискуссия выше - " НИ О ЧЁМ"! Ибо:

а) формат исходной модели?
б) результат трансляции в формат "Компас"-а?
в) критерий НАРУШЕННОЙ топологии? ( Ибо: в "общей" топологии и бутыль Кляйна - нормально! )

P.S.:
Цитата: chelkar от 05.06.17, 16:53:27
          ...
          Если у тела нормальная топология, то к каждому ребру будут примыкать ровно две грани.
          ...
         

           А у оболочки шара - 3 ребра... И к невырожденному примыкает одна и та же грань... 88))

Akew

Проверка нужна в общем виде. Т.е., чтобы на входе функции (метода) была модель (хотя бы в .a3d или .m3d), на выходе - "да" или "нет" (топология нарушена или нет) - безотносительно формата, языка и т.д.
Критерий (в контексте рассматриваемой проблемы) - это наличие или отсутствие сообщения КОМПАСа о том, что невозможно выполнить операцию (например, выдавливания) из-за того, что у тела, над которым выполняется операция, нарушена топология. Хотелось бы научиться проверять целостность этой самой топологии самостоятельно, до выполнения той или иной операции.

Насчет наличия ребер у шара - я тоже как-то обращал на это внимание. Но пока не стал "копать" в этом направлении, т.к., на мой взгляд, это только частный случай.

Ё

 Но, подождите! Если исходная модель - формате "Компас"-а, то в ней будет извещение о неправильной топологии?! Ежели ув. Sabahs не прояснит здесь, то зайдите на сайт "3D-Lfbs" и посмотрите "ядерный мануал".
Если же Вы хотите начать "копать" с "общенаучных" позиций, то: у Вас есть доступ к книге "АСКОН"-овского патриарха Н.Н.Голованова "Геометрическое моделирование" "крайнего" издания от 2011 года? Что-то меня раздел про топологию... не вдохновил! Что-то там не то...

Ё

Цитата: Akew от 13.06.17, 19:12:37
....
Критерий (в контексте рассматриваемой проблемы) - это наличие или отсутствие сообщения КОМПАСа о том, что невозможно выполнить операцию (например, выдавливания) из-за того, что у тела, над которым выполняется операция, нарушена топология. ...

Насчет наличия ребер у шара - я тоже как-то обращал на это внимание. Но пока не стал "копать" в этом направлении, т.к., на мой взгляд, это только частный случай.

1.Сообщения КОМПАСа о том, что невозможно выполнить операцию - это ещЁ "бабка надвое сказала"! Даже для "крайней версии"! См. посты от меня и YNA в теме "Кто не забыл "Компас". И это ещЁ - "на скорую руку"! Есть и более коварные "засады" в моделях, созданных "Компас"-ом.
2.Заметьте: частные случаи в науках приводят к кардинальным изменениям парадигм...
В общем:
3. Полгода уж жду "свободные, но заинтересованные уши" для обсуждения темы топологии 3D-моделей...