Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: avc от 18-08-2019, 21:24:43
-
Есть задача заменить все кривоватые поверхности (Surface) тела (Solid3d) на плоские (Region) по тем же вертексам. (При условии что все вертексы на одной плоскости).
Получить грань из BRep не проблема, взять ее Entity - тоже не проблема. А вот как вставить замену обратно в солид? Не вижу никаких методов подмены частей у Solid3d. Обходных путей тоже не придумаю никак. Если б задача ограничивалась только выпуклыми поверхностями - то я бы построил плоскость по вертексам и отрезал (Slice) ей от солида все лишнее. Но поверхности могут быть и вогнутыми внутрь тела...
-
А Solid3d.RemoveFaces не пробовал? Интересно что получится.
-
RemoveFaces пробовал. Дырки удаляет на раз-два. Фаски иногда можно убрать. Думаю когда-нибудь использовать этот метод для построения упрощенного представления сборки. Но сейчас нужен не Remove, а Replace...
-
А комбинация RemoveFaces и ImprintEntity (здесь новый Region)?
-
ImprintEntity не пробовал т.к. подозреваю что это аналог команды Imprint, которая делает чуть больше чем ничего - плоские рисунки каким-то образом ассоциируются с поверхностями, но остаются плоскими и невидимыми ни в одном визуальном стиле кроме каркаса, т.е. не меняют геометрии тела. Если это какой-то другой Imprint - тогда можно потестировать... Но в любом случае нельзя у, грубо говоря, кубика удалить одну грань. RemoveFaces в лучшем случае выдаст eGeneralModelingFail а в худшем фатал. Ибо даже моей фантазии не хватает чтоб представить себе кубик из 5и граней :)
-
Еще одна идея. Solid3d.ExtrudeFaces с большим положительным height, зачем обрезаешь плоскостью и обратно Solid3d.ExtrudeFaces и тем же, но отрицательным height. Но это всё очень ненадежно. А надежного решения похоже нет.
Возможно вместо Solid3d.ExtrudeFaces можно использовать Solid3d.OffsetFaces
-
Хм...если Extrude сработает, то должно получится... Есть еще одна идея, но надо научиться двигать вертексы или ребра - и тоже я не вижу подходящего метода. А ведь пользователь запросто может их двигать - выбрал через ctrl и таскай move или gizmo или просто мышкой за grip... А в API ничего такого?
-
А в API ничего такого?
Увы.