На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Нанесение точечного объекта

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Нанесение точечного объекта
 
Здравствуйте уважаемые участники форма. Создаю в программе объект последовательным вызовом функций mapCreateSiteObject ( ), mapRegisterDrawObject( ), затем добавляю точки
методом appendPoint. Но какую бы локализацию в функции mapRegisterDrawObject( ) не задавал - OL_mark, OL_Line, все равно получается линия, а нужны только точки без соединения линией. Что
это может быть?
И еще просьба подсказать каким образом следует объявить и заполнить структуру Parm в Delphi, чтобы можно было менять цвет и размер наносимых объектов. Никак не получается. Сейчас рисую без нее. Возможно, там что-то по умолчанию установлено.
Спасибо.
 
Варианты
Вариант 1 (тот который Вы хотите)
Код
procedure TForm1.Button1Click(Sender: TObject);
var obj  : HObj;
    mark : TIMGMARK; // описание объекта типа "точка"
{
где
 TIMGMARK = packed record               // (137) ТОЧЕЧНЫЙ РАСТРОВЫЙ ОБ'ЕКТ  (size = 16 + 128 = 144)
  Color : TColor;                       // Цвет знака
  Size  : cardinal;                     // Размер в микронах (для печати)
  PosV  : cardinal;                     // Точка привязки знака PosV,PosH < Size
  PosH  : cardinal;                     //  (для IMGSQUAREMARK - шаг сетки >= Size
  case byte of
    0: (Bits  : array [0..127] of byte);    // Растровое изображение 32x32 с верхнего угла
    1: (Rows  : array [0..31] of Cardinal);
 end;

}
begin
  FillChar(mark, sizeof(TIMGMARK), 0); // чистим
  mark.Color := clRed;  // устанавливаем цвет ТУТ МЕНЯЕТСЯ ЦВЕТ !
  mark.Size  := 5000;   // устанавливаме размер в микрона - это 5 мм на карте
  mark.PosV  := 0;    mark.PosH  := 0; //точка привязки знака в 32х32 битной матрице
  mark.Rows[0] := $F0FF0000;  // первая строка рисунка
  mark.Rows[1] := $10800000;  // вторая строка рисунка
  mark.Rows[2] := $10800000;
  mark.Rows[3] := $10800000;
  mark.Rows[4] := $10800000;
  mark.Rows[5] := $F0FF0000;  // крайняя строка рисунка

  obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
  mapRegisterDrawObject(obj, 0, OL_MARK); // регистрируем его в системном слое как точка
  mapAppendDraw(obj, IMG_MARK, @mark); // присоединяем наше описание
  mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики (это верхниё левый угол карты Ногиснка из примера)
  mapCommitObject(obj); // записываем на карту
  mapFreeObject(obj); // освобождаем болванку

  MapScreen1.Repaint; // переписовка
end;

Вариант 2
Берём описание объекта из классификатора
Код
var obj  : HObj;
    rsc  : HRsc;
    parm : TIMGSUBPRIMITIVE; // тип - объединённый указатель примитивов
    func, incode : integer;
begin
  Rsc    := mapGetRscIdent(MapScreen1.MapHandle, MapScreen1.MapHandle);
  incode := mapGetRscObjectCodeByNumber(Rsc, 31332000, OL_MARK, 1);    // скалы надводные берём номер объекта в классфикаторе
  func   := mapGetRscObjectFunction(Rsc, incode);  // берём код функции отрисовки
  parm.Address :=  mapGetRscObjectParameters(Rsc, incode); // берём описание (тот PARM который Вы спрашивали в стартпосте)

  obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
  mapRegisterDrawObject(obj, 0, OL_MARK); // регистрируем его в системном слое как точка
  mapAppendDraw(obj, IMG_MARK, @mark); // присоединяем наше описание
  mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики (это верхниё левый угол карты Ногиснка из примера)
  mapCommitObject(obj); // записываем на карту
  mapFreeObject(obj); // освобождаем болванку

  MapScreen1.Repaint; // переписовка
end;
Вариант 3
Работа с обычным объектом
Код
var obj  : HObj;
begin
  obj := mapCreateSiteObject(MapScreen1.MapHandle, MapScreen1.MapHandle); // создаём объект на карте
  mapRegisteObject(obj, 31332000, OL_MARK); // регистрируем его в системном слое объект классификатора 
  mapAppendPointPlane(obj, 6215000, 7444000, 0); // добавляем точку метрики 
  mapAppendSemanticLong(obj, 31002, $000000FF);  // через служебную семантику "ЦВЕТ" назначаем объекту цвет (это красный)
  mapAppendSemanticLong(obj, 31001, 80);  // через служебную семантику "РАСТЯЖЕНИЕ в %" сжимаем его до 80%
  mapCommitObject(obj); // записываем на карту
  mapFreeObject(obj); // освобождаем болванку
  MapScreen1.Repaint; // переписовка
end;
Какой вариант приемлем Вам - придётся выбирать самому =)
Изменено: KFF - 24.02.2018 22:48:58
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Спасибо, реализовал что-то среднее между 2 и 3 вариантом - на каждую точку создается контейнер (болванка), добавляется точечный объект и затем контейнер уничтожается. Одновременно ключ (key)  каждой точки записывается в массив, чтобы потом удалить их перед построением новых. С параметрами (parm) тоже все ясно. Еще раз спасибо, очень выручили.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности