Altitude ReachableList::getArrivalAltitude( const QPoint& position ) { // qDebug("name: %s: %d", (const char *)name, arrivalAltMap[name] ); if ( arrivalAltMap.contains( coordinateString ( position ) ) ) { return (Altitude( arrivalAltMap[ coordinateString ( position ) ]) - safetyAlt) ; } return Altitude(); //return an invalid altitude }
void BMP085NB::pollData (int *temperature, long *pressure, float *alti) { switch (pressureState){ case 0: pressureState = 1; newData = false; timer = millis(); StartUT(); break; case 1: if (millis() - timer >= 5) { pressureState = 2; ut = ReadUT(); *temperature = Temperature(ut); } break; case 2: timer1 = millis(); StartUP(); pressureState = 3; break; case 3: if (millis() - timer1 >= 2 + (3<<OSS)) { up = ReadUP(); *pressure = Pressure(up); *alti = Altitude(*pressure); newData = true; pressureState = 0; } break; default: break; } }
void CAltitude::RenderHeightMap(PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB, PFNGLACTIVETEXTUREARBPROC glActiveTextureARB, GLuint* heightMapTexture) { glMatrixMode(GL_PROJECTION); glPushMatrix(); glTranslatef(0, 0, -3.0f); for (int x = 0; x < (MAP_SIZE - STEP_SIZE); x += STEP_SIZE) for (int y = 0; y < (MAP_SIZE - STEP_SIZE); y += STEP_SIZE) { float x_0 = float(x) / MAP_SIZE; float x_1 = float(x + STEP_SIZE) / MAP_SIZE; float y_0 = float(y) / MAP_SIZE; float y_1 = float(y + STEP_SIZE) / MAP_SIZE; glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, heightMapTexture[0]);//terrain.png glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, heightMapTexture[1]);//detail.bmp glBegin(GL_QUADS); //左上点 glMultiTexCoord2fARB(GL_TEXTURE0_ARB, x_0, y_0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 0.0f); glVertex3i(x, Altitude(x, y), y); //左下点 glMultiTexCoord2fARB(GL_TEXTURE0_ARB, x_0, y_1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 1.0f); glVertex3i(x, Altitude(x, y + STEP_SIZE), y + STEP_SIZE); //右下点 glMultiTexCoord2fARB(GL_TEXTURE0_ARB, x_1, y_1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 1.0f); glVertex3i(x + STEP_SIZE, Altitude(x + STEP_SIZE, y + STEP_SIZE), y + STEP_SIZE); //右上点 glMultiTexCoord2fARB(GL_TEXTURE0_ARB, x_1, y_0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 0.0f); glVertex3i(x + STEP_SIZE, Altitude(x + STEP_SIZE, y), y); glEnd(); } glActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE0_ARB); glPopMatrix(); }
void PreFlightMiscPage::save() { GeneralConfig *conf = GeneralConfig::instance(); IgcLogger *log = IgcLogger::instance(); if( m_chkLogAutoStart->isChecked() ) { if ( ! log->getIsLogging() ) { // Change logger mode to standby only, if logger is not on. log->Standby(); } } else { if (log->getIsStandby()) { log->Stop(); } } conf->setLoggerAutostartMode( m_chkLogAutoStart->isChecked() ); // @AP: Store altitude always as meter. if (m_altUnit == Altitude::meters) { conf->setSafetyAltitude(Altitude(m_edtMinimalArrival->value())); } else { Altitude currentAlt; // Altitude will be converted to feet currentAlt.setFeet((double) m_edtMinimalArrival->value()); conf->setSafetyAltitude(currentAlt); } conf->setArrivalAltitudeDisplay( (GeneralConfig::ArrivalAltitudeDisplay) m_edtArrivalAltitude->itemData(m_edtArrivalAltitude->currentIndex()).toInt() ); conf->setQNH(m_edtQNH->value()); conf->setLDCalculationTime(m_edtLDTime->value()); conf->setBRecordInterval(m_bRecordInterval->value()); conf->setKRecordInterval(m_kRecordInterval->value()); if( m_loadedSpeed != m_logAutoStartSpeed->value() ) { Speed speed; speed.setValueInUnit( m_logAutoStartSpeed->value(), m_speedUnit ); // store speed in Km/h GeneralConfig::instance()->setAutoLoggerStartSpeed( speed.getKph() ); } }
/** * Calculate course, distance and reachability from the current position * to the elements contained in the limited list. If a glider is defined * the glide path is taken into account and the arrival altitude is * calculated too. */ void ReachableList::calculateDataInList() { // QTime t; // t.start(); int counter = 0; setInitValues(); arrivalAltMap.clear(); distanceMap.clear(); for (int i = 0; i < count(); i++) { // recalculate Distance ReachablePoint& p = (*this)[i]; WGSPoint pt = p.getWaypoint()->wgsPoint; Altitude arrivalAlt; Distance distance; Speed bestSpeed; distance.setKilometers( MapCalc::dist(&lastPosition, &pt) ); if ( lastPosition == pt || distance.getMeters() <= 100.0 ) { // @AP: there is nearly no difference between the two points, // therefore we have no distance and no bearing distance.setMeters(0.0); p.setDistance( distance ); p.setBearing( 0 ); p.setArrivalAlt( calculator->getAltitudeCollection().gpsAltitude ); } else { p.setDistance( distance ); // recalculate Bearing p.setBearing( short (rint(MapCalc::getBearingWgs(lastPosition, pt) * 180/M_PI)) ); // Calculate glide path. Returns false, if no glider is known. calculator->glidePath( p.getBearing(), p.getDistance(), Altitude(p.getElevation()), arrivalAlt, bestSpeed ); // Save arrival altitude. Is set to invalid, if no glider is defined in calculator. p.setArrivalAlt( arrivalAlt ); } if ( arrivalAlt.isValid() ) { // add only valid altitudes to the map arrivalAltMap[ coordinateString ( pt ) ] = (int) arrivalAlt.getMeters() + safetyAlt; } distanceMap[ coordinateString ( pt ) ] = distance; if ( arrivalAlt.getMeters() > 0 ) { counter++; } } // sorting of items depends on the glider selection if ( calculator->glider() ) { modeAltitude = true; // glider is known, sort by arrival altitudes } else { modeAltitude = false; // glider is unknown, sort by distances } qSort( begin(), end() ); // qDebug("Number of reachable sites (arriv >0): %d", counter ); // qDebug("Time for glide path calculation: %d msec", t.restart() ); emit newReachList(); }
inline Angle Horizontal::ZenithDistance( ) const { return Angle( M_PI / 2 - Altitude() ); }
void CAltitude::SetVertexColor(int x, int y) { glColor3f(0, 0, -0.15f + (Altitude(x, y) / 256.0f)); }