ksCreateAttr - Пример использования |
Scroll |
//Создадим атрибут типа "таблица неопределенной длины",
//тип содержит три колонки: 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);
}