Вопрос про удаленные грани детали

Автор Akew, 15.12.15, 19:29:36

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

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

Akew

Добрый вечер!

Данный вопрос связан с темой про не модальный диалог (http://forum.ascon.ru/index.php/topic,28668.0.html).
В двух словах, ситуация следующая.

1. Вначале у модели удаляю все грани (IFaceRemover).
2. В цикле выводится не модальный диалог-сообщение (пока обычный MessageBox).
3. Пока пользователь не нажмет на ОК, у него есть возможность отредактировать операцию удаленных граней (т.е., отменить удаление тех или иных граней).
4. Когда буден нажата кнопка OK, программа, на основе изменения массива удаленных граней до выбора пользователем граней и после, определяет отобранные грани.
5. Затем для этих граней программа ищет соседние грани (ksFaceDefinition::ConnectedFaceCollection). На время выполнения этого этапа исключаю из расчета операцию удаления граней (в противном случае соседние грани будут искаться только среди не удаленных).
6. Далее эти найденные соседние грани убираются из массива удаленных граней, и на следующей итерации цикла пользователь видит эти грани.
7. Переход на 2.

Для сборок все работает нормально.

Для простых деталей же - нет. Программа правильно находит соседние грани (кол-во найденных граней соответствует действительности), но не может найти эти грани в массиве удаленных граней операции удаления (в лучшем случае, находит и "материализует" только некоторые из них).
Для проверки соответствия граней-соседей удаленным граням использую свойство Reference.
Эти Reference отобранных граней и в массиве удаленных граней действительно отличаются (во всяком случае, большинство из них).

Как мне получить нормальный, т.е., отражающий реальные грани детали, массив удаленных граней, или какой существует иной способ найти отобранные грани среди удаленных?

Спасибо

Akew

Удалось узнать некоторые особенности удаленных граней.

1. Если получить массив граней сборки, затем указать его в операции удаления граней и прочитать этот массив из созданной операции, то Reference граней обоих массивов будут попарно совпадать все.
2. Если же эту операцию проделать для детали, то, в общем случае, Reference будут отличаться (назовем "поддельными Reference" граней, полученных из операции удаления граней ).
3. Если искать соседние грани для грани с "поддельным" Reference, то с ними все нормально: возвращаются грани с их исходными Reference, как будто грань была задана по ее исходному Reference.

Таким образом, вопрос сводится к тому, как получить из "поддельных Reference" исходные.
Кто нибудь сможет что-нибудь посоветовать?

Спасибо

Есть вещи, где по Reference, бесполезно искать, нужно сравнивать геометрию.

Akew

Свой вопрос решил с помощью следующего "костыля":

1. Получаю у модели массив "материализованных" (т.е., не удаленных) граней.
2. Исключаю из расчета операцию удаленных граней (ту операцию, для которой мне нужно получить нормальные Reference удаленных граней).
3. Снова получаю массив "материализованных" граней модели.
4. Вычитаю из массива (3) массив (1). Т.е., из (3) отбираю те элементы, Reference которых нет в элементах (1), - это и будет массив удаленных граней, у которых нормальные Reference.
5. Возвращаю в расчет операцию удаленных граней.

С реальной геометрией решил пока не связываться, - это муторно, - есть опыт.
"Здесь нужен автоген. А автогеном резать - такая возня..." :) (C) Ю.Деточкин, "Берегись автомобиля".

Спасибо всем откликнувшимся, и всех - с наступающим Новым Годом!