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>
126 lines
7.2 KiB
Markdown
126 lines
7.2 KiB
Markdown
---
|
|
title: "ksCreateAttr - Создать атрибут объекта"
|
|
type: guide
|
|
api: [api7]
|
|
tags: [guide, api7, kscreateattr]
|
|
sources:
|
|
- kscreateattr.html
|
|
---
|
|
|
|
*API экспортных функций > Функции работы с прикладной библиотекой > Функции работы с атрибутами *
|
|
|
|
|
|
## ksCreateAttr - Создать атрибут объекта
|
|
|
|
Пример...
|
|
Аналог данной функции при использовании Automation - метод ksAttributeObject::ksCreateAttr.
|
|
Синтаксис:
|
|
```
|
|
reference ksCreateAttr (reference pObj,
|
|
ksAttribute * attr,
|
|
double attrID,
|
|
char *libname);
|
|
Входные параметры:
|
|
pObj - указатель на объект (группа, вид, отдельный объект), атрибут которого создается. Если pObj = 0, то создается атрибут документа,
|
|
attr - указатель на структуру параметров атрибута ksAttribute,
|
|
attrID - уникальный номер типа атрибута,
|
|
libName - имя библиотеки типов атрибутов, если libname = NULL, то тип атрибута берется из текущего документа.
|
|
Возвращаемое значение:
|
|
указатель на атрибут - в случае удачного завершения,
|
|
0 - в случае неудачи.
|
|
```
|
|
Примечания:
|
|
1. Указатель на объект reference pObj может быть получен следующими способами:
|
|
– с помощью функций Итератора CreateIterator, MoveIterator.
|
|
– с помощью функций создания объектов, возвращающих указатель reference на созданный объект, например, reference LineSeg.
|
|
2. Уникальный номер типа атрибута attrID может быть получен с помощью поля typeid структуры параметров типа атрибута LibraryAttrTypeParam, которая может быть получена с помощью функции ksGetLibraryAttrTypesArray, или с помощью функции GetAttrKeysInfo. Тип атрибута должен быть предварительно создан, например, с помощью функции ksCreateAttrType.
|
|
|
|
|
|
## ksCreateAttr - Пример использования
|
|
|
|
//Создадим атрибут типа "таблица неопределенной длины",
|
|
//тип содержит три колонки: DOUBLE_ATTR_TYPE(double),
|
|
// STRING_ATTR_TYPE(строка),LINT_ATTR_TYPE(long int).
|
|
//Атрибут создадим для внутреннего макроэлемента.
|
|
//Макроэлемент на момент создания атрибута временный, т.е. не в модели чертежа.
|
|
//Отредактируем атрибут в диалоге редактирования атрибута - добавим строку, удалим.
|
|
ksAttribute attrPar;
|
|
memset(&attrPar, 0, sizeof(attrPar));
|
|
struct TypeStr {
|
|
double a;
|
|
char c [MAX_TEXT_LENGTH];
|
|
long b;
|
|
} ;
|
|
static TypeStr arrBuf [3] = { {187654321.0, "1 строка", 19999l},
|
|
{287654321.0, "2 строка", 29999l},
|
|
{387654321.0, "3 строка", 39999l} };
|
|
//массив, определяющий для каждой колонки видимость-невидимость
|
|
//(вторая колонка выключена)
|
|
unsigned char fV[3]= {1,0,1};
|
|
attrPar.key1 = 1; // рекоменд. как код разработчика
|
|
attrPar.key2 = 10; // рекоменд. как код атрибута
|
|
attrPar.key3 = 100; // рекоменд. как код разработчика
|
|
attrPar.key4 = 0; // системный код атрибута
|
|
// значения от 0 до 1000 зарезервированы
|
|
// за АО "АСКОН"
|
|
attrPar.flagVisible = fV; //массив, определяющий для каждой колонки
|
|
// атрибута видимость-невидимость
|
|
//0 -видимое поле 1- невидимое поле
|
|
attrPar.values = &arrBuf ; // массив значений ячеек таблицы атрибутов
|
|
// сначала все значения для 1-ой строки,
|
|
// затем все значения для 2-ой строки и т.д.
|
|
attrPar.valSize = sizeof(TypeStr)*3;
|
|
strcpy(attrPar.password,"111"); //пароль
|
|
reference pObj;
|
|
char nameFile[128];
|
|
if(!ChoiceFile("*.lat",NULL, nameFile, 128))
|
|
nameFile[0]='\0'; //будем искать в документе
|
|
//номер типа атрибута
|
|
//(тип создан ранее,
|
|
//если nameFile пустое - ищем тип атрибута в документе)
|
|
double numb;
|
|
int j = ReadDouble ("Ввести номер типа атрибута", 1000.,0, 1e12,&numb);
|
|
if(j) {
|
|
//временная группа
|
|
reference g = NewGroup(1);
|
|
//создадим пустой macro
|
|
Macro (0);
|
|
reference m = EndObj();
|
|
pObj = LineSeg(10, 10, 20, 20, 1);
|
|
//добавим отрезок в macro
|
|
ksAddObjectToMacro (m, //указатель на макроэлемент
|
|
pObj ); //указатель на добавляемый объект
|
|
//создадим для отрезка, который принадлежит macro атрибут
|
|
reference attr= ksCreateAttr(pObj, &attrPar, numb, nameFile);
|
|
if (!attr)
|
|
MessageBoxResult(); // неудачное завершение - выдадим результат работы нашей функции
|
|
else {
|
|
//вызываем диалог для редактирования атрибута
|
|
ViewEditAttr ( attr, 2, "111"); // пароль атрибута для просмотра 0
|
|
TypeStr arrBuf1 = { 222222222222.0, "новая строка", 4444444l} ;
|
|
//добавим в конец атрибута еще одну строку
|
|
ksAddAttrRow (attr, // указатель атрибута
|
|
-1, // номер строки, после которой вставлять, -1 -в конец
|
|
fV, // указатель на массив флагов видимости ячеек строки
|
|
&arrBuf1, // указатель на память пользователя, откуда копируются данные
|
|
sizeof(TypeStr), // размер выделенной памяти под value
|
|
"111"); // пароль атрибута
|
|
//удалим первую строку
|
|
ksDeleteAttrRow (attr, // указатель атрибута
|
|
0, "111"); // номер строки
|
|
//узнаем количество колонок и строк в атрибуте
|
|
unsigned int rowsCount, columnsCount;
|
|
GetAttrTabInfo (attr, // указатель атрибута
|
|
&rowsCount, // количество строк
|
|
&columnsCount);// количество столбцов
|
|
char buf[250];
|
|
sprintf(buf, "rowsCount = %d columnsCount = %d",rowsCount,columnsCount);
|
|
//выведем количество колонок и строк в атрибуте на экран
|
|
Message (buf);
|
|
}
|
|
//закроем временную группу
|
|
EndGroup();
|
|
//поставим все объекты временной группы в модель чертежа
|
|
StoreTmpGroup(g);
|
|
}
|