• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Чертеж по модели. Выделенный объект.

Автор Spytnik, 02.03.25, 16:08:18

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

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

Spytnik

Доброго дня.
Необходимо получить контур по выделенной поверхности (для дальнейшего сохранения в dxf и резке на лазере).
Помогите реализовать данный алгоритм.
Смог получить выделенную плоскость детали и создать новый 2D документ.

#Базовый класс документов КОМПАС
iKompasDocument = iApplication.ActiveDocument

Documents = iApplication.Documents
#Базовый класс графических документов КОМПАС
iKompasDocument3D = KAPI7.IKompasDocument3D(iKompasDocument)
iKompasDocument2D = KAPI7.IKompasDocument2D(iKompasDocument)

#Менеджер селектированных объектов
iSelectionManager= iKompasDocument3D.SelectionManager
#Получить плоскость выделенных объектов в виде SAFEARRAY | VT_DISPATCH
SelectedObjects = iSelectionManager.SelectedObjects

#  Создаем новый документ
kompas_document = Documents.AddWithDefaultSettings(const.ksDocumentDrawing, True)


UU

В чем проблема?
Ставится точка и собирается контур.

Spytnik

Цитата: UU от 02.03.25, 19:03:29В чем проблема?
Ставится точка и собирается контур.
Можно немного подробнее. Особенно про точку.

Doom2

А тут есть готовые утилиты, для кого старались ?

Spytnik

Дайте пжлст ссылку, не могу найти.

Lemieux

Цитата: Spytnik от 02.03.25, 16:08:18Доброго дня.
Необходимо получить контур по выделенной поверхности (для дальнейшего сохранения в dxf и резке на лазере).
Помогите реализовать данный алгоритм.
Смог получить выделенную плоскость детали и создать новый 2D документ.

#Базовый класс документов КОМПАС
iKompasDocument = iApplication.ActiveDocument

Documents = iApplication.Documents
#Базовый класс графических документов КОМПАС
iKompasDocument3D = KAPI7.IKompasDocument3D(iKompasDocument)
iKompasDocument2D = KAPI7.IKompasDocument2D(iKompasDocument)

#Менеджер селектированных объектов
iSelectionManager= iKompasDocument3D.SelectionManager
#Получить плоскость выделенных объектов в виде SAFEARRAY | VT_DISPATCH
SelectedObjects = iSelectionManager.SelectedObjects

#  Создаем новый документ
kompas_document = Documents.AddWithDefaultSettings(const.ksDocumentDrawing, True)


Получаете IFace -> LimitedEdges -> Vertex -> Принимаете локальную систему координат -> Переводите координаты вершин в локальные -> По этим данным строите чертёж.

p3452

Цитата: Spytnik от 02.03.25, 16:08:18#Получить плоскость выделенных объектов в виде SAFEARRAY | VT_DISPATCH
SelectedObjects = iSelectionManager.SelectedObjects
?
p/s: Даже скопипастить без ошибок не могут...


Михаил88

Цитата: Spytnik от 02.03.25, 16:08:18Помогите реализовать данный алгоритм.

Можно так сделать. Нужно выделить плоскую грань и запустить.

documents = application.Documents
kompas_document = application.ActiveDocument
if kompas_document is not None:
    document_type = kompas_document.DocumentType
    if document_type == kompas6_constants.ksDocumentPart:
        path_name = kompas_document.PathName
        kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
        part7 = kompas_document_3d.TopPart
        selection_manager = kompas_document_3d.SelectionManager
        selected_object = selection_manager.SelectedObjects
        if isinstance(selected_object, tuple) is False:
            if selected_object.ModelObjectType == kompas6_constants_3d.o3d_face:
                face_definition = kompas_object.TransferInterface(selected_object, kompas6_constants.ksAPI5Auto,
                                                                  kompas6_constants_3d.o3d_face)
                if face_definition.IsPlanar():
                    model_container = kompas_api7_module.IModelContainer(part7)
                    sketchs = model_container.Sketchs
                    sketch = sketchs.Add()
                    part7 = kompas_document_3d.TopPart
                    sketch.Plane = selected_object
                    sketch.Name = "Эскиз:проекция"
                    sketch.Update()

                    kompas_document = sketch.BeginEdit()
                    ks_sketch = kompas_object.TransferInterface(sketch, 1, 0)
                    ks_edge_definition = kompas_object.TransferInterface(selected_object, kompas6_constants.ksAPI5Auto,
                                                                         kompas6_constants_3d.o3d_sketch)
                    ks_sketch.AddProjectionOf(ks_edge_definition)
                    sketch.EndEdit()

                    fragment = documents.Add(kompas6_constants.ksDocumentFragment, False)
                    file_name = f'{path_name[:-4]}.frw'
                    fragment.SaveAs(file_name)
                    fragment.Close(kompas6_constants.kdDoNotSaveChanges)

                    sketch.WriteToFragment(file_name)

                    feature7 = sketch.Owner
                    feature7.Delete()

                    documents.Open(file_name, True, False)
                    application.ExecuteKompasCommand(kompas6_constants.ksCMZoomEntireDocument, False)
+ Благодарностей: 1

p3452

Прекрасно!
А если, проще:
- делаем выделенную плоскость, плоскостью главного вида;
- создаем чертеж с одним главным видом (без оформления, с масштабом вида 1:1);
- сохраняем чертеж как dxf.

Михаил88

#10
Цитата: p3452 от 08.04.25, 20:19:43Прекрасно!
А если, проще:
- делаем выделенную плоскость, плоскостью главного вида;
- создаем чертеж с одним главным видом (без оформления, с масштабом вида 1:1);
- сохраняем чертеж как dxf.

Согласен. Это сразу тоже в голову и пришло. Я так как в 99% работаю с листовыми деталями, так и делаю, вставляю в чертеж вид «Развертка» с параметром «Развертка», далее сохраняю в dxf.
Просто я хотел еще сделать так, чтобы можно было сохранить любую плоскую грань и уже ее контур сохранить во фрагмент.
Типа такого варианта, если, например, выбрать наклонную грань.