Проблемы с заполнением штампа

Автор abvgdeyka, 26.02.26, 17:42:25

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

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

abvgdeyka

Здравствуйте! Написал скрипт для заполнения штампа, но он ведет себя очень странно как и компас не могу понять где ошибся борюсь уже 2 дня, ничего не приходит в голову. Ошибка с ячейкой наименование в моем коде т.к. пробовал записать макрос через стандартную утилиту работало как нужно, а вот с графой Обозначение сложнее, стандартная утилита так же выдает не рабочий код. Проблемы следующие:
1) Ячейка Наименование не заполняется если предварительно в параметрах листа не прописать любое значение, как будто ее нужно инициализировать, раньше такого не замечал.
2) В ячейке Наименование мне необходим трехстрочный текст с разными параметрами шрифта, скрипт отрабатывает, НО на высоте шрифта 3.5 строка сбрасывается в дефолтные значения шрифта ячейки, пробовал различные сочетания и даже абсурдные, но именно 3.5 ломает поведение.
3) В ячейке обозначение не меняются параметры шрифта, кроме самого текста.

# -*- coding: utf-8 -*-
# ver_1.0
import math
import os
import re
import socket
import pythoncom
import LDefin2D
import MiscellaneousHelpers as MH
import sys
import argparse
import re
import subprocess

from win32com.client import Dispatch, gencache
from collections import defaultdict
from collections import Counter





#  Подключим константы 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_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()

##==============================Штамп===========================================

path = r'C:\Program Files\ASCON\KOMPAS-3D v23\Sys\GRAPHIC.LYT'

ILayoutSheets = kompas_document.LayoutSheets
ILayoutSheet = ILayoutSheets.Item(0)

ILayoutSheet.LayoutLibraryFileName = path # полный путь расположения оформления
ILayoutSheet.LayoutStyleNumber = 1 # номер стиля
ILayoutSheet.Update() # для применения изменений

IStamp = ILayoutSheet.Stamp


def Text_in_Stamp_Cell(Cell_Id, Cell_Text, Text_Bold, Text_FontName, Text_Height, Text_Italic, Text_WidthFactor, Text_Line):

    iText = IStamp.Text(Cell_Id)

    if Text_Line == 0:
        iText.Clear()

    iTextLine= iText.Add()
    iTextItem = iTextLine.Add()

    iTextFont = kompas_api7_module.ITextFont(iTextItem)

    iTextFont.Bold          = Text_Bold
    iTextFont.FontName      = Text_FontName
    iTextFont.Height        = Text_Height
    iTextFont.Italic        = Text_Italic
    iTextFont.WidthFactor   = Text_WidthFactor

    iTextItem.Str = Cell_Text

    IStamp.Update()
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Text_in_Stamp_Cell(198, '198', False, 'GOST type B', 3.5, True, 1.25, 0)

Text_in_Stamp_Cell(1, 'Наим1', False, 'GOST type B', 3, True, 1.25, 0)
Text_in_Stamp_Cell(1, 'Наим2', False, 'GOST type B', 7, True, 1, 1)
Text_in_Stamp_Cell(1, 'Наим3', False, 'GOST type B', 9, True, 2, 2)

Text_in_Stamp_Cell(2, 'Обозначение', False, 'GOST type B', 10, True, 2, 0)

p3452

Тема - "избитая"!
Попробуйте в ПОИСКЕ набрать слово "штамп", или что-то подобное, получите КУЧУ аналогичных тем...

abvgdeyka

Цитата: p3452 от 26.02.26, 18:20:35Тема - "избитая"!
Попробуйте в ПОИСКЕ набрать слово "штамп", или что-то подобное, получите КУЧУ аналогичных тем...
Так и есть, однако я не нашел хотя бы приближенных к моим проблемам тем, по этому и решил создать отдельную тему.

Михаил88

Я вчера попробовал и тоже не нашел решения, причем если после заполнения получить высоту текста в строках, то выдает, что текст 3,5, хотя по факту 5.

Если через Delete ручками удалить эти строки, то в конце концов переходит на строку пустую с размером 3,5.

p3452

abvgdeyka,
- сделайте руками то что хотите получить и покажите здесь,
- укажите версию Компаса и стиль оформления основной надписи...

abvgdeyka

Хочу сделать в ячейке наименование 3 строки с разными параметрами текста, так же хочу заполнить ячейку обозначение. Записал скрипт стандартным рекордером, скрипт прикрепляю, он на API5 ячейку наименование заполняет как надо, но обозначение не то что нужно. Я пытаюсь это все сделать на API7 но получаю, что то странное, в ячейке наименование если установить хотя бы одну строку высотой 3.5 то все строки сбрасываются до стандартных настроек шрифта (в моем случае 5 мм), а ячейка обозначение ведет себя совсем странно, параметры шрифта (меняется только текст например было "строка 1" стало "Строка 2" но шрифт не поменялся) не меняются и остаются в моем случае высотой 5мм хотя дефолтный текст там прописан высотой 7, от куда берется 5 я не знаю. Компас 23 стиль основной надписи свой, но я пробовал и на других чертежах с другими стилями на других ПК результат тот же.

abvgdeyka

Цитата: Михаил88 от 27.02.26, 09:38:05Я вчера попробовал и тоже не нашел решения, причем если после заполнения получить высоту текста в строках, то выдает, что текст 3,5, хотя по факту 5.

Если через Delete ручками удалить эти строки, то в конце концов переходит на строку пустую с размером 3,5.
Да у меня такое же поведение, но точно уверен, что ошибка в моем коде т.к. скрипт записанный стандартным рекордером для ячейки наименование работает, но не для обозначения. Еще заметил что Update() для штампа возвращает False хотя значения в ячейках меняются.

lavgirb

У меня в графе "Обозначение" тоже меняется только значение. Стиль текста программно не удается изменить.
Но я и не понимаю, с какой целью менять стиль обозначения. Один раз задал и на всю жизнь.
В "Наименовании" в разных строках разная высота текста. Если не секрет, когда это может быть нужным?

p3452

Неужели так трудно:
Штамп-цитата.png

Что-нибудь типа такого:
Штамп.png

Михаил88

Цитата: abvgdeyka от 27.02.26, 10:23:22в ячейке наименование если установить хотя бы одну строку высотой 3.5 то все строки сбрасываются до стандартных настроек шрифта
У меня немного по-другому. Сбрасывается только та строка, где была указана высота шрифта 3.5.

lavgirb

Цитата: abvgdeyka от 27.02.26, 10:26:59Update() для штампа возвращает False
Подобное бывает и в других местах КОМПАС API.

lavgirb

Цитата: p3452 от 27.02.26, 10:45:21Неужели так трудно:
Если в стилях в графе указан однострочный текст, то многострочный разве можно получить?

abvgdeyka

Цитата: lavgirb от 27.02.26, 10:45:01У меня в графе "Обозначение" тоже меняется только значение. Стиль текста программно не удается изменить.
Но я и не понимаю, с какой целью менять стиль обозначения. Один раз задал и на всю жизнь.
В "Наименовании" в разных строках разная высота текста. Если не секрет, когда это может быть нужным?
В том то и дело, что я для обозначения задал стиль высотой 7, но получаю 5 через заполнение скриптом, хочу понять почему так. Для Наименования например "Плата печатная многослойная Сборочный чертеж", Плата печатная многослойная - две строки, Сборочный чертеж - 3я строка высота шрифта меньше.

p3452

Цитата: lavgirb от 27.02.26, 10:50:06Если в стилях в графе указан однострочный текст, то многострочный разве можно получить?
"Стиль" может быть не только системный, но и пользовательский!

p/s: Возможно ТС и не нужен, ответ...

p3452

Шрифт:
1 стр. - 2.5
2 стр. - 3.5
3 стр. - 2.5
Штамп2.png

abvgdeyka

Цитата: p3452 от 27.02.26, 13:57:47Шрифт:
1 стр. - 2.5
2 стр. - 3.5
3 стр. - 2.5
Штамп2.png

Да, примерно так, делали через API7? Высота шрифта ячейке обозначение меняется?

lavgirb

Цитата: p3452 от 27.02.26, 13:47:52"Стиль" может быть не только системный, но и пользовательский!
Ну наверное.
Если не оговорено, что многострочный, то и возник вопрос.
В строительных штампах в обозначение, кажется, чего только не вписывают. Поэтому может быть и много строчный стиль. Системный.
В ЕСКДшных обозначениях это одна строка. Ее всегда хватает. Если, конечно, не что-нибудь экзотическое.

lavgirb

Цитата: abvgdeyka от 27.02.26, 11:07:19В том то и дело, что я для обозначения задал стиль высотой 7, но получаю 5 через заполнение скриптом, хочу понять почему так. Для Наименования например "Плата печатная многослойная Сборочный чертеж", Плата печатная многослойная - две строки, Сборочный чертеж - 3я строка высота шрифта меньше.

Я добавил в Наименование ячейку для вида документа и заполняю ее программно (программой Браком).

ппм.jpg

Два замечания

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

2 Согласно ГОСТ 2.417 в чертеже на многослойную печатную плату должно быть наименование Плата печатная. (Это просто для информации).
Мы у себя начинаем переходить на название без многослойная.

lavgirb

При увеличении количества строк высота текста автоматом уменьшается.

ппм2.jpg

ппм3.jpg

p3452

Если код правильный (с учетом разного id ячейки и понимания структуры IText), то ВСЕ работает(!), не зависимо от стандарта - СПДС или ЕСКД
Шрифт:
1 стр. - 7
2 стр. - 5
3 стр. - 3.5
Штамп3.png