Макрос для оформления чертежей

Автор Merlin, 13.11.19, 17:01:26

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

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

Merlin

Добрый день! Имеется следующая ситуация. Есть старые чертежи которые нужно оформить под нынешние требования нашей организации.
А именно подправить шрифты: размеров, разрезов, выносных элементов, основной надписи и тд.
Средствами записи Компас этого добиться не получается, макрос не записывается. (Или всё таки записывается?)

Как я понимаю, нужно в ручную с помощью справочной системы SDK.
Вопрос: С чего нужно начать? на что ссылаться? можно с небольшим примером, а дальше я сам

p3452

Макросом не обойдетесь...
Нужно написать программку на любом языке программирования (обычное Windows приложение), которая будет давать Вам возможность:
- выбрать файлы, папки с файлами для обработки,
- задать параметры для обработки и их новые значения,
- автоматически запустить Компас в открытом или фоновом режиме,
- автоматически обработать заданные файлы: открыть, отредактировать, закрывать,
- автоматически вести протокол обработки и отображать его на экране,
- открыть любой из этих файлов в Компас.

Много примеров в SDK - если запустить SDK.chm и набрать в Поиске "Демонстрационные примеры".., но все они не про Python.

Merlin

Цитата: p3452 от 13.11.19, 18:19:08Макросом не обойдетесь...
Нужно написать программку на любом языке программирования (обычное Windows приложение), которая будет давать Вам возможность:
- выбрать файлы, папки с файлами для обработки,
- задать параметры для обработки и их новые значения,
- автоматически запустить Компас в открытом или фоновом режиме,
- автоматически обработать заданные файлы: открыть, отредактировать, закрывать,
- автоматически вести протокол обработки и отображать его на экране,
- открыть любой из этих файлов в Компас.

Много примеров в SDK - если запустить SDK.chm и набрать в Поиске "Демонстрационные примеры".., но все они не про Python.
Ого как много всего.
А мне то нужно вручную Открыть готовый чертеж, запустить макрос чтобы он поправил шрифты и всё))

Вират Лакх

14.11.19, 04:13:35 #3 Последнее редактирование: 14.11.19, 05:33:14 от Вират Лакх Причина: Добавлен пример кода
Используя python, можно сделать оба варианта. Вопрос в том, что будет быстрее для вас: прописать выбор файлов, открытие, закрытие или вручную это сделать.
Можете попробовать записать макрос с помощью программы от Slaviation называется как-то PyKompasMacro или типа того.
Начать можно с подключения к компасу и получения активного документа. Какой API будете преимущественно использовать. Я предпочитаю седьмой вместо пятого. Пятый использую тогда, когда нет возможности сделать что-то на апи7.
Ссылаться вроде ни на что не надо, разве что, скорее всего, понадобятся файлы API .py, которые должны были быть установлены с библиотекой компас-макро или которые можно сгенерировать самому.
Подозреваю, что может быть достаточно добраться до настроек документа и там изменить, а не перебирать все объекты.

Upd. Вот пример, который будет работать на обоих версиях питона:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

title = 'Программа'

import sys
if sys.version_info[0] < 3:
   import Tkinter as tk, tkMessageBox
   def encodestr(txt): return txt.encode('cp1251') # Скорее всего Вам не понадобится эта строка, можно удалить
   def decodestr(txt): return txt.decode('cp1251')
else:
   import tkinter as tk, tkinter.messagebox as tkMessageBox
   def encodestr(txt): return txt  # Скорее всего Вам не понадобится эта строка, можно удалить
   def decodestr(txt): return txt

try:
   from win32com.client import Dispatch, gencache # Для этого должен быть установлен pywin32
   try:
      KompasAPI5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0) # та самая генерация файлов API .py на случай, если у вас их нет или какая другая ошибка
      KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
      KompasConst = gencache.EnsureModule('{75C9F5D0-B5B8-4526-8681-9903C567D2ED}', 0, 1, 0).constants # Я константами не пользуюсь, обычно удаляю это
      KompasConst3D = gencache.EnsureModule('{2CAF168C-7961-4B90-9DA2-701419BEEFE3}', 0, 1, 0).constants # Я константами не пользуюсь, обычно удаляю это
   except:               # Сюда можно записать свои модули: import ... as KompasAPI5, ... as KompasAPI7
      import KompasAPI5, KompasAPI7, KompasConst, KompasConst3D # И отсюда импорт констант можно удалить
except:
   from traceback import format_exc
   tk.Tk().withdraw()
   tkMessageBox.showerror(title, decodestr(format_exc())) # Выдача сообщения об ошибке импорта необходимых модулей
   sys.exit()

KompasObject = Dispatch('Kompas.Application.5', None, KompasAPI5.KompasObject.CLSID) # Если вам API5 не нужен будет, то можно удалить.
iApplication = Dispatch('Kompas.Application.7')   # Или KompasObject.ksGetApplication7(), оба варианта работают. Если вам API7 не нужен будет, то можно удалить.
if not iApplication.Visible: iApplication.Visible = True   # Здесь можно iApplication заменить на KompasObject в зависимости от того, какой интерфейс получаете.

iDocument = iApplication.ActiveDocument # Получение активного документа
iDocumentSettings = iDocument.DocumentSettings # Настройки документа, только тут ничего интересного нет
iDrawingDocumentSettings = KompasAPI7.IDrawingDocumentSettings(iDocumentSettings)  # Пример вызова метода IUnknown::QueryInterface
print(iDrawingDocumentSettings.SheetAutoCount) # Оказывается, через API совсем мало настроек можно получить. Или надо искать в другом месте

ksDocument2D = KompasObject.ActiveDocument2D() # Получение 2D-документа через API5
# дальше есть ksGetDocOptions и т.д.