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

Скрытие отображение объектов в одном слое

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

способ 1 (components)

Код
   private void HideShowObject1(bool selected, axMapObj axMapObj)
        {
            mvMap.ViewSelect.ClearSampleAll();
            mvMap.ViewSelect.SetViewSelect(UserMapSiteNumber);
            mvMap.ViewSelect.SelectSample(selected, "track", axMapObj.Key);
            mvMap.Selecting = true;       //вызовет repaint      
        }
Изменено: Ilya - 25.06.2015 07:41:15
 
Второй способ
Код
private void HideShowObject2(bool selected, axMapObj axMapObj)
{
var mapsite = mvMap.MapSites.Item[UserMapSiteNumber];
int hsite = mapsite.SiteHandle;

//1. создаём контекст поиска 
int hselect = GisCore.mapCreateSiteSelectContext(mvMap.MapHandle, hsite);

if (hselect == 0)
  throw new Exception("не удалось создать контекст поиска/отображения!");

//2. устанавилваем состав изображения
//очистка 
GisCore.mapClearSample(hselect);

//флаг совместной обработки ??
// GisCore.mapSetSampleComplex(hselect, 1);

//нужные объекты скрываем или отображаем в hselect
if (selected)
  GisCore.mapSelectSampleByList(hselect, hsite, axMapObj.Key);
else
{
  GisCore.mapUnselectSampleByList(hselect, hsite, axMapObj.Key);
}

//3. устанавливаем состав отображения для карты 
GisCore.mapSetSiteViewSelect(mvMap.MapHandle, hsite, hselect);

//4. перерисовка карты
mvMap.Repaint();
}

К сожалению не срабатывает ни один из них.
Изменено: Ilya - 25.06.2015 07:41:38
 
Добрый день!
Пример работы поиска/отображения объектов смотрите в FindObj.

Цитата
Пытаюсь скрыть отобразить объекты в рамках одного слоя
- Вы хотите скрыть именно конкретный объект или тип объекта?

Смотрите в примере групповое выделение объектов. В нем рассмотрено выделение объектов на карте, а Вам нужен будет метод mvMap.ViewSelect.SetViewSelect
 
Хочу скрыть конкретный объект.
 
Спасибо за пример, но к сожалению у меня теперь пропадает и основная карта с отображения
Код
   private void HideShowObject2(bool ischecked, axMapObj axMapObj)
        {
            var mapsiteMain = mvMap.MapSites.Item[0];
            var mapsite = mvMap.MapSites.Item[UserMapSiteNumber];
            mvMap.ViewSelect.ClearSampleAll();
            if (!ischecked)
            {
                mvMap.Selecting = true;
                int issamp = 0;

                if (mvMap.ViewSelect.SelectSample(true, mapsite.SiteName, axMapObj.Key) > 0)
                    issamp++;
                mvMap.ViewSelect.SiteNumber = UserMapSiteNumber;
                mvMap.ViewSelect.SetSiteEnabledForSample();                
                mvMap.ViewSelect.SetViewSelect(mapsite.SiteHandle);
                mvMap.Repaint();
            }
            else
            {
                mvMap.Selecting = false;                
                mvMap.ViewSelect.SetSiteEnabledForSample();
                mvMap.ViewSelect.SetViewSelect(mapsiteMain.SiteHandle);                
                mvMap.Repaint();
            }
        }
 
Все получилось.
Теперь я могу отображать 1 объект на выбранном листе

Код
private void HideShowOne(bool show, int key)
{
string sUser = mvMap.MapSites.Item[UserMapSiteNumber].SiteName;
int userSiteHandle = mvMap.MapSites.Item[UserMapSiteNumber].SiteHandle;
            
int issamp = 0;
mvMap.Selecting = true;

if (mvMap.ViewSelect.SelectSample(show, sUser, key) > 0)
  issamp++;

mvMap.ViewSelect.SetViewSelect(userSiteHandle);
int countuser = mvMap.ViewSelect.SelectObjectCount(1);

mvMap.Repaint();
}



Вопрос:
Как мне выключить отображение только у одного объекта?
1. Перебрать все объекты и выставить их видимость через SelectSample(..)
2. По умолчанию добавить все объекты к ViewSelect и выключить только те, которые надо?
 
ClearSampleAll - выполняет очистку списков объектов во всех контекстах условий поиска/отображения, т.е. для всех карт. Поэтому у Вас все объекты исчезали.

Цитата
Ilya пишет:
Как мне выключить отображение только у одного объекта?

Не совсем понятна задача. Что Вы подразумеваете под одним объектом?
Включать/исключать объект из Select'а Вы можете с помощью первого параметра (seting)  метода SelectSample(seting : boolean; listname : string; key : integer).
Применительно к Вашему коду надо
Код
if (mvMap.ViewSelect.SelectSample(show, sUser, key) > 0) 
  issamp++; 
использовать в цикле для всех объектов, которые хотите отключить.
 
Странное поведение.
Если я просто хочу отключить отображение одного объекта

Код
//show = false
if (mvMap.ViewSelect.SelectSample(show, sUser, key) > 0) //возвращается 0!
  issamp++;

, то метод возвращет 0

и не меняется кол-во объектов отображения
Код
int countuser = mvMap.ViewSelect.SelectObjectCount(1); 

если тот же код вызвать с show = true
то тогда только этот объект и останется в отображении.
countuser будет равен 1
Изменено: Ilya - 25.06.2015 17:45:07
 
Тем не менее я свою задачу решил
Просто перебираю все объекты и включаю отображение только у тех кого надо.
 
Есть задачи, в которых нужно временно отключать отображение ОДНОГО объекта.
Применение функций типа "Sample" расточительно, они могут строить огромные списки видимых объектов,
чтобы выключить один объект.

Для этого есть другие функции:
Код
  // Установить номер объекта, который временно (до переоткрытия карты
  // или до восстановления отображения) не будет виден на карте
  // Функция применяется при редактировании отдельного (единственного) объекта
  // в интерактивном режиме
  // info - идентификатор скрываемого объекта

_MAPIMP long int _MAPAPI mapHideSiteObject(HOBJ info);

  // Восстановить отображение объекта (после mapHideSiteObject)
  // Функция обнуляет номер скрываемого объекта и номер листа
  // info - идентификатор восстанавливаемого объекта

_MAPIMP void _MAPAPI mapUnhideSiteObject(HOBJ info);

  // Восстановить отображение объекта (после mapHideSiteObject)
  // Функция обнуляет номер скрываемого объекта и номер листа
  // hMap  - идентификатор открытой карты
  // hSite - идентификатор открытой пользовательской карты (для основной карты равен hMap)

_MAPIMP void _MAPAPI mapClearHideSiteObject(HMAP hMap, HSITE hSite);
Страницы: 1
Читают тему (гостей: 1)



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

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