Изменение значения размера

Автор Gish, 18.02.21, 11:43:50

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

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

Gish

Добрый день! Столкнулся  с проблемой. Никак не получается изменить значение размера.
Есть два размера ни один не меняется. Что не так делаю не могу понять. SDK говорит, что при установке свойства  NominalValue формируется текстовое значение. но в логах белиберда в место значения.
Вот фотка:

Преимущественно нужно менять именно буквенные размеры.
Вот код :
# -*- coding: utf-8 -*-
#|меняем размеры

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_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()

#  подключаем ISymbols2DContainer
IKompasDocument2D = kompas_document._oleobj_.QueryInterface(kompas_api7_module.NamesToIIDMap['IKompasDocument2D'],pythoncom.IID_IDispatch)
doc2D = kompas_api7_module.IKompasDocument2D(IKompasDocument2D)
views = doc2D.ViewsAndLayersManager.Views
#  подключаем собираем контейнер из размеров
ISymbols2DContainer = views.View(0)._oleobj_.QueryInterface(kompas_api7_module.NamesToIIDMap['ISymbols2DContainer'],pythoncom.IID_IDispatch)
dimensions = kompas_api7_module.ISymbols2DContainer(ISymbols2DContainer)
#  считываем размер с индексом 0
count_dim = dimensions.LineDimensions.LineDimension(0)
IDimensionText = count_dim._oleobj_.QueryInterface(kompas_api7_module.NamesToIIDMap['IDimensionText'],pythoncom.IID_IDispatch)
param_dimensions = kompas_api7_module.IDimensionText (IDimensionText)
con_param = param_dimensions.NominalValue
print ("размер с индексом 0 NominalValue = ", con_param)
#  Пробуем поменять значение размера 0
con_param = "G1"
print ("значение после изменения = ", param_dimensions.NominalText)
#  считываем размер с индексом 1
count_dim = dimensions.LineDimensions.LineDimension(1)
IDimensionText = count_dim._oleobj_.QueryInterface(kompas_api7_module.NamesToIIDMap['IDimensionText'],pythoncom.IID_IDispatch)
param_dimensions = kompas_api7_module.IDimensionText (IDimensionText)
con_param = param_dimensions.NominalValue
con_param1 = param_dimensions.NominalText
print ("размер с индексом 1 NominalValue = ", con_param)
print ("размер с индексом 1 NominalTexte = ", con_param1)
#  Пробуем поменять значение размера 1
con_param = "asdasd"
con_param1 ="asdasd"
print ("значение после изменения = ", con_param1)
меняем размеры.cdm


P.C. В программировании не силен, с SDK 2 дня борюсь.

con_param1 ="asdasd"
param_dimensions.AutoNominalValue = False
param_dimensions.NominalText = con_param1
count_dim.Update

Gish

Цитата: undefinedcon_param1 ="asdasd"
param_dimensions.AutoNominalValue = False
param_dimensions.NominalText = con_param1
count_dim.Update

Попробовал. Выдает ошибку:

Slaviation

Добрый день.
Вы можете записать макрос изменения значения размера с помощью PyKompasMacro.  Для этого установите в файле настроек PyKompasMacro\conf\PyKompasMacro.ini значение параметра EditMode=1, после этого запустите PyKompasMacro и редактируйте какой-нибудь размер. Получите соответствующий код (во вложении) для разбора.
Для того чтобы запустить этот код, предварительно селектируйте нужный размер.

Gish

Поставил PyKompasMacro, письмо отправил, жду ключ.
Сама задача на самом деле сложнее. Представим, что есть много чертежей и в них есть размер переменный (так делают в групповых чертежах). Надо во всех 140 чертежах поменять наименование перемеренной на другую (был размер D, а нужно поменять  на D1). Идея, то простая пробегаться по всем видам и в видах по всем размерам, пока не найдем, это размер D и меняем его на D1. Проблема возникает уже при считывании переменного размера.
В консоль логе в место нашей D, видим  белиберду: в коде эта строчка:
print ("размер с индексом 1 NominalTexte = ", con_param1)
показывает в консоль логе следующее: размер с индексом 1 NominalText =  <win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.ITextLine instance at 0x116982000>).
Явно не похоже на название нашей переменной. Если я правильно понял, про предварительное селектирование размера, то именно способом описанным выше и хотел находить нужный нам размер.

Slaviation

ЦитироватьНадо во всех 140 чертежах поменять наименование перемеренной на другую (был размер D, а нужно поменять  на D1)
Есть KompasTextReplacer (выложен там же, где и PyKompasMacro). Он для такой задачи должен подойти.
Создадите словарь, оставите в нем только одну строку
D;D1
Утилита во всех документах выбранного каталога заменит D на D1.

Slaviation

con_param1 ="asdasd"
Так не пойдет.
Скорее
con_param1.TextItem(0).Str = "asdasd"