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

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

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

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

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

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

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

Ошибка в коде

Автор DUXOTA, 06.04.24, 22:30:18

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

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

DUXOTA

Недавно искал на форуме решение по выбору поверхности, нашёл
а как эту поверхность вырезать не понимаю, подсобите :(
def select_faces_by_point(x, y, z, application):
    try:
        # Получаем 3D-документ из активного документа
        kompas_document = application.ActiveDocument
        doc3D = kompas_api7_module.IKompasDocument3D(kompas_document)

        # Получаем часть
        part7 = doc3D.TopPart

        # Выбираем грани, проходящие через заданную точку
        IModelObject = kompas_api7_module.IModelObject(part7)
        a = IModelObject.Owner.ModelObjects(0)
        selected_entities = part7.SelectByPoint(a, x, y, z)

        # Проверяем, есть ли выбранные сущности
        if selected_entities:
            print("Количество выбранных граней:", len(selected_entities))
            # Пытаемся выбрать первую грань из выбранных сущностей
            selected_face = selected_entities[0]
            print("Первая выбранная грань:", selected_face)
            selection_manager = doc3D.SelectionManager
            selection_manager.Select(selected_face)

            # Возвращаем выбранную грань
            return selected_face
        else:
            print("Ничего не выбрано")
            return None
    except Exception as e:
        print("Произошла ошибка:", e)
        return None

def create_cut_extrusion(selected_face, application):
    try:
        # Получаем 3D-документ из активного документа
        kompas_document = application.ActiveDocument
        doc3D = kompas_api7_module.IKompasDocument3D(kompas_document)

        # Получаем часть
        part7 = doc3D.TopPart

        # Создаем элемент выдавливания на основе выбранной грани
        obj = part7.NewEntity(kompas_api7_module.ksEntityCutExtrusion)
        definition = obj.GetDefinition()
        definition.cut = True
        definition.SetSideParam(True, kompas_api7_module.ksEnd_TypeBlind, 10)  # параметры выдавливания
        definition.SetSketch(selected_face.Owner)  # устанавливаем скетч для выдавливания

        # Создаем элемент выдавливания
        obj.Create()

    except Exception as e:
        print("Произошла ошибка при создании элемента выдавливания:", e)

# Задаем координаты точки для выделения граней
x_coord = 315
y_coord = 100
z_coord = 10

# Вызываем функцию для выделения граней по заданным координатам
selected_face = select_faces_by_point(x_coord, y_coord, z_coord, application)

# Создаем элемент выдавливания на основе выбранной грани
if selected_face:
    create_cut_extrusion(selected_face, application)
Выдаёт ошибку
Произошла ошибка при создании элемента выдавливания: '<win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.IKompasDocument instance at 0x57341008>' object has no attribute 'ActiveDocument3D'
>>>
Вообще надо удалить данную поверхность(показано на картинке)
Удалить эскизом нельзя
можно только так, руками всё прекрасно работает, но в коде не работает так

DUXOTA

Начало кода для подключения к библиотекам
# -*- coding: utf-8 -*-
#|11234

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()

iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)