Рисование объектов TOC в своем приложении

0 голосов
спросил 20 Июль, 07 от -3A- (5,220 баллов) в категории Программные продукты Esri
Всем доброго времени суток!

Мне нужно в своем приложении рисовать объекты из баз данных ArcGIS.
Прежде всего интересует возможность отображения объектов в дереве слоев.
Текстовые описания я получить смог через IDataset, а вот какие интерфейсы дергать, чтобы отобразить условные знаки, соответствующие слоям?

Если не трудно, киньте в меня каким-нибудь примерчиком.
Или назовите имена интерфейсов / классов, которые пригодятся в данном случае.

Надеюсь, понятно объяснил, что мне нужно.

Заранее спасибо image

12 Ответы

0 голосов
ответил 20 Июль, 07 от Dorofeev1 (6,460 баллов)
если у вас куплен компонент edn designer, то можно подключить esriTOC в вашу форму (Table of contents) в ней будет отображаться дерево слоев как в ArcMAP
    
0 голосов
ответил 20 Июль, 07 от Mitrich (13,680 баллов)
а если не куплен, то может быть поможет AOTOC
http://arcscripts.esri.com/details.asp?dbid=12119

правда он еще для 8.х был написан, но работал (я пользовался). Может для простых задач его и хватит.
0 голосов
ответил 21 Июль, 07 от -3A- (5,220 баллов)
Dorofeev
Mitrich

Спасибо за инфу.
Но это не то, что мне нужно.
Дело в том, что у меня есть свое дерево, и слои из баз ArcGIS - это только часть.
Поэтому мне нужны просто методы, позволяющие как-то получить данные о внешнем виде элементов слоя. Позволяет же ArcGIS рисовать данные в произвольный контекст устройства (это следующий шаг, который мне нужно реализовать).
Так что контролы ArcGIS меня не устраивают, увы :(
0 голосов
ответил 21 Июль, 07 от Alexander1 (32,520 баллов)
... а вот какие интерфейсы дергать, чтобы отобразить условные знаки, соответствующие слоям?...

    
Ключевое слово "Renderer". Удачи.
0 голосов
ответил 23 Июль, 07 от -3A- (5,220 баллов)
Спасибо за инфу - буду копать

А вот тогда еще вопрос, для рисования я использую примерно следущий код (это пока заготовка - только начал)


IDisplayPtr display(CLSID_SimpleDisplay);
if (display->StartDrawing(hDC, esriNoScreenCache) == S_OK)
{
ISimpleRendererPtr sr(CLSID_SimpleRenderer);
IFeatureRendererPtr fr;
if (sr->QueryInterface(&fr) == S_OK)
{
    IEnvelopePtr envelope(CLSID_Envelope);
    envelope->PutCoords(m_drcBounds.left, m_drcBounds.top, m_drcBounds.right, m_drcBounds.bottom);

    ISpatialFilterPtr sflt(CLSID_SpatialFilter);
    sflt->putref_Geometry(envelope);

    for (size_t i = 0; i < m_Layers.size(); ++i)
    {
      IDataset* ds = m_Layers(i);

      IFeatureClassPtr fcl;
      if (ds->QueryInterface(&fcl) == S_OK)
      {
        IFeatureCursorPtr fcc;
        if (fcl->Search(sflt, false, &fcc) == S_OK)
        {
          fr->Draw(fcc, esriDPGeography, display, NULL);
        }
      }
    }
}

display->FinishDrawing();
}


Метод Draw возвращает E_FAIL, как узнать - почему? IErrorInfo здесь не работает.
При этом метод Search точно возвращает данные - если явно енумеровать - возвращаются нормальные объекты

ps Извините, если что не так и вопросы глупые - с ArcGIS работаю недавно. До этого как-то не приходилось сталкиваться.
0 голосов
ответил 24 Июль, 07 от -3A- (5,220 баллов)
неужели никто не знает, как самостоятельно можно нарисовать данные из ArcGIS в свом приложении?
0 голосов
ответил 24 Июль, 07 от Tatkis (2,420 баллов)
Просто не очень понятен вопрос. Если нужны именно символы, то попробуйте использовать интерфейс ISymbol и ему подобные.
0 голосов
ответил 24 Июль, 07 от -3A- (5,220 баллов)
проблема вот в чем: есть мое приложение, оно позволяет отображать данные разных форматов, в том числе и ArcGIS.
нужно:
1. интегрировать дерево слоев из ArcGIS в мое дерево (в принципе, это более-менее сделано, не хватает только графического представления ArcGIS-овских слоев в дополнение к текстовому описанию - но это и не обязательно).
2. отображать данные на карте, причем эти данные могут объединяться с данными других форматов (наподобие mxd-файла ArcGIS).

вот с п.2 и выходит морока - данные из ArcGIS я никак не могу отобразить, так как

1. не получается вывести карту через IFeatureRenderer
его метод Draw всегда возвращает E_FAIL

2. через IFeatureDraw::Draw тоже ничего не выводится. хотя в этом случае возвращается S_OK

или может я не туда копаю? и как-то по-другому можно делать?

самое печальное, что документация ESRI о способах применения своих интерфейсов очень мало что говорит :(
    
0 голосов
ответил 24 Июль, 07 от Alexander1 (32,520 баллов)
... есть мое приложение, оно позволяет отображать данные разных форматов, в том числе и ArcGIS.
нужно:

...2. отображать данные на карте, причем эти данные могут объединяться с данными других форматов (наподобие mxd-файла ArcGIS).

вот с п.2 и выходит морока - данные из ArcGIS я никак не могу отобразить...



Я так понимаю, в своём прилижении ты сумел создать Custom Display Object который без проблем draws all map contents, поддерживает transformations и тд.... И сейчас проблема только в ТОС? Или проблема как раз в том, чтобы создать Display Object?

0 голосов
ответил 25 Июль, 07 от -3A- (5,220 баллов)

Я так понимаю, в своём прилижении ты сумел создать Custom Display Object который без проблем draws all map contents, поддерживает transformations и тд.... И сейчас проблема только в ТОС? Или проблема как раз в том, чтобы создать Display Object?


Вот как раз этого я и не сумел.
То есть Display Object создается без проблем, но нарисовать через него я ничего не могу.
Не работают ни IFeatureRenderer::Draw, ни IFeatureDraw::Draw, ни IDisplay::DrawXXX.

Мне вообще непонятно: можно использовать интерфейсы рисования ArcGIS (типа IFeatureRenderer, IDisplay и т.д.) вне ArcMap или нельзя?
И если можно - то как?
Было бы неплохо поиметь какой-нибудь примерчик, пусть даже самый примитивный - типа диалога с owner-drawn кнопкой, на которую рисуется карта.

Все, что есть в доках - это примеры расширений самой среды ArcGIS. А мне это не нужно.
    
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...