コード例 #1
0
ファイル: reachablelist.cpp プロジェクト: Exadios/Cumulus
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
}
コード例 #2
0
ファイル: BMP085NB.cpp プロジェクト: Lithium366/BMP085
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;
  }
}
コード例 #3
0
ファイル: CAltitude.cpp プロジェクト: trainsn/shooting
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();
}
コード例 #4
0
ファイル: preflightmiscpage.cpp プロジェクト: Exadios/Cumulus
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() );
    }
}
コード例 #5
0
ファイル: reachablelist.cpp プロジェクト: Exadios/Cumulus
/**
 * 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();
}
コード例 #6
0
inline 
Angle 
Horizontal::ZenithDistance( ) const
{
    return Angle( M_PI / 2  -  Altitude() );
}
コード例 #7
0
ファイル: CAltitude.cpp プロジェクト: trainsn/shooting
void CAltitude::SetVertexColor(int x, int y)
{
	glColor3f(0, 0, -0.15f + (Altitude(x, y) / 256.0f));
}