Компас-3D python API

Веду работу в Компасе 3D v 23. Появилась необходимость автоматизации заполнения данных, чтобы просто ускорить процесс.

Посмотрел видеоролик на youtube

Но, к сожалению, он не дает всей информации, которая нужна. После этого пошел в документацию: help.ascon.ru

Но там я не смог найти нужных инструкций, тем более описания для Python там вообще нет.

В компасе у модели есть свойства, которыми мне нужно манипулировать.

Есть некая деталь, по названию файла должны распределяться параметры в свойства.

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

Код ниже может заполнить только поля "Наименование" и "Базовая часть"

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)


file_name = kompas_document_3d.Name[:-4].split(" ")
iPart.marking = file_name[0]

iPart.name = " ".join(file_name[1:])

iPart.Update()

Как мне сделать, чтобы заполнилось поле "номер исполнения"? И как мне манипулировать другими свойствами, на скриншоте снизу?

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Даниил Смирнов

Тоже бьюсь над задачей автоматизации заполнения. Да, в документации ничего полезного нету, даже иерархии как вызывать различные методы, но! Я нашел как получать данные на чертеже (название, кто делал, утвердитель, масса и т.д) Не думаю что тебе может это чем-то помочь, но всё таки:

def get_stamp_correctly(filename):
"""Правильное получение штампа через иерархию объектов"""
kompas = Dispatch("Kompas.Application.7")
kompas.Visible = True

try:
    # Открываем документ
    document = kompas.Documents.Open(r"D:\Progects\compas_addon\\" + filename)

    # Проверяем, что это чертеж
    if document.DocumentType != kompas6_constants.ksDocumentDrawing:
        print("Файл не является чертежом!")
        document.Close()
        return None

    print("Документ открыт успешно")

    # 1. Получаем коллекцию листов
    layout_sheets = document.LayoutSheets
    print(f"Количество листов: {layout_sheets.Count}")

    if layout_sheets.Count > 0:
        sheet = layout_sheets.Item(0)

        # 3. Получаем штамп листа
        stamp = sheet.Stamp

        #print("Доступные методы штампа:")
        #for method in dir(stamp):
        #    if not method.startswith('_') and not method.startswith('Get'):
        #        print(f"  {method}")

        current_text = stamp.Text(5) # 5 это масса, методом тыка нашел
        print(current_text.Str)


    else:
        print("В документе нет листов!")
        return None

except Exception as e:
    print(f"Ошибка при получении штампа: {e}")
    return None
finally:
    if 'document' in locals():
        print("123")
        #document.Close()

Самое главное это понять иерархию, и что от кого можно вызывать. Я кое-как на пару с нейронкой наковырял просмотр массы изделия, буду продолжать исследования, позже найду как изменять поля.

→ Ссылка