//------------------------------------------------------------------------------ // updateData() - updates the values //------------------------------------------------------------------------------ void MapPage::updateData(const LCreal dt) { // find our nearest map page above us and get the data from it! MapPage* page = static_cast<MapPage*>(findContainerByType(typeid(MapPage))); if (page != nullptr) { setHeadingDeg(page->getHeadingDeg()); setDisplacement(page->getDisplacement()); setReferenceLatDeg(page->getReferenceLatDeg()); setReferenceLonDeg(page->getReferenceLonDeg()); setOuterRadius(page->getOuterRadius()); setOuterRadiusDC(page->getOuterRadiusDC()); setCentered(page->getCentered()); setRange(page->getRange()); setNorthUp(page->getNorthUp()); nm2Screen = page->getScale(); } // if we are the top map page, we do the calculations ourself else { // determine if we are centered or not, and set our displacement and radius accordingly if (isCentered) nm2Screen = outerRadius / range; else nm2Screen = outerRadiusDC / range; } // update base class stuff BaseClass::updateData(dt); }
//------------------------------------------------------------------------------ // Moves our reference lat lon based on the distance moved. //------------------------------------------------------------------------------ void MapPage::moveMap(const int startX, const int startY, const int endX, const int endY) { double eLat = 0, eLon = 0, lat = 0, lon = 0, sLat = 0, sLon = 0, deltaLat = 0, deltaLon = 0; // figure our lat/lon positioning pixelsToLatLon(startX, startY, sLat, sLon); pixelsToLatLon(endX, endY, eLat, eLon); // get our delta movement deltaLat = sLat - eLat; deltaLon = sLon - eLon; lat = getReferenceLatDeg(); lon = getReferenceLonDeg(); lat += deltaLat; lon += deltaLon; // As the world turns.... we need to flip the maps! if (lon > 180) lon = -180; else if (lon < -180) lon = 180; if (lat > 90) lat = -90; else if (lat < -90) lat = 90; setReferenceLatDeg(lat); setReferenceLonDeg(lon); }
void Display::mouseMotionEvent(const int x, const int y) { if (dragging) { const auto page = static_cast<MapPage*>(subpage()); if (page != nullptr) { // get our ref lat, because we won't go passed 70 degrees lat (either way); const double lat = page->getReferenceLatDeg(); if (lat < 70 && lat > -70) { page->moveMap(startX, startY, x, y); } else { if (lat > 0) page->setReferenceLatDeg(65); else page->setReferenceLatDeg(-65); } startX = x; startY = y; } } setMouse(x, y); }
//------------------------------------------------------------------------------ // setSlotRefLat() - sets ref lat from slot //------------------------------------------------------------------------------ bool MapPage::setSlotRefLat(const Basic::Number* const x) { bool ok = false; if (x != nullptr) ok = setReferenceLatDeg(x->getDouble()); return ok; }
//------------------------------------------------------------------------------ // onUpdateReferenceLat() - set our new reference latitude //------------------------------------------------------------------------------ bool MapPage::onUpdateReferenceLat(const Basic::Number* const newOL) { bool ok = false; if (newOL != nullptr) ok = setReferenceLatDeg(newOL->getDouble()); return ok; }