Доброе утро.
Александр, благодарю Вас за ответы.
На текущий момент научился рисовать эллипс "в лоб":
[CODE] this->MyMap = this->ui.DMapView1->GetMapHandle();
this->hMapper = mapCreateAndAppendTempSite(MyMap, "./map/Topo100t.rsc");
HOBJ ellipseObj = mapCreateSiteObject(this->MyMap, this->hMapper, IDDOUBLE2, 0);
mapRegisterDrawObject(ellipseObj, 21, LOCAL_LINE);
IMGSQUARE square;
square.Color = RGB( _redValue, _greenValue, _blueValue );
mapAppendDraw( ellipseObj, IMG_SQUARE, reinterpret_cast<const char*>(&square) );
double A, dA;
dA = M_PI / 180.0;
A = 0.0;
double buferX, buferY, newX, newY;
double radAngle = degreeAngle / 180.0 * M_PI;
while (A <= 2 * M_PI)
{
// Вычисление координат точки эллипса.
buferX = _rb * cos(A) + _centerX;
buferY = -_ra * sin(A) + _centerY;
// Поворот точки эллипса на заданный угол.
newX = ( buferX - _centerX ) * cos(radAngle) - ( buferY - _centerY ) * sin(radAngle) + _centerX;
newY = ( buferX - _centerX ) * sin(radAngle) + ( buferY - _centerY ) * cos(radAngle) + _centerY;
// Добавление точки.
mapAppendPointPlane(ellipseObj, newX, newY);
A = A + dA;
}
mapCommitObject(ellipseObj);
ui.DMapView1->UpdatePictureBorderForAll();
ui.DMapView1->repaint();[/CODE]
Возникли следующие вопросы:
1. В какой слой добавляется эллипс на самом деле? В методе mapRegisterDrawObject я
указываю слой 21 (В моём случае это заполняющие знаки). При этом если с помощью QDMapSelectDialog убрать какой-нибудь другой слой,
а слой 21 оставить, то эллипс всё равно пропадает.
2. Начиная с определённого масштаба эллипс перестаёт рисоваться в силу своей малости. Как определить программно, что эллипс перестал рисоваться?
3. При закрытии карты эллипс не сохраняется. Как его сохранить на карте?
P.S. Теоретический вопрос - чем пользовательские карты (*.sit) отличаются от не пользовательских (*.map).
P.P.S. Существует ли учебник или методическое пособие по ГИС конструктору?
Или кроме того, что выложено на сайте, больше ничего нет?
Александр, благодарю Вас за ответы.
На текущий момент научился рисовать эллипс "в лоб":
[CODE] this->MyMap = this->ui.DMapView1->GetMapHandle();
this->hMapper = mapCreateAndAppendTempSite(MyMap, "./map/Topo100t.rsc");
HOBJ ellipseObj = mapCreateSiteObject(this->MyMap, this->hMapper, IDDOUBLE2, 0);
mapRegisterDrawObject(ellipseObj, 21, LOCAL_LINE);
IMGSQUARE square;
square.Color = RGB( _redValue, _greenValue, _blueValue );
mapAppendDraw( ellipseObj, IMG_SQUARE, reinterpret_cast<const char*>(&square) );
double A, dA;
dA = M_PI / 180.0;
A = 0.0;
double buferX, buferY, newX, newY;
double radAngle = degreeAngle / 180.0 * M_PI;
while (A <= 2 * M_PI)
{
// Вычисление координат точки эллипса.
buferX = _rb * cos(A) + _centerX;
buferY = -_ra * sin(A) + _centerY;
// Поворот точки эллипса на заданный угол.
newX = ( buferX - _centerX ) * cos(radAngle) - ( buferY - _centerY ) * sin(radAngle) + _centerX;
newY = ( buferX - _centerX ) * sin(radAngle) + ( buferY - _centerY ) * cos(radAngle) + _centerY;
// Добавление точки.
mapAppendPointPlane(ellipseObj, newX, newY);
A = A + dA;
}
mapCommitObject(ellipseObj);
ui.DMapView1->UpdatePictureBorderForAll();
ui.DMapView1->repaint();[/CODE]
Возникли следующие вопросы:
1. В какой слой добавляется эллипс на самом деле? В методе mapRegisterDrawObject я
указываю слой 21 (В моём случае это заполняющие знаки). При этом если с помощью QDMapSelectDialog убрать какой-нибудь другой слой,
а слой 21 оставить, то эллипс всё равно пропадает.
2. Начиная с определённого масштаба эллипс перестаёт рисоваться в силу своей малости. Как определить программно, что эллипс перестал рисоваться?
3. При закрытии карты эллипс не сохраняется. Как его сохранить на карте?
P.S. Теоретический вопрос - чем пользовательские карты (*.sit) отличаются от не пользовательских (*.map).
P.P.S. Существует ли учебник или методическое пособие по ГИС конструктору?
Или кроме того, что выложено на сайте, больше ничего нет?