/** 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; }
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; }