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

Удаление подобъекта

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

Опять проблема с удалением подобъекта, не удаляется(
Карта находиться на удаленном Panorama GIS Server

Var
i : integer;
res, n : integer;
begin

n := MapObj1.Metric.SubObjCount;
ShowMessage ('n = '+IntToStr(n)); // Здесь все хорошо программа видит сколько подобъектов у объекта, т.е.1

SelectPointsFirst[1].X := xx;
SelectPointsFirst[1].Y := yy;

res := mapSeekNearPoint(form_main.MapObj1.ObjHandle,SelectPointsFirst[1],-1); // Здесь res = 1

ShowMessage ('res1 = '+IntToStr(res));

i := mapGetCurrentSubject(form_main.MapObj1.ObjHandle); // Здесь i = 1, это правильно

ShowMessage ('i = '+IntToStr(i));

form_main.MapEditMetric1.StopAction;
form_main.MapEditMetric1.EditViewStyle := vsContourWithNodes;

// Удаляем подобъект
res := mapDeleteSubject(form_main.MapObj1.ObjHandle,i); // Здесь res = 0, что плохо ((

// res := MapObj1.Metric.Delete(i,-1);

ShowMessage ('res2 = '+IntToStr(res));

MapObj1.Commit;
MapObj1.Repaint;

ShowMessage ('перевывели объект');


mapLogCommitAction(form_main.mvMap.MapHandle, form_main.mvMap.MapSites[0].SiteHandle);
mvMap.Repaint;

// Результат: подобъект не удалился
 
Для начала стоит убедиться, что карта вам доступна для редактирования (см. mapGetSiteEditFlag).
Код
  // Запросить - может ли карта редактироваться
  // hMap  - идентификатор открытой карты
  // hSite - идентификатор открытой пользовательской карты
  // Если нет - возвращает ноль

  _MAPIMP long int _MAPAPI mapGetSiteEditFlag(HMAP hMap,HSITE hSite);
 
Да, карта доступна для редактирования:

Var
i : integer;
res, n : integer;
begin

n := MapObj1.Metric.SubObjCount;
ShowMessage ('n = '+IntToStr(n)); // Здесь все хорошо программа видит сколько подобъектов у объекта

res := mapGetSiteEditFlag(form_main.mvMap.MapHandle,form_main.mvMap.MapHandle); // Здесь res = 1

ShowMessage ('res0 = '+IntToStr(res));

SelectPointsFirst[1].X := xx;
SelectPointsFirst[1].Y := yy;
res := mapSeekNearPoint(form_main.MapObj1.ObjHandle,SelectPointsFirst[1],-1);

ShowMessage ('res1 = '+IntToStr(res));

i := mapGetCurrentSubject(form_main.MapObj1.ObjHandle);

ShowMessage ('i = '+IntToStr(i));

form_main.MapEditMetric1.StopAction;
form_main.MapEditMetric1.EditViewStyle := vsContourWithNodes;
// Удаляем подобъект
res := mapDeleteSubject(form_main.MapObj1.ObjHandle,i);

// res := MapObj1.Metric.Delete(i,-1);

ShowMessage ('res2 = '+IntToStr(res));

MapObj1.Commit;
MapObj1.Repaint;

ShowMessage ('перевывели объект');


mapLogCommitAction(form_main.mvMap.MapHandle, form_main.mvMap.MapSites[0].SiteHandle);
mvMap.Repaint;

Результат: подобъект не удалился.
Что еще можно попробовать?
 
Цитата
Сергей Викторович написал:
form_main.MapEditMetric1.StopAction;
form_main.MapEditMetric1.EditViewStyle := vsContourWithNodes;

Возможно, что-то происходит, когда отрабатывает этот код.
Например, в обработчике OnStopAction могут быть какие-то операции, после которых MapObj1 содержит уже не то, что в нем было, когда Вы запрашивали информацию о подобъекте.
 
Цитата
Денис Вицко написал:
Например, в обработчике OnStopAction могут быть какие-то операции, после которых MapObj1 содержит уже не то, что в нем было, когда Вы запрашивали информацию о подобъекте.
Да, дело было как раз в этом.
В конце процедуры, обрабатывающей событие OnStopAction, была функция, не понятно, зачем я ее вообще туда разместил.
Сейчас убрал ее, теперь все нормально.
Подобъект удаляется хорошо.
Спасибо.  
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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