[QUOTE]Владимир Бершов пишет:
Я не использую функции с приставкой Site,[/QUOTE]
а зря, не смотря не то, что функция mapCreateObject появилась раньше - она является ЧАСТНЫМ случаем функции mapCreateSiteObject
[QUOTE]и что использовать в качестве параметра hSite[/QUOTE]
Если Вы работаете с одной картой то её использование следующее
HOBJ hobj = mapCreateSiteObject(mvMap->MapHandle, [B]mvMap->MapHandle[/B], KM_IDDOUBLE2, 0);
Зато, если вам прийдётся изменять код для работы с подключенной картой, вы заменяете
HOBJ hobj = mapCreateSiteObject(mvMap->MapHandle, [B]mvMap->MapHandle[/B], KM_IDDOUBLE2, 0); на
HOBJ hobj = mapCreateSiteObject(mvMap->MapHandle, xxx-SiteHandle, KM_IDDOUBLE2, 0);
[QUOTE]Перемещение объекта/точки объекта надо делать с помощью mapUpdatePointPlane? Аналогичной функции, принимающей географические координаты, нет? Как быть если объект из двух и более точек (отрезок, например)?[/QUOTE]
mapUpdatePointPlane
обратная
mapXPlane mapYPlane
[QUOTE]Я могу просто хранить массив hobj-тов? [/QUOTE]
для чего плодить для каждого объекта контейнер?
[QUOTE]Или мне надо запоминать не hobj'ы, а ключи, возвращаемые для каждого закоммиченного hobj функцией mapObjectKey(hobj) ? И потом чтобы получить доступ к объекту, надо вызвать mapSeek, получать опять hobj [/QUOTE]
Демонстрирую:
пусть имеется функция создания объекта на карте, которой могу воспользоваться энное число раз
[CODE]
int CreateNewObject(double x, double y, COLORREF color)
{
HOBJ hobj = mapCreateObject(mvMap->MapHandle, KM_IDDOUBLE2, 0);
mapRegisterDrawObject(hobj, 0, OL_MARK);
Maptype::TIMGCIRCLE parm;
memset((void*) &parm, 0, sizeof(parm));
parm.Thick = 1200;
parm.Radius = 4000;
parm.Color = color;
mapAppendDraw(hobj, Maptype::IMG_CIRCLE, (char *)&parm);
mapAppendPointPlane(hobj, x, y);
mapCommitObject(hobj);
int key = mapObjectKey(hobj);
mapFreeObject(hobj);
mvMap->GetCenter(position, PP_PLANE);
mvMap->Repaint();
return key;
}
[/CODE]
в форме установлен указатель на массив ключей, пусть вот так
private:
int * keylist; // список с ключами
int count; // число ключей
// добавление нового ключа в список
[CODE]void TForm1::AddKey(int key)
{
int * buff = 0;
GetMem(buff, sizeof(int)*(count+1));
if (count != 0)
memcpy(keylist, buff, sizeof(int)*count));
*(buff+count) = key;
count++;
delete [] keylist;
GetMem(keylist, sizeof(int)*count);
memcpy(buff, keylist, sizeof(int)*count));
delete [] buff;
}[/CODE]
пусть вызывающая функция выглядит так:
[CODE]void TForm1::OnButtonClick(TSender * Sender)
{
int key = CreateNewObject(1000, 2000, clRed);
AddKey(key);
key = CreateNewObject(1000, 2200, clYellow);
AddKey(key);
key = CreateNewObject(1000, 2200, clGreen);
AddKey(key);
}
[/CODE]
тогда код удаления будет выглядеть вот так
[CODE]void TForm1::OnDestroy(TSender * Sender)
{
HOBJ hobj = mapCreateObject(mvMap->MapHandle, KM_IDDOUBLE2, 0);
for (int i=0; i<count;i++)
if (mapSeekSiteObject(mvMap->MapHandle,mvMap->MapHandle, hobj,*(keylist+i)) != 0)
mapDeleteObject(hobj);
mapFreeObject(hobj);
delete[] keylist;
count=0;
}
[/CODE]