Esempio n. 1
0
//! 显示数据集。
BOOL CDrawing::DrawVector(CDC* pDC, OgdcDatasetVector* pDatasetV)
{
    OGDCASSERT(!OGDCIS0(m_dCoordRatio) && !m_rcClient.IsRectEmpty());

    OgdcQueryDef queryDef;
    queryDef.m_nType = OgdcQueryDef::Bounds;
    queryDef.m_nOptions = OgdcQueryDef::Geometry;
    queryDef.m_nCursorType = OgdcQueryDef::OpenStatic;
    queryDef.m_nCursorLocation = OgdcQueryDef::UseClient;
    queryDef.m_rc2Bounds = m_rcViewBounds;

    OgdcRect2D rcDtBounds = pDatasetV->GetBounds();
    double dSearchArea = m_rcViewBounds.Width() * m_rcViewBounds.Height();
    double dDatasetArea = rcDtBounds.Width() * rcDtBounds.Height();
    if(dSearchArea >= dDatasetArea*0.6)
    {
        queryDef.m_rc2Bounds = rcDtBounds;
    }

    OgdcRecordset* pRecordset = pDatasetV->Query(queryDef);
    if(pRecordset != NULL)
    {
        OgdcElement* pElement = NULL;
        pRecordset->Move(OgdcRecordset::Begin, 0);
        while(!pRecordset->IsEOF())
        {
            if(pRecordset->GetElement(pElement) && pElement != NULL)
            {
                DrawElement(pDC, pElement);
            }
            else//断网情况下避免长时间等待 http://192.168.115.2:8090/browse/UGC-4322
            {
                break;
            }

            pRecordset->Move();

            if(pElement != NULL)
            {
                delete pElement;
                pElement = NULL;
            }
        }

        pDatasetV->ReleaseRecordset(pRecordset);
        pRecordset = NULL;
    }
    return TRUE;
}