Заполнение штампа доп. листов

Автор Tallin, 06.04.21, 17:27:29

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

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

Tallin

Здравствуйте!
Пишу программу которая проставляет инвентарные номера в штампе чертежа и спецификации.
Программа работает по всему документу кроме листа регистрации спецификации (в чертеже работает на всех листах).
В Kompas v19 оформление документа спецификации разделено на "Основные листы" и "Доп.листы в конце документа", возможно дело в этом?
Может кто подскажет как подобраться к этим доп. листам? Или есть какая другая причина игнорирования листа регистрации?




GenTAPo

Добраться к ним можно вот так. А вообще то, моё многолетнее и многоверсионное правило. Прежде, чем на ура кидаться работать в новой версии, сначала настроить Параметры под себя.

Вират Лакх

iKompasDocument = iApplication.ActiveDocument
iLayoutSheets = iKompasDocument.LayoutSheets
iLayoutSheets.Count выдает кол-во всех листов документа, включая дополнительные листы в на­чале документа и в кон­це документа.
iLayoutSheets.Item(Index) должен выдавать все листы.
ILayoutSheet имеет свойство SheetType - Тип листа: ksSheetTypeEnum
Если вы перебрали все листы, значит проблема в чем-то другом.

Tallin

Вобщем пробовал по разному и могу сказать что:
1.количество листов определяется правильно
2.тип каждого листа определяется правильно (все листы кроме последнего определяются как "Лист документа", последний лист (лист регистрации) определяется как "Дополнительный лист в кон­це документа")
3.информация в ячейки листа регистрации вносится (её можно потом оттуда считать), но не отображается.

Один раз получилось что информация попала в ячейку листа регистрации и отобразилась (я даже успел порадоваться), но больше я такого не видел.
Наверное надо как то обновить полученный результат, iLayoutSheet.Update() не решает проблему (может не так использую).

Может кто нибудь попробует запустить макрос на V19? (нужно создать спецификацию на 2-х листах + 3-й лист регистрации и запустить макрос)
# -*- coding: utf-8 -*-
#|тест2

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_spc = kompas_api7_module.ISpecificationDocument(kompas_document)
iDocumentSpc = kompas_object.SpcActiveDocument()

numberSheet = iDocumentSpc.ksGetSpcDocumentPagesCount()
print("Число листов =",  numberSheet)

#читаем из штампа открытого файла обозначение
iLayoutSheets = kompas_document.LayoutSheets
iLayoutSheet = iLayoutSheets.ItemByNumber (3)
iLayoutSheet.Update()
stamp = iLayoutSheet.Stamp
txt=stamp.Text(19)
print("Значение ячейки 19 =", txt.Str)
print("Тип листа =", iLayoutSheet.SheetType)
print("Необходимость обновления штампа =",stamp.Crossed)

iStamp = iDocumentSpc.GetStampEx(3)

iStamp.ksOpenStamp()
#iStamp.ksClearStamp(0)

#iStamp.ksClearStamp(0)
iStamp.ksColumnNumber(19)

iTextLineParam = kompas6_api5_module.ksTextLineParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 32772
iTextItemArray = kompas_object.GetDynamicArray(LDefin2D.TEXT_ITEM_ARR)
iTextItemParam = kompas6_api5_module.ksTextItemParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "отобразись"
iTextItemParam.type = 0
iTextItemFont = kompas6_api5_module.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFont.Init()
iTextItemFont.bitVector = 4096
iTextItemFont.color = 0
iTextItemFont.fontName = "GOST type A"
iTextItemFont.height = 3.5
iTextItemFont.ksu = 1
iTextItemArray.ksAddArrayItem(-1, iTextItemParam)
iTextLineParam.SetTextItemArr(iTextItemArray)

iStamp.ksTextLine(iTextLineParam)
#iStamp.ksSetStampColumnText(19, iTextItemArray)

iStamp.ksCloseStamp()

iLayoutSheet.Update()
#iStamp.ksClearStamp(0)