// For either the AUTO_SCALE or TRACKING modes, we // may need to schedule a new rendering with a new // mapping. In AUTO_SCALE mode, a new rendering // is needed if _allPointsBBBox != _map.viewPort. // Or in TRACKING mode, it is needed if // _trackingPort != _map.viewPort. BBox *testBox; testBox = (AUTO_SCALE == _viewMode) ? &_allPointsBBox : &_trackingPort; if ( (AUTO_SCALE == _viewMode) && memcmp(&_allPointsBBox, &(_map.viewPort), sizeof(BBox)) ) _render.quePrivateRender(_allPointsBBox, this->size()); // For TRACKING mode, we must also make sure that // the range following has not eaten up all our // resolution. else if ( (TRACKING == _viewMode) && memcmp(&_trackingPort, &(_map.viewPort), sizeof(BBox)) ) { BBox tmpPort; tmpPort = _trackingPort; // Need copy for // rtpResCheck to modify if (!rtpResCheck(&tmpPort)) _render.quePrivateRender(_trackingPort, this->size()); else // Notify user of problem, switch to // USER_FIXED mode. // Mode change must come before message box // to avoid recursion. { _viewMode = USER_FIXED; QMessageBox::warning(this, caption(), "Resolution is insufficient to track new points.\n" "Fixing view port in current position.\n", QMessageBox::Ok | QMessageBox::Default, 0, 0); } }