Beispiel #1
0
/** Converts the degree input string into the internal KFLog format */
int WGSPoint::degreeToNum(QString inDegree)
{
  /*
   * needed formats:
   *
   *  [g]gg° mm' ss" [NESW]
   *  [g]gg° mm.mmmm' [NESW]
   *  [g]gg.ggggg° [NESW]
   *  dddddddddd
   */

  // to prevent trouble with the degree sign coding
  QChar degreeChar = Qt::Key_degree;
  QString degreeString( degreeChar );
  QString input = inDegree;

  QRegExp degreeDMS("^[0-1]?[0-9]?[0-9]" + degreeString + "\\s[0-5]?[0-9]'[ ]*[0-5]?[0-9]\"\\s[neswNESW]$");
  QRegExp degreeDDM("^[0-1]?[0-9]?[0-9]" + degreeString + "\\s[0-5]?[0-9].[0-9][0-9]?[0-9]?'\\s[neswNESW]$");
  QRegExp degreeDDD("^[0-1]?[0-9]?[0-9].[0-9][0-9]?[0-9]?[0-9]?[0-9]?" + degreeString + "\\s[neswNESW]$");
  QRegExp number("^-?[0-9]+$");

  if( number.indexIn( inDegree ) != -1 )
    {
      return inDegree.toInt();
    }

  int result = 0;

  if (degreeDMS.indexIn(inDegree) != -1)
    {
      int deg = 0, min = 0, sec = 0;

      QRegExp deg1(degreeString);
      deg = inDegree.mid(0, deg1.indexIn(inDegree)).toInt();
      inDegree = inDegree.mid(deg1.indexIn(inDegree) + 1, inDegree.length());

      QRegExp deg2("'");
      min = inDegree.mid(0, deg2.indexIn(inDegree)).toInt();
      inDegree = inDegree.mid(deg2.indexIn(inDegree) + 1, inDegree.length());

      QRegExp deg3("\"");
      sec = inDegree.mid(0, deg3.indexIn(inDegree)).toInt();

      result = (int)rint((600000.0 * deg) + (10000.0 * (min + (sec / 60.0))));
    }
  else if ( degreeDDM.indexIn(inDegree) != -1)
    {
      int deg = 0;
      double min = 0;

      QRegExp deg1(degreeString);
      deg = inDegree.mid(0, deg1.indexIn(inDegree)).toInt();
      inDegree = inDegree.mid(deg1.indexIn(inDegree) + 1, inDegree.length());

      QRegExp deg2("'");
      min = inDegree.mid(0, deg2.indexIn(inDegree)).toDouble();
      inDegree = inDegree.mid(deg2.indexIn(inDegree) + 1, inDegree.length());

      result = (int)rint((600000.0 * deg) + (10000.0 * (min)));
    }
  else if ( degreeDDD.indexIn(inDegree) != -1)
    {
      double deg = 0;

      QRegExp deg1(degreeString);
      deg = inDegree.mid(0, deg1.indexIn(inDegree)).toDouble();

      result = (int) rint( 600000.0 * deg );
    }
  else
    {
      // @AP: inform the user that something has going wrong
      qWarning("%s(%d) degreeToNum(): Wrong input format %s",
               __FILE__, __LINE__, inDegree.toLatin1().data() );

      return 0; ; // Auweia! That is a pitfall, all is set to zero on error.
    }

  QRegExp dir("[swSW]$");

  if (dir.indexIn(inDegree) >= 0)
    {
      result = -result;
    }

  // qDebug("WGSPoint::degreeToNum(%s)=%d", input.toLatin1().data(), result);

  return result;
}
Beispiel #2
0
int OneTimeSceneInit()
{
	int ret;

	result1 = 0;
	result2 = 0;
	adj1 = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
	adj2 = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
	n1 = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
	n2 = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );


	D3DXVECTOR3 campos = D3DXVECTOR3( 0.0f, 2500.0f, 0.0f );
	ret = E3DSetCameraPos( campos );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetCameraDeg( 180.0f, 0.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetProjection( 1000.0f, 50000.0f, 60.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	

	char gname1[MAX_PATH];
	char gname2[MAX_PATH];
	char gname3[MAX_PATH];
	char gname4[MAX_PATH];
	sprintf_s( gname1, MAX_PATH, "%s\\g_6_20_1.bmp", szMediaDir );
	sprintf_s( gname2, MAX_PATH, "%s\\8.bmp", szMediaDir );
	sprintf_s( gname3, MAX_PATH, "%s\\g_river_6_20_1.bmp", szMediaDir );
	sprintf_s( gname4, MAX_PATH, "%s\\BG43.bmp", szMediaDir );
	ret = E3DLoadGroundBMP( gname1, gname2, gname3, gname4,
		MAPSIZE, MAPSIZE, MAPDIV, MAPDIV, MAPHEIGHT, &hsid0 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}


	char signame[MAX_PATH];
	sprintf_s( signame, MAX_PATH, "%s\\morob_6_26_r3.sig", szMediaDir );
	ret = E3DSigLoad( signame, 0, 1.0f, &hsid1 ); 
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	char motname[MAX_PATH];
	sprintf_s( motname, MAX_PATH, "%s\\morob_6_26_r3.qua", szMediaDir );
	ret = E3DAddMotion( hsid1, motname, 1.0f, &motid1, &maxframe1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetMotionKind( hsid1, motid1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	pos1.x = 53898.0f;
	pos1.y = 3000.0f;//初期位置は必ず地面よりも上でなければならない。
	pos1.z = 44982.0;
	befpos1 = pos1;
	D3DXVECTOR3 deg1( 0.0f, 180.0f, 0.0f );
	ret = E3DSetPos( hsid1, pos1 );
	_ASSERT( !ret );
	ret = E3DSetDir( hsid1, deg1 );
	_ASSERT( !ret );

	ret = E3DSetBeforePos( hsid1 );//位置を初期化した直後に必ず呼ぶこと!
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}


	ret = E3DSetMovableArea( gname2, MAPSIZE, MAPSIZE, MAPDIV, MAPDIV, MAPHEIGHT + 1000.0f, &hsid2 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}


	ret = E3DCreateLight( &lid1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	D3DXVECTOR3 ldir( 0.0f, 0.0f, 1.0f );
	E3DCOLOR4UC col= {255, 255, 255, 255 };
	ret = E3DSetDirectionalLight( lid1, ldir, col );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	E3DCOLOR4UC fogcol;
	fogcol.a = 255;
	fogcol.r = 0;
	fogcol.g = 0;
	fogcol.b = 255;
	ret = E3DSetLinearFogParams( 1, fogcol, 1000.0f, 50000.0f, -1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}


	char bgname1[MAX_PATH];
	char bgname2[MAX_PATH];
	sprintf_s( bgname1, MAX_PATH, "%s\\lake.bmp", szMediaDir );
	sprintf_s( bgname2, MAX_PATH, "%s\\cloud3.bmp", szMediaDir );
	ret = E3DCreateBG( scid, bgname1, bgname2, 0.001f, 0.0f, 0, 50000.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	return 0;

}