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

Создание подобъекта

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Создание подобъекта, Создание подобъекта
 
Здравствуйте!

При такой реализации:

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
i,pc : integer;
px,py : double;
begin
If (MapObj1 <> nil) and (MapObj3 <> nil)
then begin
MapObj1.Metric.SubObjCount := 1;
pc := MapObj3.Metric.PointCount[0];
 For i := 1 to pc do
 begin
 px := MapObj3.Metric.Points[0,i].X;
 py := MapObj3.Metric.Points[0,i].Y;
 mapAppendPointPlane(MapObj1.ObjHandle,px,py,0);
 end;
end;

MapObj1.Commit(); // запишем объект
mvMap.Repaint;

ShowMessage ('готово');
end;

в результате появляется соединение последней точки подобъекта с первой точкой основного объекта.
Что-то я делаю не правильно.
Большая просьба подсказать, что не так?
 
Где по Вашему коду перебор подобъектов?

Вы и из MapObj3 читаете основной контур, и в MapObj1 пишете в основной контур.

Рекомендую не смешивать использование свойств и методов компонентов с низкоуровневым вызовом MAPAPI там,  где нужная функциональность есть компонентах.
Меньше будет путаницы.

И внимательно смотрите на описание параметров функций, которые Вы вызываете.

mapAppendPointPlane:

Цитата
// Добавить в конец метрики объекта точку
// info    - идентификатор объекта карты в памяти
// x,y     - координаты точки в метрах
// subject - номер подобъекта (если = 0, обрабатывается объект)
// Значение координат задано в метрах на местности
// Для изменения координаты Н необходимо далее
// выполнить функцию SetHPlane(...)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapAppendPointPlane(HOBJ info,double x,double y,
                                            long int subject = 0);
 
Согласен, что совместное использование визуальных компонентов и функций mapapi не очень хороший стиль в программирование,
но пока осваиваю, думаю это не криминал.

По поводу четвертого параметра согласен, я пропустил его, сейчас поставил 1 и для создание одного подобъекта все работает хорошо.

Сразу вопрос по диспетчеризированию этими самыми подобъектами:

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
i,pc,k   : integer;
px,py    : double;
subcount : integer;
begin
MapObj1.Metric.SubObjCount := 1; // Визуальный объект, который редактируется

subcount := mapPolyCount(MapObj1.ObjHandle);
ShowMessage ('subcount = '+IntToStr(subcount)); // Не могу понять, почему при отсутствии подобъектов, выдается число 2 ? Ожидается 0

pc := MapObj3.Metric.PointCount[0]; // Визуальный объект резак

For i := 1 to pc do
begin
px := MapObj3.Metric.Points[0,i].X;
py := MapObj3.Metric.Points[0,i].Y;
k := mapAppendPointPlane(MapObj1.ObjHandle,px,py,subcount+1);
ShowMessage ('i = '+IntToStr(i));
ShowMessage ('k = '+IntToStr(k));
ShowMessage ('px = '+FloatToStr(px));
ShowMessage ('py = '+FloatToStr(py));
end;

MapObj1.Commit(); // запишем объект
mvMap.Repaint;

ShowMessage ('готово');
end;
 
Будьте внимательнее с методами, которые Вы вызываете. Убедитесь, что вызываемый метод соответствует тому действию, которое Вам необходимо.
Цитата
Сергей Викторович написал:
MapObj1.Metric.SubObjCount := 1; // Визуальный объект, который редактируется

Этот метод устанавливает количество подобъектов,  а не определяет текущий!
Если подобъектов было меньше заданного числа, они создадутся.
Если больше - лишние удалятся!


Цитата
Сергей Викторович написал:
subcount := mapPolyCount(MapObj1.ObjHandle); // Не могу понять, почему при отсутствии подобъектов, выдается число 2 ? Ожидается 0

А эта MAPAPI функция возвращает количество контуров. 1 основной контур + тот, который Вы создали, вызвав метод выше, = 2.
 
Вроде работает, спасибо.

Может кому понадобиться код создания подобъектов:

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
i,pc,k   : integer;
px,py    : double;
n : integer;
begin
n := MapObj1.Metric.SubObjCount;
MapObj1.Metric.SubObjCount := n+1;
n := MapObj1.Metric.SubObjCount;

pc := MapObj3.Metric.PointCount[0];
For i := 1 to pc do
begin
px := MapObj3.Metric.Points[0,i].X;
py := MapObj3.Metric.Points[0,i].Y;
k := mapAppendPointPlane(MapObj1.ObjHandle,px,py,n);
ShowMessage ('i = '+IntToStr(i));
ShowMessage ('k = '+IntToStr(k));
ShowMessage ('px = '+FloatToStr(px));
ShowMessage ('py = '+FloatToStr(py));
end;

MapObj1.Commit(); // запишем объект
mvMap.Repaint;

ShowMessage ('готово');

end;
Страницы: 1
Читают тему (гостей: 1)



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

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