e1337e4016
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается. - .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным (safety-net на случай повторной локальной выгрузки). - CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
333 lines
21 KiB
Markdown
333 lines
21 KiB
Markdown
---
|
||
title: "Интерфейс макроэлемента (ksMacro3DDefinition, IMacro3DDefinition)"
|
||
type: interface
|
||
api: [api7]
|
||
domain: [3d, 2d]
|
||
tags: [interface, api7, 3d, 2d, ksmacro3ddefinition]
|
||
sources:
|
||
- ksmacro3ddefinition.html
|
||
---
|
||
|
||
*API интерфейсов. Версия 5 > Документ-модель (Интерфейсы - ksDocument3D, IDocument3D ) > Компонент сборки (деталь или подсборка). Интерфейсы ksPart и IPart > Объект модели (Интерфейсы ksEntity и IEntity) > Интерфейсы ksEntity и iEntity - Интерфейс элемента модели (оси, плоскости, формообразующего элемента) > Интерфейсы поверхностей *
|
||
|
||
|
||
## Интерфейс макроэлемента (ksMacro3DDefinition, IMacro3DDefinition)
|
||
|
||
Интерфейс макроэлемента документа-модели.
|
||
| ksMacro3DDefinition | - интерфейс Automation |
|
||
| --- | --- |
|
||
| IMacro3DDefinition | - интерфейс COM |
|
||
Описание:
|
||
Является 3D объектом, объединяющим в себе другие 3D объекты, в том числе и другие макроэлементы 3D, с возможностью скрывать свой состав, сохранять дополнительные пользовательские параметры и редактировать данный объект через библиотеку (если задано имя файла, имя библиотеки и команда редактирования).
|
||
Последовательность создания макроэлементов через API.
|
||
Создание макроэлемента с последующим добавлением объектов в его состав.
|
||
1. Создание пустого макроэлемента:
|
||
•Создание у компонента макроэлемента (ksPart::NewEntity соответствующего типа).
|
||
•Установка свойств макроэлемента (Видимость состава StaffVisible).
|
||
•Создание макро в модели ksEntity::Create.
|
||
•Установка пользовательских параметров SetUserParam.
|
||
2. Добавление существующих объектов в создаваемый макроэлемент:
|
||
•Добавление объектов в коллекцию объектов, входящих в макро ksFeatureCollection; при этом в модели ничего не происходит.
|
||
•Обновление макроэлемента ksEntity::Update; все новые объекты будут перенесены в макро в модели, у самих объектов тоже будут вызваны методы Update,
|
||
3. Создание новых объектов и добавление в макро:
|
||
•Создание нового объекта (NewEntity).
|
||
•Задание свойств нового объекта.
|
||
•Добавление объекта в коллекцию объектов, входящих в макро, при этом в модели ничего не происходит.
|
||
•Обновление макро ksEntity::Update - все новые, не созданные объекты, создадутся; у них вызовется ksEntity::Create.
|
||
Создание макроэлемента с одновременным наполнением его объектами.
|
||
•Создание у компонента макроэлемента (NewEntity соответствующего типа).
|
||
•Задание свойств макроэлемента.
|
||
•Создание при необходимости новых объектов (NewEntity) и задание их свойства (Create не вызывать), иначе переход к следующему пункту,
|
||
•Добавление объектов в коллекцию объектов, входящих в макро, в модели ничего не происходит,
|
||
•Создание макро в модели (ksEntity::Create) - все новые объекты создадутся, у них вызовется метод ksEntity::Create. Существующие объекты будут обновлены, у них вызовется метод ksEntity::Update.
|
||
4. Данный интерфейс можно получить, используя метод интерфейса элемента модели ksEntity::GetDefinition или IEntity::GetDefinition.
|
||
|
||
|
||
## Add - Добавить объект в состав макроэлемента
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL Add (LPDISPATCH obj);
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL Add (LPUNKNOWN obj);
|
||
Входные параметры:
|
||
obj - указатель на интерфейс объекта, добавляемого в макроэлемент.
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения,
|
||
FALSE - в случае неудачи.
|
||
```
|
||
Примечание:
|
||
1. В качестве входного параметра могут быть переданы следующие интерфейсы:
|
||
•ksFeature,
|
||
•ksEntity,
|
||
•ksPart,
|
||
•ksMateConstraint.
|
||
2. Если объект еще не создан в модели, то он создастся после вызова методов ksEntity::Create или ksEntity::Update макроэлемента. Для существовавших объектов в этом случае будет вызван метод ksEntity::Update.
|
||
3. Добавляемый объект должен принадлежать тому же компоненту, что и сам макроэлемент. Он не должен принадлежать другому макроэлементу.
|
||
4. При добавлении тела в макроэлемент в макроэлемент добавляются все операции данного тела на момент создания макроэлемента. Само тело в макроэлемент не добавляется.
|
||
|
||
|
||
## ClearAllObj - Удалить все вспомогательные объекты, сохраненные в макро
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL ClearAllObj();
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL ClearAllObj();
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения.
|
||
```
|
||
Примечания:
|
||
Объект - это вспомогательная информация, и визуально никак не отображается. Например, если создать болт как макро относительно какого-нибудь объекта (например отверстие - цилиндрическая поверхность), и запомнить это отверстие в макро болта, то при следующем редактирование можно получить сохранённый указатель на отверстие.
|
||
|
||
|
||
## Destroy - Разрушить макроэлемент
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL Destroy();
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL Destroy();
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения,
|
||
FALSE - в случае неудачи.
|
||
```
|
||
Примечание:
|
||
После вызова этого метода макроэлемент будет разрушен, а все объекты, входившие в его состав, станут самостоятельными.
|
||
|
||
|
||
## DoubleClickEditOff - Получить признак внешнего редактирования детали
|
||
|
||
Тип данных: BOOL
|
||
Синтаксис Automation:
|
||
```
|
||
off = iObj.DoubleClickEditOff Получить свойство (* )
|
||
iObj.DoubleClickEditOff = off Установить свойство(* )
|
||
off = iObj.GetDoubleClickEditOff() Получить свойство (**)
|
||
iObj.SetDoubleClickEditOff (off) Установить свойство (**)
|
||
```
|
||
Примечание:
|
||
Свойство позволяет для библиотечных элементов, имеющих макропараметры, оставить стандартное поведение компонента и объектов, входящих в состав компонента. Для этого нужно установить значение свойства равным TRUE.
|
||
|
||
|
||
## FeatureCollection - Получить массив объектов, входящих в макроэлемент
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
LPDISPATCH FeatureCollection();
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
LPFEATURECOLLECTION FeatureCollection();
|
||
Возвращаемое значение:
|
||
- указатель на интерфейс ksFeatureCollection или IFeatureCollection
|
||
```
|
||
Примечание:
|
||
1. Через данную коллекцию можно добавлять только уже созданные объекты. Добавление новых (несозданных) объектов осуществляется при помощи метода ksMacro3DDefinition::Add.
|
||
2. Метод ksFeatureCollection::Refresh наполняет содержимое коллекции объектами, входящими в макроэлемент. Все изменения, сделанные в коллекции, после вызова этого метода будут потеряны.
|
||
3. При добавлении объектов в коллекцию добавляемый объект должен принадлежать тому же компоненту, что и сам макроэлемент; он не должен принадлежать другому макроэлементу.
|
||
|
||
|
||
## GetCountObj - Получить количество вспомогательных объектов, сохраненных в макро
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
long GetCountObj();
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
long GetCountObj();
|
||
Возвращаемое значение:
|
||
- Количество вспомогательных объектов, сохранённых в макро.
|
||
```
|
||
Примечания:
|
||
Объект - это вспомогательная информация и визуально никак не отображается. Например, если создать болт как макро относительно какого-нибудь объекта (например отверстие - цилиндрическая поверхность), и запомнить это отверстие в макро болта, то при следующем редактирование можно получить сохранённый указатель на отверстие.
|
||
|
||
|
||
## GetObject - Получить указатель на вспомогательный объект, сохраненный в макро по индексу
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
LPDISPATCH GetObject (long index);
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
LPUNKNOWN GetObject (long index);
|
||
Входные параметры:
|
||
index - номер объекта.
|
||
Возвращаемое значение:
|
||
- Указатель на интерфейс IDispatch или IUnknown сохранённого объекта.
|
||
```
|
||
Примечания:
|
||
Объект - это вспомогательная информация, и визуально никак не отображается. Например, если создать болт как макро относительно какого-нибудь объекта (например отверстие - цилиндрическая поверхность), и запомнить это отверстие в макро болта, то при следующем редактирование можно получить сохранённый указатель на отверстие.
|
||
См. также: IMacro3DDefinition::SetObject
|
||
|
||
|
||
## GetUserLibraryCommand - Получить номер команды пользовательской библиотеки, при помощи которой можно редактировать макроэлемент
|
||
|
||
Интерфейс.
|
||
Аналог данного метода при использовании Automation - ksUserParam::number.
|
||
Пример...
|
||
Синтаксис COM:
|
||
```
|
||
long GetUserLibraryCommand();
|
||
Возвращаемое значение:
|
||
Номер библиотечной команды - в случае успешного завершения,
|
||
-1 - если библиотеки нет.
|
||
```
|
||
|
||
|
||
## GetUserLibraryFileName - Получить имя файла пользовательской библиотеки, при помощи которой можно редактировать макроэлемент
|
||
|
||
Аналог данного метода при использовании Automation - ksUserParam::fileName.
|
||
Пример...
|
||
Синтаксис COM:
|
||
```
|
||
LPOLESTR GetUserLibraryFileName();
|
||
Возвращаемое значение:
|
||
Имя файла пользовательской библиотеки - в случае успешного завершения,
|
||
NULL - если имя файла библиотеки не задано.
|
||
```
|
||
|
||
|
||
## GetUserLibraryName - Получить имя пользовательской библиотеки, при помощи которой можно редактировать макроэлемент
|
||
|
||
Аналог данного метода при использовании Automation - ksUserParam::libName.
|
||
Пример....
|
||
Синтаксис COM:
|
||
```
|
||
LPOLESTR GetUserLibraryName();
|
||
Возвращаемое значение:
|
||
Имя пользовательской библиотеки - в случае успешного завершения,
|
||
NULL - если имя библиотеки не задано.
|
||
```
|
||
|
||
|
||
## GetUserParam - Получить параметры пользователя
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL GetUserParam (LPDISPATCH userPars);
|
||
Выходные параметры:
|
||
userPars - указатель на интерфейс пользовательских параметров ksUserParam.
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL GetUserParam (void *value,
|
||
unsigned int size);
|
||
Входные параметры:
|
||
value - указатель на пользовательскую структуру параметров,
|
||
size - размер структуры параметров.
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения,
|
||
FALSE - в случае неудачи.
|
||
```
|
||
Примечание:
|
||
Способ получения пользовательских данных (userPars) должен совпадать со способом их сохранения (void*, SAFEARRAY, или DynamicArray) через ksMacro3DDefinition::SetUserParam.
|
||
– Если пользовательские данные были сохранены через SAFEARRAY (userPars), то перед их получением нужно создать SAFEARRAY соответствующего размера (размер данных можно определить при помощи ksMacro3DDefinition::GetUserParamSize).
|
||
– Если пользовательские данные были сохранены через ksUserParam::SetUserArray, то перед их получением нужно создать UserArray, аналогичный по структуре используемому при сохранении, и передать его в ksUserParam::SetUserArray.
|
||
|
||
|
||
## GetUserParamSize - Получить размер структуры параметров пользователя, хранимых в макроэлементе
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
long GetUserParamSize();
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
long GetUserParamSize();
|
||
Возвращаемое значение:
|
||
- Размер структуры параметров пользователя, хранимых в макроэлементе в байтах.
|
||
```
|
||
|
||
|
||
## PropertyObjectEditable - Поддерживается интерфейс внешних свойств объекта
|
||
|
||
Тип данных: BOOL
|
||
Синтаксис Automation:
|
||
```
|
||
PropertyObjectEditable = Object.PropertyObjectEditable Получить свойство (* )
|
||
Object.PropertyObjectEditable = PropertyObjectEditable Установить свойство(* )
|
||
PropertyObjectEditable = Object.GetPropertyObjectEditable() Получить свойство (**)
|
||
Object.SetPropertyObjectEditable( PropertyObjectEditable ) Установить свойство (**)
|
||
```
|
||
|
||
|
||
## SetObject - Сохранить указатель на объект в макро по индексу
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL SetObject(long index, LPDISPATCH obj);
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL SetObject(long index, LPUNKNOWN obj);
|
||
Входные параметры:
|
||
index - номер объекта,
|
||
obj - указатель на интерфейс объекта.
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения,
|
||
FALSE - в случае неудачи.
|
||
```
|
||
Примечания:
|
||
Объект - это вспомогательная информация, и визуально никак не отображается. Например, если создать болт как макро относительно какого-нибудь объекта (например отверстие - цилиндрическая поверхность), и запомнить это отверстие в макро болта, то при следующем редактирование можно получить сохранённый указатель на отверстие.
|
||
См. также: IMacro3DDefinition::GetObject
|
||
|
||
|
||
## SetUserParam - Установить параметры пользователя
|
||
|
||
Синтаксис Automation:
|
||
```
|
||
BOOL SetUserParam (LPDISPATCH userPars);
|
||
Входные параметры:
|
||
userPars - указатель на интерфейс пользовательских параметров ksUserParam.
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
BOOL SetUserParam (void *value,
|
||
unsigned int size,
|
||
LPOLESTR nameFile,
|
||
LPOLESTR nameLib,
|
||
int number );
|
||
Входные параметры:
|
||
value - указатель на пользовательскую структуру параметров,
|
||
size - размер структуры параметров,
|
||
nameFile - имя файла прикладной библиотеки для последующего редактирования через библиотеку (0 - запоминается текущая библиотека),
|
||
nameLib - имя прикладной библиотеки для последующего редактирования через библиотеку (0 - запоминается текущая библиотека),
|
||
number - номер команды в прикладной библиотеке для последующего редактирования через библиотеку (-1 - запоминается текущая команда).
|
||
Возвращаемое значение:
|
||
TRUE - в случае успешного завершения,
|
||
FALSE - в случае неудачи.
|
||
```
|
||
Примечания:
|
||
Данный метод позволяет сохранить параметры пользователя для последующего редактирования с помощью библиотеки.
|
||
|
||
|
||
## StaffVisible - Управление видимостью состава
|
||
|
||
Тип данных: BOOL
|
||
Синтаксис Automation:
|
||
```
|
||
staffVisible = iObject.StaffVisible Получить свойство (* )
|
||
iObject.StaffVisible = staffVisible Установить свойство(* )
|
||
staffVisible = iObject.GetStaffVisible() Получить свойство (**)
|
||
iObject.SetStaffVisible (staffVisible) Установить свойство (**)
|
||
```
|
||
Синтаксис COM:
|
||
```
|
||
staffVisible = iObject->GetStaffVisible() Получить свойство
|
||
iObject->SetStaffVisible (&StaffVisible) Установить свойство
|
||
Значение свойства:
|
||
TRUE - состав объекта можно посмотреть в Дереве построения,
|
||
FALSE - состав недоступен для просмотра.
|
||
```
|
||
Примечание:
|
||
Свойство позволяет управлять видимостью состава макроэлемента.
|