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

ADN Club => AutoCAD .NET API => Тема начата: avc от 18-08-2019, 21:24:43

Название: Замена поверхностей тела
Отправлено: avc от 18-08-2019, 21:24:43
Есть задача заменить все кривоватые поверхности (Surface) тела (Solid3d) на плоские (Region) по тем же вертексам. (При условии что все вертексы на одной плоскости).
Получить грань из BRep не проблема, взять ее Entity - тоже не проблема. А вот как вставить замену обратно в солид? Не вижу никаких методов подмены частей у Solid3d. Обходных путей тоже не придумаю никак. Если б задача ограничивалась только выпуклыми поверхностями - то я бы построил плоскость по вертексам и отрезал (Slice) ей от солида все лишнее. Но поверхности могут быть и вогнутыми внутрь тела...
Название: Re: Замена поверхностей тела
Отправлено: Александр Ривилис от 18-08-2019, 21:35:38
А Solid3d.RemoveFaces не пробовал? Интересно что получится.
Название: Re: Замена поверхностей тела
Отправлено: avc от 18-08-2019, 21:40:54
RemoveFaces пробовал. Дырки удаляет на раз-два. Фаски иногда можно убрать. Думаю когда-нибудь использовать этот метод для построения упрощенного представления сборки. Но сейчас нужен не Remove, а Replace...
Название: Re: Замена поверхностей тела
Отправлено: Александр Ривилис от 18-08-2019, 21:42:28
А комбинация RemoveFaces и ImprintEntity (здесь новый Region)?
Название: Re: Замена поверхностей тела
Отправлено: avc от 18-08-2019, 21:50:40
ImprintEntity не пробовал т.к. подозреваю что это аналог команды Imprint, которая делает чуть больше чем ничего - плоские рисунки каким-то образом ассоциируются с поверхностями, но остаются плоскими и невидимыми ни в одном визуальном стиле кроме каркаса, т.е. не меняют геометрии тела. Если это какой-то другой Imprint - тогда можно потестировать... Но в любом случае нельзя у, грубо говоря, кубика удалить одну грань. RemoveFaces в лучшем случае выдаст eGeneralModelingFail а в худшем фатал. Ибо даже моей фантазии не хватает чтоб представить себе кубик из 5и граней :)
Название: Re: Замена поверхностей тела
Отправлено: Александр Ривилис от 18-08-2019, 21:55:46
Еще одна идея. Solid3d.ExtrudeFaces с большим положительным height, зачем обрезаешь плоскостью и обратно Solid3d.ExtrudeFaces и тем же, но отрицательным height. Но это всё очень ненадежно. А надежного решения похоже нет.
Возможно вместо Solid3d.ExtrudeFaces  можно использовать Solid3d.OffsetFaces
Название: Re: Замена поверхностей тела
Отправлено: avc от 18-08-2019, 22:07:23
Хм...если Extrude сработает, то должно получится... Есть еще одна идея, но надо научиться двигать вертексы или ребра - и тоже я не вижу подходящего метода. А ведь пользователь запросто может их двигать - выбрал через ctrl и таскай move или gizmo или просто мышкой за grip... А в API ничего такого?
Название: Re: Замена поверхностей тела
Отправлено: Александр Ривилис от 18-08-2019, 22:14:10
А в API ничего такого?
Увы.