Автоматическое заполнение штампа

Автор KrasovskyO, 16.07.14, 11:39:15

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

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

KrasovskyO

Доброго времени суток! Хочу автоматизировать процесс заполнения штампа чертежей. А именно графы Фамилия и Дата. Решил попробовать библиотеку компас макро на языке Python. Что бы не вводить когд вручную есть функция записи макросов. Я воспользовался ей и заполнил основную надпись Фамилии и Дата. Затем при выполнении этой команда дата отображается только та которая была при создании макроса. Зашёл в код макроса там даты прописаны обычным текстом. Нашёл команду для вывода дадты в языке Python: print datetime.date.today(), но к сожалению слепить это всё воедино не получается. Пробовал задавать её например вначале всего когда всего макроса D=print datetime.date.today() потом в строку нужной ячейки штампа вписывать iTextItemParam.s = datetime.datetime.now() но тщетно. Подскажите пожалуйста как нужно поступить?
Возможно пример трудноват для новичка,но с чего то надо ничинать а с чего к сожалению не знаю :|


kamchadal

В Компасе это делается элементарно. В Сервисе есть Библиотека стилей, типов оформлений и основных надписей. А в справочнике пользователя всё расписано как делать.

chum

# -*- coding: cp1251 -*-
#|setTodayDate

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument2D = iKompasObject.ActiveDocument2D()
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)


iStamp = iDocument2D.GetStamp()
iStamp.ksOpenStamp()
iStamp.ksColumnNumber(130)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))
iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksCloseStamp()


В активном документе сегодняшняя дата попадет в графу №130 штампа, которая находится в колонке "Дата" на строке "Разраб."

Vin

В папке установки Компас 3D есть файл graphic.pmn.
Отрываем. Редактируем меню 12 вписывая нужные фамилии.
MENU 12
BEGIN
MENUITEM "Меню, настраиваемое пользователем (Graphic.pmn MENU 12)" GRAYED
MENUITEM SEPARATOR
POPUP "Разработчики"
BEGIN
  MENUITEM "&Поликарпов П.П.|Поликарпов"
  MENUITEM SEPARATOR
  MENUITEM "&Иванов И.И.|Иванов"
  MENUITEM "П&етров П.П.|Петров"
  MENUITEM "&Сидоров С.С.|Сидоров"
END
POPUP "Технологи"
BEGIN
  MENUITEM "&Семенов Ю.Ю.|Семенов"
  MENUITEM SEPARATOR
  MENUITEM "&Дубинина А.Б.|Дубинина"
  MENUITEM "&Петрова М.Я.|Петрова"
  MENUITEM "П&оловинин И.И.|Половинин"
END
POPUP "Нормоконтроль"
BEGIN
  MENUITEM "&Буянов М.Ю.|Буянов"
  MENUITEM SEPARATOR
  MENUITEM "&Козлов В.Б.|Козлов"
  MENUITEM "&Самохвалов А.А.|Самохвалов"
END
END

KrasovskyO

Спасибо всем за помощь. Кстати решил проблему почти сразу и почти как написал пользователь chum. Только в самом начале импортировал модуль import datetime. Теперь ещё один вопрос. С оформлением чертежа всё в порядке фамилии дата всё теперь вводиться как надо. Но в файле спецификации при всех одинаковых параметрах форматирования текста все фамилии и дата почему то выравниваются по середине строк. В чём может быть причина? Вот текст моего макроса:
# -*- coding: cp1251 -*-
#|Спецификация ГПИ СБ

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH
import datetime

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocumentSpc = iKompasObject.SpcActiveDocument()

iStamp = iDocumentSpc.GetStamp()
iStamp.ksOpenStamp()
iStamp.ksColumnNumber(110)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "Красовский"
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(111)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "Елизаров"
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(113)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "Мишак"
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(114)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "Прохоркин"
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(115)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "Пушкарёв"
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(130)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(131)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(133)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(134)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksColumnNumber(135)
iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32768

iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))

iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = datetime.date.today()
iTextItemParam.type = 0

iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFontParam.Init()
iTextItemFontParam.bitVector = 4096
iTextItemFontParam.color = 0
iTextItemFontParam.fontName = "GOST type A"
iTextItemFontParam.height = 3.5
iTextItemFontParam.ksu = 1.0

iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

iTextLineParam.SetTextItemArr(iTextItemArray)
iStamp.ksTextLine(iTextLineParam)

iStamp.ksCloseStamp()

KrasovskyO

Для исключения лишних вопросов немного поясню. Поставленню задачу я решаю через макросы на языке Python, потому что в зависимости от вида изделия проверяющие меняются. И так получается очень удобно, нажатием всего двух кнопок автоматически заполняются все графы (фамилии и дата другие не интересуют).

Poltava

Недостаток вашего макроса в том что текст макроса нужно менять под каждого человека и каждый проект, а далеко не каждый разбирается в макросах! Когда то давно писал вот такой макрос делает по сути тоже но данные берутся из текстового файла.

# -*- coding: cp1251 -*-
#|Заполняет поля с фамилиями, названием предприятия, первичная применяемость беря их из файла name_stamped.ini который автоматически создаеться в папке со скриптом

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH
import sys
import os

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument2D = iKompasObject.ActiveDocument2D()
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iDocumentSpc = iKompasObject.SpcActiveDocument()

# -*- coding: utf-8 -*-

def fileexists () :
    """Функция проверяет существует ли файл с настройками в папке соскриптом и при отсутствии такового создает его и вносит в него данные по умолчанию"""
    global fname
    i = 0
    if os.path.exists(fname): #Проверяем существует ли путь
        if os.path.isfile(fname): #Проверяем являеться ли путь файлом
            i = 1
    if i == 0 : #Ниже создаем файл с настройками при условии его отсутствия
        f = open(fname, 'w')#создаем файл и открываем его для заиси
        f.write('Если вместо надписи после | в строку поместить знак - то будет сохранен исходный текст\nРазраб.|ФИО\nПров.|ФИО\nРук.раб.|ФИО\nН.контр.|ФИО\nУтвердил.|ФИО\nпервичная применяемость|\nПредприятие строка1.|ЧАО\nПредприятие строка2.|Рога & Копыта\nПредприятие строка3.|г. Харьков\n')#Текст по умолчанию
        f.close()#Закрываем файл

def addText(columnNumber,text,height=3.5,aling=0,ksu=1.0,style=32768,color=0,fontname="GOST type A"):
    """"Функция заполнения текстом ячейки
    входные параметры
    Обязательные:
    columnNumber - номер ячейки для заполнения
    text - вносимый текст
    то что можно не указывать так как есть значение по умолчанию,
    а для ввода своего значения если оно идет не подряд нжно указать
    и имя передаваемой переменной тогда их порядок не имеет значения
    height - высота текста
    aling - выравнивание текста
    ksu - сужение текста
    style - номер стиля текста
    color - цвет текста
    fontname - название шрифта"""

    if columnNumber != -1 :#Исключение для многострочого текста
        iStamp.ksColumnNumber(columnNumber) #Номер ячейки для заполнения
    iTextLineParam = KAPI.ksTextLineParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
    iTextLineParam.Init()
    iTextLineParam.style = style

    iTextItemArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(4))
   
    iTextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
    iTextItemParam.Init()
    iTextItemParam.s = text #Текст вносимый в ячейку
    iTextItemParam.type = 0

    iTextItemFontParam = KAPI.ksTextItemFont(iTextItemParam.GetItemFont())
    iTextItemFontParam.Init()
    iTextItemFontParam.bitVector = 4096
    iTextItemFontParam.color = color
    iTextItemFontParam.fontName = fontname
    iTextItemFontParam.height = height
    iTextItemFontParam.ksu = ksu

    iTextItemArray.ksAddArrayItem(-1, iTextItemParam)

    iTextLineParam.SetTextItemArr(iTextItemArray)
    iStamp.ksTextLine(iTextLineParam)
    iStamp.ksSetTextLineAlign(aling)#Выравнивание текста в ячейке

       
def doc (td) :
    global listnames
    """Функция проверяет необходимость заполнения ячейки по признаку '-' в текстовом ффайле
    и при необходимости вызывает функцию заполнения ячейки"""

    if str (listnames[1][listnames[1].find('|')+1:]) != '-' :
        addText(110,str (listnames[1][listnames[1].find('|')+1:]))

    if str (listnames[2][listnames[2].find('|')+1:]) != '-' :
        addText(111,str (listnames[2][listnames[2].find('|')+1:]))
       
    if str (listnames[3][listnames[3].find('|')+1:]) != '-' :
        if td == 0:
            addText(112,str (listnames[3][listnames[3].find('|')+1:]))
        else :
            addText(113,str (listnames[3][listnames[3].find('|')+1:]))
       
    if str (listnames[4][listnames[4].find('|')+1:]) != '-' :
        addText(114,str (listnames[4][listnames[4].find('|')+1:]))
       
    if str (listnames[5][listnames[5].find('|')+1:]) != '-' :       
        addText(115,str (listnames[5][listnames[5].find('|')+1:]))

    if str (listnames[6][listnames[6].find('|')+1:]) != '-' :       
        addText(25,str (listnames[6][listnames[6].find('|')+1:]))

    visp = 0
    if str (listnames[7][listnames[7].find('|')+1:]) != '-' :
        visp = 1
        if str (listnames[8][listnames[8].find('|')+1:]) != '-' :
            visp = 2
            if str (listnames[9][listnames[9].find('|')+1:]) != '-' :
                visp = 3

    for i in range(2):
        #Заполнение однострочного текста
        if visp == 1 :
            addText(9,str (listnames[7][listnames[7].find('|')+1:]),7.0,1)
        #Заполнение двустрочного текста
        if visp == 2 :
            #Заполнение первой строки текста
            addText(9,str (listnames[7][listnames[7].find('|')+1:]),5.0,1)
            #Заполнение второй строки текста
            addText(-1,str (listnames[8][listnames[8].find('|')+1:]),5.0,1)
        #Заполнение трехстрочного текста
        if visp == 3 :
            #Заполнение 1 строки текста
            addText(9,str (listnames[7][listnames[7].find('|')+1:]),3.5,1)
            #Заполнение второй строки текста
            addText(-1,str (listnames[8][listnames[8].find('|')+1:]),3.5,1)
            #Заполнение третей строки текста
            addText(-1,str (listnames[9][listnames[9].find('|')+1:]),3.5,1)


ROOT_PATH=os.path.dirname(sys.argv[0])#определение пути с которого запущен файл на выполнение
fname = ROOT_PATH + '\\name_stamped.ini'#Создание пути к файлу настроек
fileexists ()
f = open(fname, 'r')
listnames = f.read()
f.close()
listnames = listnames.split ('\n')
Tip_documenta = iKompasObject.ksGetDocumentType(0)
global iStamp

if Tip_documenta == 1 or Tip_documenta == 2 :
    iStamp = iDocument2D.GetStamp()
    iStamp.ksOpenStamp()
    doc(0)
    iStamp.ksCloseStamp
    iKompasObject.ksMessage("Данные успешно внесены")
if Tip_documenta == 4 or Tip_documenta == 9 :
    iStamp = iDocumentSpc.GetStamp()
    iStamp.ksOpenStamp()
    doc(1)
    iStamp.ksCloseStamp
    iKompasObject.ksMessage("Данные успешно внесены")
if Tip_documenta != 1 and Tip_documenta != 2 and Tip_documenta != 4 and Tip_documenta != 9: iKompasObject.ksMessage("Данные не внесены так как не опознан тип документа")


Код не претендует на изящное решение так как в программировании профан но свою задачу выполняет
+ Благодарностей: 2

KrasovskyO

Александр Михайлович, спасибо Вам! Я был близок и помогла вот эта строка выполняющая выравнивание.

iTextLineParam.SetTextItemArr(iTextItemArray)
    iStamp.ksTextLine(iTextLineParam)
    iStamp.ksSetTextLineAlign(aling) #Выравнивание текста в ячейке


Только я нашёл в справке что надо ставить цифру в зависимости от выравнивания в моём случае по левому краю - 0 iStamp.ksSetTextLineAlign(0)
Универсальность макроса пока не требуется я только только начинаю осваивать Python в связке с КОМПАС SDK. Может быть Вы мне подскажите как освоить это дело? Сейчас я пробовал методом тыка. С датой получилось с выравниванием вот нет. В руководстве к Компас SDK описания к функциям минимум а то и вовсе нет, или я чего не понимаю. Где можно почерпнуть азы термины и прочее?

Kilia

Всем привет! Понимаю тема уже старая, но может кто уже решал такой вопрос.
Как программно включить/выключить чекбокс синхронизации обозначения и наименования с источником?

dimak222

Цитата: Kilia от 24.01.25, 23:04:07Всем привет! Понимаю тема уже старая, но может кто уже решал такой вопрос.
Как программно включить/выключить чекбокс синхронизации обозначения и наименования с источником?
Если ещё актуально:
#------------------------------Импорт модулей-----------------------------------

from win32com.client import Dispatch, gencache # библиотека API Windows

from pythoncom import VT_EMPTY # для записи пустого св-ва
from win32com.client import VARIANT # для записи пустого св-ва

#-------------------------------------------------------------------------------

def collect_sources(iPart7): # рекурсивный сбор дет. и СБ

    iPartsEx = iPart7.PartsEx(0) # список компонентов, включённыхв расчёт (0 - все компоненты (включая копии из операций копирования); 1 - первые экземпляры вставок компонентов (ksPart7CollectionTypeEnum))

    if iPartsEx: # если есть компоненты в сборке

        for iPart7 in iPartsEx: # проверяем каждый элемент из вставленных в СБ

            if iPart7.Standard == False: # если это не стандартная дет.
                BySource(iPart7) # простановка св-в по источнику

            if iPart7.Detail == False: # если это СБ
                collect_sources(iPart7) # рекурсивный сбор дет. и СБ (интерфейс компонента 3D документа)

def BySource(iPart7): # простановка св-в по источнику

    iPropertyKeeper = KompasAPI7.IPropertyKeeper(iPart7) # интерфейс получения/редактирования значения свойств

    iKompasDocument = iApplication.ActiveDocument # получить текущий активный документ

    for iPropertyName in ["Обозначение", "Наименование"]: # проверка св-в по источнику

        iProperty = iPropertyMng.GetProperty(iKompasDocument, iPropertyName) # интерфейс свойства

        iPropertyValue = iPropertyKeeper.GetPropertyValue(iProperty, False, True) # получить значение св-ва (интерфейс св-ва, значение св-ва, единици измерения (СИ))

        if not iPropertyValue[2]: # если не по источнику

            print(f"Меняем {iPropertyName} \"По источнику\":", iPropertyValue[1])

            iSetPropertyValue = iPropertyKeeper.SetPropertyValue(iProperty, VARIANT(VT_EMPTY, None), True) # установить значение св-ва (интерфейс св-ва, значение св-ва, единици измерения (СИ))
            iProperty.Update() # применим сво-ва

        else:
            print(f"Св-во {iPropertyName} уже \"По источнику\":", iPropertyValue[1])

#-------------------------------------------------------------------------------

KompasAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0) # API7 КОМПАСа
iApplication = Dispatch("Kompas.Application.7") # интерфейс приложения КОМПАС-3D.

iKompasDocument = iApplication.ActiveDocument # получить текущий активный документ

if iKompasDocument: # если есть активный документ

    iKompasDocument3D = KompasAPI7.IKompasDocument3D(iKompasDocument) # базовый класс документов-моделей КОМПАС
    iPart7 = iKompasDocument3D.TopPart # интерфейс компонента 3D документа (сам документ)

    iPropertyMng = KompasAPI7.IPropertyMng(iApplication) # интерфейс менеджера свойств

    if iPart7.Detail == False: # если это СБ

        collect_sources(iPart7) # рекурсивный сбор дет. и СБ (интерфейс компонента 3D документа)

        iKompasDocument3D.RebuildDocument() # перестроить СБ

else:
    print("Откройте СБ!")

P.S. Не увидел сразу что тема про штамп в чертежах, но там должно быть тоже самое, через "VT_EMPTY".