Не получается программно вставить ссылку в свойство на значение переменной

Автор ТрындецЪ, 18.10.18, 10:22:42

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

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

ТрындецЪ

Не получается добавить ссылку на значение переменной в свойство модели. Свойство добавляется из библиотеки, с ним проблем нет.
Вставить ссылку на значение другого свойства получается:
IPropertyKeeper.InsertHypertextReference ( IProperty, IPart7, 0x80, False, 0, 1, 8.0 )
а на значение переменной нет.
IFeature7 =  KAPI7.IFeature7(IPart7)
IVariable7 = IFeature7.Variable( False, True, 'Var') # интерфейс переменной по имени
IPropertyKeeper.InsertHypertextReference ( IProperty, IVariable7, 0, False, 0, 1, 0.0 )

Вират Лакх

Последний параметр - это PropertyId - идентификатор свойства, на которое ссылаемся.
Видимо, у IVariable7 для этого должно быть свойство Property, у которого можно было бы получить Id - Уникальный номер свойства.
Но проблема в том, что IVariable7.Property выдает None.
Есть метод AddProperty - Создать свойство переменная. Но вместо указателя на интер­фейс свойства IProperty выдается None.
Тупик. Помогите кто-нибудь )

Наверно, нужно сначала создать переменную IKompasDocument2D1.AddVariable, но не проверял.

Вират Лакх

Речь идет об уже созданной переменной для 3D-модели: iVariable7 = iPart7.AddVariable...

Вират Лакх

Ещё вот получилось сделать ссылку в свойство Наименование на обозначения позиции IPositionLeader, базы IBase3D и шероховатости IRough3D:

print SelectedObjects # IPositionLeader, IBase3D или IRough3D
KompasAPI7.IPropertyKeeper(iPart7).InsertHypertextReference(iPropertyMng.GetProperty(iDocument, 5.0), SelectedObjects, 0, False, 0, 0, 0.0)

Михаил88

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache

#  Получи константы
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
#  Подключим описание интерфейсов 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))
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iPart7 = kompas_document_3d.TopPart
property_mng = kompas_api7_module.IPropertyMng(application)

parts = iPart7.PartsEx(0)
print(parts)
iProperty = property_mng.GetProperty(kompas_document, 6.0)
property_keeper = kompas_api7_module.IPropertyKeeper(parts[0])
iFeature7 = kompas_api7_module.IFeature7(iPart7)
Variables = iFeature7.Variables(False, False)
print(Variables)
iVariable7 = iFeature7.Variable(False, False, 'vvv')
type_1 = kompas6_constants.ksHTVariableValue
brackets = False
textLineIndex = 0
precision = 1
propertyId = 0.0
print(property_keeper.InsertHypertextReference(iProperty, iVariable7, type_1, brackets, textLineIndex, precision, propertyId))

позволяет вставить ссылку на значение переменной в свойство количество для детали(с 0 индексом в массиве) внутри сборки причем переменная vvv должна быть в сборке.

Но вот вставить ссылку на переменную принадлежащую детали не получается, хотя я до нее спокойно добираюсь и после выполнения InsertHypertextReference возвращается True, но ссылка так и не появляется. Если в свойстве количество стояло какое то значение то оно удаляется.