Работа с гранями тела

Автор DMortem, 22.04.26, 09:59:31

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

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

DMortem

Добрый день. Прошу подсказки куда копать. У меня следующая задача. Мне надо в активной детали выбрать грани внешние и удалить. В документации у тела IPart7 можно получить для работы с поверхностями ISurfaceContainer, в нем уже есть интерфейсы работы с удаленными гранями. Object.FaceRemovers(), тут я столкнулся с тем, что этот интерфейс работает если грани уже есть удаленные, в противном случае вернется None, а для создания операции удаления мне надо вызвать у IFaceRemovers метод Add. Тут я еще столкнулся с такой бедой, если удалить грани вручную, и вызвать Object.FaceRemovers(), по документации мне должен вернуться указатель IFaceRemovers, но по непонятным причинам возвращается IModelObject. Прикрепил скрипт с комментариями. Не могу разобраться как правильно получать интерфейс IFaceRemovers, что бы я мог работать с ним.

Михаил88

Добрый день, можете пример детали скинуть или картинку, что хотите удалять?

DMortem

Есть труба, мне надо удалить все грани внешние, что бы оставался только внутренний контур, потом надо нарастить толщину сверху. Это операция проделывается для трубореза, когда есть запил под углом.

Михаил88

Цитата: DMortem от 22.04.26, 10:55:50Есть труба, мне надо удалить все грани внешние, что бы оставался только внутренний контур, потом надо нарастить толщину сверху. Это операция проделывается для трубореза, когда есть запил под углом.

Выделяете вручную грани и запускаете

kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
selection_manager = kompas_document_3d.SelectionManager
selected_objects = selection_manager.SelectedObjects

part7 = kompas_document_3d.TopPart
surface_container = kompas_api7_module.ISurfaceContainer(part7)
face_removers = surface_container.FaceRemovers
face_remover = kompas_api7_module.IFaceRemover(face_removers.Add())

face_remover.Faces = selected_objects
face_remover.Name = "Удалить грани"
face_remover.Update()

Результат выполнения

Screenshot_2.png
+ Благодарностей: 1

Slaviation

ЦитироватьВыделяете вручную грани и запускаете
Добрый день. Можно узнать: для фрагмента кода как-то использовался PyKompasMacro?

Михаил88

#5
Добрый день. Да, я его только доработал.

DMortem

Пришлось установить SaveBody = False, только тогда начал удалять. До этого просто игнорировал. Буду теперь дорабатывать что бы автоматически определял внешние и торцевые грани.

Михаил88

Цитата: DMortem от 22.04.26, 11:59:40Пришлось установить SaveBody = False, только тогда начал удалять. До этого просто игнорировал. Буду теперь дорабатывать что бы автоматически определял внешние и торцевые грани.

У меня в К18.1 нету.
только в К20 появилось.
Screenshot_3.png

p3452

Цитата: DMortem от 22.04.26, 09:59:31Мне надо в активной детали выбрать грани внешние и удалить.
Чет, фигня какая-то.., учитывая следующее:
Цитата: DMortem от 22.04.26, 10:55:50Есть труба, мне надо удалить все грани внешние, что бы оставался только внутренний контур, потом надо нарастить толщину сверху.

А не проще строить параметризованную "трубу" с изменяемой толщиной стенки?

p/s: Стараюсь, от потенциальных заказчиков, ПРОМЕЖУТОЧНЫЕ задачи не брать в работу - часто, они сами не знают, что им надо...

DMortem

Там заморочка с самим труборезом, я бы вообще делал простой запил под 45 и не заморачивался, но из-за того как фактически порежется труба, возникает дополнительная операция перед сваркой, необходимо сточить ступеньку на внешнем угле запила. А если проделать манипуляции через удаление и придание толщины, он делает внешний контур реза так, что доп. обработка не требуется.