Всем здравствуйте!
Нарисовалась неожиданная проблема с рисованием в метафайл.
Почему-то 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), все рисуется хорошо
Как только прямоугольник становится больше экрана - вывод обрезается по границе. То есть в метафайл не рисуется картинка, лежащая ниже и правее экрана.
Как с этим бороться?