Макрос редактора свойств

Автор biomotor, 22.09.21, 10:34:46

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

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

biomotor

Подскажите, как с помощью одного макроса на python:
   1) убрать ненужные свойства в редакторе свойств
   2) запустить окно редактора свойств
   3) установить размер окна редактора свойств.
Screenshot_2.jpg

Михаил88

интересный вопрос, надо почитать в SDK. С налету так не сказать.

Slaviation

Добрый день.

2)
kompas_object.ksExecuteKompasCommand (kompas6_constants.ksCMPropertyEditor, True)

biomotor

Спасибо, хоть что-то...
Что означает код 45171 в SDK ?
ksEditDocumentProperties 37171 Процесс редактирования свойств документа - за что отвечает?
 

Slaviation

ЦитироватьЧто означает код 45171 в SDK ?
45171 - идентификатор команды 3D документа ksCMPropertyEditor

ЦитироватьksEditDocumentProperties 37171 Процесс редактирования свойств документа - за что отвечает?
kompas_object.ksExecuteKompasCommand(kompas6_constants.ksEditDocumentProperties, True)
Запускает процесс редактирования свойств документа в активном чертеже или фрагменте,




biomotor

Slaviation,

45171 - идентификатор команды 3D документа ksCMPropertyEditor
   можно ли по этому ID запустить команду?

kompas_object.ksExecuteKompasCommand(kompas6_constants.ksEditDocumentProperties, True)
Запускает процесс редактирования свойств документа в активном чертеже или фрагменте
   Так вроде это мне и нужно...
   После вызова данной команды должно ли открыться какое-либо окно?
   Как убрать галочки с ненужных мне пунктов свойств?

Slaviation

Что-то я начинаю не понимать: в п.2 был вопрос
Цитировать2) запустить окно редактора свойств
я ответил
Цитироватьkompas_object.ksExecuteKompasCommand (kompas6_constants.ksCMPropertyEditor, True)
Если выполнить этот код в документе-модели откроется диалог "Редактор свойств", который вы заскриншотили.
и вот опять тот же вопрос:
Цитировать45171 - идентификатор команды 3D документа ksCMPropertyEditor
   можно ли по этому ID запустить команду?

:)

biomotor

1)
kompas_object.ksExecuteKompasCommand(kompas6_constants.ksCMPropertyEditor, True) - Открывает редактор свойств.
kompas_object.ksExecuteKompasCommand(kompas6_constants.ksEditDocumentProperties, True) - Был вопрос тут, оказывается это для чертежа.

2)
Можно ли запустить как-то так:
kompas_object.ksExecuteKompasCommand(kompas_ID.45171, True) ?

Так запускается - kompas_object.ksExecuteKompasCommand(45171, True).

biomotor

Как бы вот еще эти галочки убрать???
Screenshot_1.jpg

biomotor

ksEditListTypeEnum - Тип списка панели свойств

ksEditList 0 Обычный список
ksCheckList 1 Список флагов
ksRadioList 2 Список переключателей

как проверить относится ли это к моей задаче?

В SDK вроде нормально написано к чему относится, интерфейс IPropertyEditList.

biomotor

#12
Sabahs, это просто я не совсем одупляю в данной справке SDK...
Почему нельзя было сделать просто с примером? Сиди, е...сь и думай как это применить...

Мое внимание привлек параметр:
API интерфейсов. Версия 7  > Приложение  > Работа с панелью свойств  > Интерфейс IPropertyControl  > IPropertyControl - свойства  > Интерфейс IPropertyEditList  > IPropertyEditList - методы
   Delete - Удалить элемент из списка по значению или индексу
У свойств точно есть индексы, но вот теперь как написать код для удаления?

я бы сделал так:
ad3d = application.ActiveDocument3D()
kd = ad3d.IPropertyControl().IPropertyEditList().Delete(index, 9)
но это не работает...

И не будет работать, иерархия там немного другая.
Вы лезете не в ту степь, это для создания своих процессов и панелей.
Вам нужно смотреть в сторону интерфейса IPropertyKeeper, где-то на форуме примеры были.

biomotor

#14
Чем отличаются IProperty, IPropertyKeeper и IPropertyMng?

Нашел такой код, но он не работает:
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument

#  "Измени свойства объекта "Тело"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
property_mng = kompas_api7_module.IPropertyMng(application)
body7 = kompas_api7_module.IFeature7(kompas_document_3d.TopPart).ResultBodies[0]
property_keeper = kompas_api7_module.IPropertyKeeper(body7)
property_keeper.SetPropertyValue(property_mng.GetProperty(kompas_document, "Обозначение"), "BODY.001", True)
body7.Update()

#  "Измени свойства объекта "Тело"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
property_mng = kompas_api7_module.IPropertyMng(application)
body7 = kompas_api7_module.IFeature7(kompas_document_3d.TopPart).ResultBodies[1]
property_keeper = kompas_api7_module.IPropertyKeeper(body7)
property_keeper.SetPropertyValue(property_mng.GetProperty(kompas_document, "Обозначение"), "BODY.002", True)
body7.Update()

Михаил88

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

#  Подключим описание интерфейсов 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))

property_mng = kompas_api7_module.IPropertyMng(application)
iProperty = property_mng.GetProperty(VARIANT(VT_EMPTY, None), VARIANT(VT_R8, 202615151542))

iProperty.Delete()
iProperty.Update()

202615151542 - вместо этого идентификатор прописать идентификатор вашего свойства

это удаляет свойство из документа

Михаил88

Показано где смотреть идентификатор

Screenshot_1.png

Toptotal

А чем Вам лишние свойства  не нравятся? Просто смысл задачи не понятен..

biomotor

Михаил88,
Немного не то, он целиком удаляет, а нужно убрать галочку....
я так понимаю вместо delete нужно использовать PropertyTypeId - Идентификатор сущности свойства

Toptotal,
"А чем Вам лишние свойства  не нравятся? Просто смысл задачи не понятен.."
   При открытии редактора свойств, которым я часто пользуюсь лишние свойства открываются на переднем плане, в связи с этим неудобно что либо редактировать, приходится в каждой сборке редактировать список свойств и настраивать размер окна и столбцов, это крайне неудобно...
В идеале если бы редактор запоминал свое состояние., но разработчики решили забить на данную функцию...

Так не удаляйте свойство, а меняйте значение property_mng.SetProperty.