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();
}
Все получилось. Теперь я могу отображать 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++;
использовать в цикле для всех объектов, которые хотите отключить.
Есть задачи, в которых нужно временно отключать отображение ОДНОГО объекта. Применение функций типа "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);