Проблемы с рисованием в метафайл

0 голосов
спросил 30 Окт, 08 от -3A- (5,220 баллов) в категории Программные продукты Esri
    Всем здравствуйте!

Нарисовалась неожиданная проблема с рисованием в метафайл.
Почему-то ArcGIS рисует только в границах экрана, все, что лежит за ними - обрезается.

Примерно вот такой код:

IDisplayPtr display(CLSID_SimpleDisplay);
if (display->StartDrawing(reinterpret_cast<OLE_HANDLE>(m_hDC), esriNoScreenCache) == S_OK)
{
display->PutSuppressEvents(VARIANT_TRUE);

IDisplayTransformationPtr dtr = display->GetDisplayTransformation();

dtr->PutDeviceFrame(rcDeviceFrame);

IEnvelopePtr env(CLSID_Envelope);
env->PutCoords(m_drcBounds.top, m_drcBounds.left, m_drcBounds.bottom, m_drcBounds.right);
dtr->PutVisibleBounds(env);

IEnumLayerPtr el = m_pMap->GetLayers(0, true);
el->Reset();

ITrackCancelPtr trc(CLSID_TrackCancel);

ISpatialFilterPtr sflt(CLSID_SpatialFilter);
sflt->PutRefGeometry(env);
sflt->PutGeometryField("SHAPE");
sflt->PutSpatialRel(esriSpatialRelEnvelopeIntersects);
sflt->AddField(L"SHAPE");

ILayerPtr layer;
VARIANT_BOOL bContinue = VARIANT_TRUE;
while ((layer = el->Next()) != NULL && bContinue == VARIANT_TRUE)
{
    IGeoFeatureLayerPtr fl(layer);
    if (fl)
    {
      IFeatureCursorPtr fcc = fl->GetFeatureClass()->Search(sflt, true);
      if (fcc)
      {
        fl->GetRenderer()->Draw(fcc, esriDPGeography, display, trc);
        bContinue = trc->Continue();
      }
    }
}

display->FinishDrawing();
}


m_drcBounds - это координаты на местности (в метрах)
m_rcDeviceFrame - это прямоугольник в метафайле (в пикселах)

Пока ширина и высота m_rcDeviceFrame в пределах разрешения экрана (в моем случае 1280х1024), все рисуется хорошо
Как только прямоугольник становится больше экрана - вывод обрезается по границе. То есть в метафайл не рисуется картинка, лежащая ниже и правее экрана.

Как с этим бороться?
    
    

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

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