Как рисовать с использованием ISymbol?

0 голосов
спросил 13 Ноя, 08 от -3A- (5,220 баллов) в категории Программные продукты Esri
Есть примерно такой код:


IGeoFeatureLayerPtr fl(m_Layers[wLayerID]);
if (fl)
{
IFeatureRendererPtr fr = fl->Renderer;
if (fr)
{
    ISimpleRendererPtr sr(fr);
    if (sr)
    {
      ISymbolPtr symbol = sr->Symbol;
      if (symbol)
      {
        int nState = SaveDC(hDC);
        SetMapMode(hDC, MM_TEXT);
        symbol->SetupDC(reinterpret_cast<OLE_HANDLE>(hDC), NULL);
        symbol->Draw(GetGeometry(rc));
        symbol->ResetDC();
        RestoreDC(hDC, nState);

        return S_OK;
      }
    }
}
}


так вот этот код не работает :(
все валится внутри вызова symbol->Draw(...)

что я делаю не так?

ps GetGeometry - это простой метод, создающий из CRect IEnvelope


IGeometryPtr GetGeometry(CRect rc)
{
IEnvelopePtr env(CLSID_Envelope);
env->PutCoords(rc.left, rc.top, rc.right, rc.bottom);

return env;
}

    

1 Ответ

0 голосов
ответил 14 Ноя, 08 от -3A- (5,220 баллов)
если кому интересно, то это очередная баго-фича ArcMap :(

добавил такую строчку:

ILayerPtr layer = m_Layers[wLayerID];
IGeoFeatureLayerPtr fl(layer);
...


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