1)
VLine1, VLine2 - габаритные линии рисунка (см. редактор векторного знака).
VSize = VLine2 - VLine1;
2,3) Заполение параметров на Вашем примере:
[CODE] // Параметры векторного знака должны быть записаны в одном буфере (добавлен запас)
buf=(char*)malloc(2560); // Очистка для надежности (будут обнулены и резервные поля типа Reserve).
// В будующем вместо поля Reserve могут появиться новые поля
memset(buf, 0, 2560);
mImgObj=(IMGVECTOREX*)buf;
// !!! Не проинициализированы 9 полей !!!
mImgObj->PosV =
...
mImgObj->HSize =
// Один фрагмент
mImgObj->Count = 1;
IMGPOLYDESC *d1=(IMGPOLYDESC *)&(mImgObj->Desc);
d1->Type=VT_LINE;
d1->Image=IMG_DOT;
// !!! Длина параметров до конца описания фрагмента (включая точки), см. ниже !!!
// !!! d1->Length=sizeof(IMGDOT);
IMGDOT *l1 = (IMGDOT *)&(d1->Parm);
l1->Thick=PIX2MKM(1);
l1->Blank=PIX2MKM(5);
l1->Dash=PIX2MKM(5);
l1->Color=RGB(255,255,255); // Пропустить параметры (d1->Parm - запись переменной длины)
long *Count = (long *)(l1 + 1);
// d1->Count=3;
*Count = 3; // Пропустить счетчик точек
IMGVECTPOINT *Point = (IMGVECTPOINT *)(Count+1);
Point->Hor=PIX2MKM(128);
Point->Ver=PIX2MKM(112);
Point++;
Point->Hor=PIX2MKM(136);
Point->Ver=PIX2MKM(143);
Point++;
Point->Hor=PIX2MKM(128);
Point->Ver=PIX2MKM(137);
Point++;
// !!! Примерно так:
d1->Length = (char*)Point - (char*)&(d1->Parm);
mImgObj->Length=(char*)Point - buf;
// Этот код не работает. !!! Ошибка при передаче указателя mImgObj !!!
// mapAppendDraw(hObj, IMG_VECTOREX,(const char*)&mImgObj) возвращает 0!
// !!! Примеры:
mapAppendDraw(hObj, IMG_VECTOREX,(const char*)mImgObj); // Может быть так
mapAppendDraw(hObj, IMG_VECTOREX,(const char*)buf); // или так[/CODE]4) Да
P.S. Есть вариант более простого создания графических объектов:
1. Создать векторный или любой другой объект в классификаторе средствами редактора классификатора.
Программно:
2. Запросить номер функции: mapGetRscPrintObjectFunction()
3. Запросить указатель на параметры функции: mapGetRscPrintObjectParameters()
4. Записать параметры графического объекта: mapAppendDraw()
VLine1, VLine2 - габаритные линии рисунка (см. редактор векторного знака).
VSize = VLine2 - VLine1;
2,3) Заполение параметров на Вашем примере:
[CODE] // Параметры векторного знака должны быть записаны в одном буфере (добавлен запас)
buf=(char*)malloc(2560); // Очистка для надежности (будут обнулены и резервные поля типа Reserve).
// В будующем вместо поля Reserve могут появиться новые поля
memset(buf, 0, 2560);
mImgObj=(IMGVECTOREX*)buf;
// !!! Не проинициализированы 9 полей !!!
mImgObj->PosV =
...
mImgObj->HSize =
// Один фрагмент
mImgObj->Count = 1;
IMGPOLYDESC *d1=(IMGPOLYDESC *)&(mImgObj->Desc);
d1->Type=VT_LINE;
d1->Image=IMG_DOT;
// !!! Длина параметров до конца описания фрагмента (включая точки), см. ниже !!!
// !!! d1->Length=sizeof(IMGDOT);
IMGDOT *l1 = (IMGDOT *)&(d1->Parm);
l1->Thick=PIX2MKM(1);
l1->Blank=PIX2MKM(5);
l1->Dash=PIX2MKM(5);
l1->Color=RGB(255,255,255); // Пропустить параметры (d1->Parm - запись переменной длины)
long *Count = (long *)(l1 + 1);
// d1->Count=3;
*Count = 3; // Пропустить счетчик точек
IMGVECTPOINT *Point = (IMGVECTPOINT *)(Count+1);
Point->Hor=PIX2MKM(128);
Point->Ver=PIX2MKM(112);
Point++;
Point->Hor=PIX2MKM(136);
Point->Ver=PIX2MKM(143);
Point++;
Point->Hor=PIX2MKM(128);
Point->Ver=PIX2MKM(137);
Point++;
// !!! Примерно так:
d1->Length = (char*)Point - (char*)&(d1->Parm);
mImgObj->Length=(char*)Point - buf;
// Этот код не работает. !!! Ошибка при передаче указателя mImgObj !!!
// mapAppendDraw(hObj, IMG_VECTOREX,(const char*)&mImgObj) возвращает 0!
// !!! Примеры:
mapAppendDraw(hObj, IMG_VECTOREX,(const char*)mImgObj); // Может быть так
mapAppendDraw(hObj, IMG_VECTOREX,(const char*)buf); // или так[/CODE]4) Да
P.S. Есть вариант более простого создания графических объектов:
1. Создать векторный или любой другой объект в классификаторе средствами редактора классификатора.
Программно:
2. Запросить номер функции: mapGetRscPrintObjectFunction()
3. Запросить указатель на параметры функции: mapGetRscPrintObjectParameters()
4. Записать параметры графического объекта: mapAppendDraw()