--- title: "Интерфейс ILibPropertyObject" type: interface api: [api7] tags: [interface, api7, ilibpropertyobject] sources: - ilibpropertyobject.html --- *API экспортных функций > Функции работы с графическим документом  > Создание графических объектов  > Работа с макроэлементами и библиотечными макроэлементами  > Внешние воздействия на библиотечный элемент * ## Интерфейс ILibPropertyObject Интерфейс объекта со свойствами отображаемыми в окне свойств. Описание: Интерфейс должен быть реализован на стороне библиотеки разработчиком приложения, если необходимо обеспечить управление характерными точками библиотечного элемента 2D. Режим поддержки интерфейса управления характерными точками включается в функции ksSetMacroParam. Вызывается КОМПАС при селектировании библиотечного элемента 2d через функцию LibObjInterfaceEntry. Интерфейс является обработчиком событий, генерирующихся КОМПАС при селектировании библиотечного элемента. Интерфейс позволяет выполнить следующие действия: – Добавить дополнительные свойства в окно свойств для библиотечных элементов. – Выполнить изменение свойств через окно свойств. – Выполнить копирование свойств в процессе копирования свойств между библиотечными элементами. – Выполнить поиск и селектирование объектов по свойствам. Интерфейс реализован по аналогии с интерфейсом хот-точек. Передача интерфейса в КОМПАС осуществляется посредством предопределенной функции LibObjInterfaceEntry. Передача интерфейса КОМПАС может быть осуществлена из библиотеки, установленной флагом MP_PROPERTY_OBJECT в функции ksSetMacroParam, или установившей свойство IMacroObject::PropertyObjectEditable. Группировка и сортировка свойств осуществляется по идентификатору. Свойства могут быть заданы в любой последовательности. Они будут отсортированы по возрастанию идентификатора. Принадлежность к группе определяется также по идентификатору. Свойство добавится в группу с ближайшим меньшим идентификатором. Применение интерфейса приведено в следующих примерах: Gayka1 (Демонстрационные примеры SDK КОМПАС-3D); Пример описания ресурсов... ## ApplyProperty - Установить новое значение для свойства Синтаксис COM: ``` int ApplyProperty( PropertyParam * param ); Входные и выходные параметры: param - cтруктура параметров свойства PropertyParam, Возвращаемое значение: 1 - новое значение свойства установлено, 0 - новое значение не установлено. ``` Примечание: Идентификация свойства осуществляется по параметру propertyId в PropertyParam. ## EndEditProperty - Завершение редактирования свойств объекта Синтаксис COM: ``` BOOL EndEditProperty( ); Возвращаемое значение: Не используется. ``` Примечание: Предназначено для освобождения каких либо данных, созданных на время редактирования свойств. ## GetGroupName - Имя группы объектов Синтаксис COM: ``` LPOLESTR GetGroupName(); Возвращаемое значение: - имя группы объектов, отображаемой в списке типов выделенных объектов окна свойств. ``` Примечание: Группы объектов также отображаются в окне поиска объектов по свойствам. ## GetMouseEnterLeavePoint - Запрос параметров точек для визуального определения места применения параметра Синтаксис: ``` BOOL GetMouseEnterLeavePoint( int propertyId, long pointIndex, LPUNKNOWN parameters ); Входные параметры: propertyId - идентификатор свойства, pointIndex - индекс точки, parameters - интерфейс параметров отображения точки IMouseEnterLeaveParameters. ``` Примечание: Функция вызывается при наведении на редактор свойства, если установлен признак PropertyParam needMouseEnterLeaveMessage. Функция позволяет подсветить в чертеже одну или несколько точек применения контрола. Функция вызывается в цикле с увеличением индекса точки pointIndex пока библиотека не вернет FALSE, как признак завершения получения параметров точек. ## GetProperty - Добавить свойство в список свойств Синтаксис COM: ``` BOOL GetProperty( int index, PropertyParam * param ); Входной параметр: index - индекс свойства, Выходной параметр: param - структура параметров свойства PropertyParam, Возвращаемое значение: TRUE - если требуется добавить свойство с заданным индексом, FALSE - формирование списка свойств закончено. ``` Примечание: 1. Метод позволяет сформировать список внешних свойств объекта. 2. Метод вызывается при первом селектировании объекта. 3. Для получения текущих значений свойства используется метод ILibPropertyObject::UpdateProperty. 4. В отличие от работы с окном свойств, для организации полноценной работы поиска по свойствам библиотечных макроэлементов необходимо: – Задать для вещественных и целых значений минимальное и максимальное значение свойства (для создания правильного валидатора). – Заполнить список всеми возможными значениями свойства без учета зависимостей от других свойств (т.к. в диалоге поиска это список всегда должен показываться полностью). Это требуется для полноценной работы динамически задаваемых списочных свойств (PropertyParam::additionData). ## OnChoiceProperty - Событие запуска внешнего редактирования для пользовательского свойства Синтаксис COM: ``` BOOL OnChoiceProperty( PropertyParam * param ); Входные и выходные параметры: param - cтруктура параметров свойства PropertyParam, Возвращаемое значение: TRUE - значение изменилось, FALSE - значение не изменилось. ``` Примечание: 1. Идентификация свойства осуществляется по параметру propertyId в PropertyParam. 2. Событие вызывается для свойств с типом ksOPControlExternalEdit и ksOPControlExternalStringEdit из перечисления ksObjectPropertyControlTypeEnum. ## Пример описания ресурсов #define END_OF_STRING_RESOURCE_TABLE 0 #define END_OF_RESOURCE_TABLE 0xffff #define ID_PROP_ELEMENT_PARAM 20000 // Группа параметры элемента #define PROP_DOUBLE_LIST 20001 // Cписок вещественных значений #define PROP_INT_LIST 20002 // Cписок целых значений #define PROP_STRING_LIST 20003 // Cписок строк #define ID_PROP_VIEW 20004 // Вид STRINGTABLE DISCARDABLE BEGIN ID_PROP_ELEMENT_PARAM "Параметры элемента" PROP_DOUBLE_LIST "Cписок вещественных значений" PROP_INT_LIST "Cписок целых значений" PROP_STRING_LIST "Cписок строк" END Для фиксированного списка вещественных значений: PROP_DOUBLE_LIST RCDATA { L"1.0\0" L"2.0\0" L"3.0\0" L"4.0\0" L"5.0\0" END_OF_STRING_RESOURCE_TABLE } Для фиксированного списка целых значений: PROP_INT_LIST RCDATA { L"1\0" L"2\0" L"3\0" L"4\0" L"5\0" END_OF_STRING_RESOURCE_TABLE } Для фиксированного списка строк: PROP_STRING_LIST RCDATA { L"Первая строка\0" L"Вторая строка\0" L"Третья строка\0" END_OF_STRING_RESOURCE_TABLE } Пример описания ресурсов для списка битмапов ksOPControlListBmp: #define IDB_ID_VIEW 1101 // ID_VIEW - Вид #define IDB_ID_VIDSEC 1102 // ID_VIDSEC - Вид разрез #define IDB_ID_TOPVID 1103 // ID_TOP - Вид сверху #define IDB_ID_SIDEVID 1111 // ID_SIDE - Вид сбоку IDB_ID_VIEW ICON DISCARDABLE "res\\G_VIEW.ico" IDB_ID_TOPVID ICON DISCARDABLE "res\\G_TOP.ico" IDB_ID_SIDEVID ICON DISCARDABLE "res\\G_LEFT.ico" IDB_ID_VIDSEC ICON DISCARDABLE "res\\G_SEC.ico" STRINGTABLE DISCARDABLE BEGIN ID_PROP_VIEW "Вид" IDB_ID_VIEW "Вид" IDB_ID_TOPVID "Вид сверху" IDB_ID_SIDEVID "Вид сбоку" IDB_ID_VIDSEC "Вид\\разрез" END // Список значений ID_PROP_VIEW RCDATA { IDB_ID_VIEW IDB_ID_TOPVID IDB_ID_SIDEVID IDB_ID_VIDSEC END_OF_RESOURCE_TABLE } ## UpdateProperty - Обновить параметры свойства Синтаксис COM: ``` BOOL UpdateProperty( PropertyParam * param ); Входные и выходные параметры: param - cтруктура параметров свойства PropertyParam, Возвращаемое значение: TRUE - если параметры свойства обновились, FALSE - если параметры свойства не изменились. ``` Примечание: 1. Идентификация свойства осуществляется по параметру propertyId в PropertyParam. 2. При выделении нескольких макроэлементов отображаемый в окне "Свойства" список значений будет сформирован с учетом значения флага PropertyParam: summList - // TRUE - объединять списки, FALSE - пересекать списки.