⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view_map_3d.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	case WXK_LEFT:		_Parms_Command(ID_CMD_MAP3D_ROTATE_Z_LESS);		break;
	case WXK_RIGHT:		_Parms_Command(ID_CMD_MAP3D_ROTATE_Z_MORE);		break;

	case WXK_INSERT:	_Parms_Command(ID_CMD_MAP3D_SHIFT_X_LESS);		break;
	case WXK_DELETE:	_Parms_Command(ID_CMD_MAP3D_SHIFT_X_MORE);		break;

	case WXK_HOME:		_Parms_Command(ID_CMD_MAP3D_SHIFT_Y_LESS);		break;
	case WXK_END:		_Parms_Command(ID_CMD_MAP3D_SHIFT_Y_MORE);		break;

	case WXK_PRIOR:		_Parms_Command(ID_CMD_MAP3D_SHIFT_Z_LESS);		break;
	case WXK_NEXT:		_Parms_Command(ID_CMD_MAP3D_SHIFT_Z_MORE);		break;

	case WXK_F1:		_Parms_Command(ID_CMD_MAP3D_EXAGGERATE_LESS);	break;
	case WXK_F2:		_Parms_Command(ID_CMD_MAP3D_EXAGGERATE_MORE);	break;

	case 'C':			_Parms_Command(ID_CMD_MAP3D_CENTRAL);			break;
	case WXK_F5:		_Parms_Command(ID_CMD_MAP3D_CENTRAL_LESS);		break;
	case WXK_F6:		_Parms_Command(ID_CMD_MAP3D_CENTRAL_MORE);		break;

	case 'S':			_Parms_Command(ID_CMD_MAP3D_STEREO);			break;
//	case WXK_F5:		_Parms_Command(ID_CMD_MAP3D_STEREO_LESS);		break;
//	case WXK_F6:		_Parms_Command(ID_CMD_MAP3D_STEREO_MORE);		break;

	case 'I':			_Parms_Command(ID_CMD_MAP3D_INTERPOLATED);		break;

	case WXK_F7:		_Parms_Command(ID_CMD_MAP3D_SRC_RES_LESS);		break;
	case WXK_F8:		_Parms_Command(ID_CMD_MAP3D_SRC_RES_MORE);		break;

	case 'A':			_Parms_Command(ID_CMD_MAP3D_SEQ_POS_ADD);		break;
	case 'D':			_Parms_Command(ID_CMD_MAP3D_SEQ_POS_DEL);		break;
	case 'P':			_Parms_Command(ID_CMD_MAP3D_SEQ_PLAY);			break;
	case 'L':			_Parms_Command(ID_CMD_MAP3D_SEQ_PLAY_LOOP);		break;
	case WXK_ESCAPE:	_Play_Stop();	event.Skip();					break;
	}
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
#define GET_MOUSE_X_RELDIFF	((double)(m_Mouse_Down.x - event.GetX()) / (double)GetClientSize().x)
#define GET_MOUSE_Y_RELDIFF	((double)(m_Mouse_Down.y - event.GetY()) / (double)GetClientSize().y)

//---------------------------------------------------------
void CVIEW_Map_3D::On_Mouse_LDown(wxMouseEvent &event)
{
	m_Mouse_Down	= event.GetPosition();
	m_xDown			= m_pImage->m_zRotate;
	m_yDown			= m_pImage->m_xRotate;

	CaptureMouse();
}

//---------------------------------------------------------
void CVIEW_Map_3D::On_Mouse_LUp(wxMouseEvent &event)
{
	if( HasCapture() )
	{
		ReleaseMouse();
	}

	if( m_Mouse_Down.x != event.GetX() || m_Mouse_Down.y != event.GetY() )
	{
		m_pImage->m_zRotate	= m_xDown - GET_MOUSE_X_RELDIFF * M_PI_180;
		m_pImage->m_xRotate	= m_yDown - GET_MOUSE_Y_RELDIFF * M_PI_180;

		_Parms_Changed();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::On_Mouse_RDown(wxMouseEvent &event)
{
	m_Mouse_Down	= event.GetPosition();
	m_xDown			= m_pImage->m_yShift;
	m_yDown			= m_pImage->m_zShift;

	CaptureMouse();
}

//---------------------------------------------------------
void CVIEW_Map_3D::On_Mouse_RUp(wxMouseEvent &event)
{
	if( HasCapture() )
	{
		ReleaseMouse();
	}

	if( m_Mouse_Down.x != event.GetX() || m_Mouse_Down.y != event.GetY() )
	{
		m_pImage->m_yShift	= m_xDown - GET_MOUSE_X_RELDIFF * 100.0;
		m_pImage->m_zShift	= m_yDown + GET_MOUSE_Y_RELDIFF * 100.0;

		_Parms_Changed();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::On_Mouse_Motion(wxMouseEvent &event)
{
	if( HasCapture() && event.Dragging() )
	{
		if( event.LeftIsDown() )
		{
			m_pImage->m_zRotate	= m_xDown - GET_MOUSE_X_RELDIFF * M_PI_180;
			m_pImage->m_xRotate	= m_yDown - GET_MOUSE_Y_RELDIFF * M_PI_180;

			_Parms_Changed();
		}
		else if( event.RightIsDown() )
		{
			m_pImage->m_yShift	= m_xDown - GET_MOUSE_X_RELDIFF * 100.0;
			m_pImage->m_zShift	= m_yDown + GET_MOUSE_Y_RELDIFF * 100.0;

			_Parms_Changed();
		}
	}
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
void CVIEW_Map_3D::On_Command(wxCommandEvent &event)
{
	_Parms_Command(event.GetId());
}

//---------------------------------------------------------
void CVIEW_Map_3D::On_Command_UI(wxUpdateUIEvent &event)
{
	switch( event.GetId() )
	{
	case ID_CMD_MAP3D_INTERPOLATED:
		event.Check(m_pImage->m_bInterpol);
		break;

	case ID_CMD_MAP3D_CENTRAL:
		event.Check(m_pImage->m_bCentral);
		break;

	case ID_CMD_MAP3D_STEREO:
		event.Check(m_pImage->m_bStereo);
		break;
	}
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
void CVIEW_Map_3D::On_Source_Changed(void)
{
	m_pImage->m_Src_bUpdate	= true;

	m_pImage->Set_Source();
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
void CVIEW_Map_3D::_Parms_Create(void)
{
	CSG_Parameter	*pNode;

	m_Parameters.Create(NULL, LNG("[CAP] 3D-View"), LNG(""));

	//-----------------------------------------------------
	m_Parameters.Add_Grid(
		NULL	, "ELEVATION"		, LNG("[CAP] Elevation"),
		LNG(""),
		PARAMETER_INPUT
	);

	//-----------------------------------------------------
	pNode	= m_Parameters.Add_Node(NULL, "ROTATION", LNG("[CAP] Rotation"), LNG(""));

	m_Parameters.Add_Value(
		pNode	, "ROTATION_X"		, LNG("X"),
		LNG(""),
		PARAMETER_TYPE_Double, -45.0, -360.0, true, 360.0, true
	);

	m_Parameters.Add_Value(
		pNode	, "ROTATION_Y"		, LNG("Y"),
		LNG(""),
		PARAMETER_TYPE_Double,   0.0, -360.0, true, 360.0, true
	);

	m_Parameters.Add_Value(
		pNode	, "ROTATION_Z"		, LNG("Z"),
		LNG(""),
		PARAMETER_TYPE_Double,  45.0, -360.0, true, 360.0, true
	);

	//-----------------------------------------------------
	pNode	= m_Parameters.Add_Node(NULL, "SHIFT", LNG("[CAP] Shift"), LNG(""));

	m_Parameters.Add_Value(
		pNode	, "SHIFT_X"			, LNG("Left/Right"),
		LNG(""),
		PARAMETER_TYPE_Double, 0.0
	);

	m_Parameters.Add_Value(
		pNode	, "SHIFT_Y"			, LNG("Up/Down"),
		LNG(""),
		PARAMETER_TYPE_Double, 0.0
	);

	m_Parameters.Add_Value(
		pNode	, "SHIFT_Z"			, LNG("In/Out"),
		LNG(""),
		PARAMETER_TYPE_Double, 200.0
	);

	//-----------------------------------------------------
	m_Parameters.Add_Value(
		NULL	, "EXAGGERATION"	, LNG("[CAP] Exaggeration"),
		LNG(""),
		PARAMETER_TYPE_Double, 1.0
	);

	//-----------------------------------------------------
	pNode	= m_Parameters.Add_Node(NULL, "NODE_PROJECTION", LNG("[CAP] Projection"), LNG(""));

	m_Parameters.Add_Choice(
		pNode	, "CENTRAL"			, LNG("[CAP] Projection"),
		LNG(""),

		CSG_String::Format(wxT("%s|%s|"),
			LNG("parallel"),
			LNG("central")
		), 1
	);

	m_Parameters.Add_Value(
		pNode	, "CENTRAL_DIST"	, LNG("[CAP] Perspectivic Distance"),
		LNG(""),
		PARAMETER_TYPE_Double, 200, 1, true
	);

	//-----------------------------------------------------
	pNode	= m_Parameters.Add_Node(NULL, "NODE_FIGURE", LNG("[CAP] Figure"), LNG(""));

	m_Parameters.Add_Choice(
		pNode	, "FIGURE"			, LNG("[CAP] Figure"),
		LNG(""),

		CSG_String::Format(wxT("%s|%s|%s|%s|"),
			LNG("plain"),
			LNG("cylinder"),
			LNG("ball"),
			LNG("panorama")
		), 0
	);

	m_Parameters.Add_Value(
		pNode	, "FIGURE_WEIGHT"	, LNG("[CAP] Weight"),
		LNG(""),
		PARAMETER_TYPE_Double, 1.0
	);

	//-----------------------------------------------------
	pNode	= m_Parameters.Add_Node(NULL, "NODE_STEREO", LNG("[CAP] Anaglyph"), LNG(""));

	m_Parameters.Add_Value(
		pNode	, "STEREO"			, LNG("[CAP] Anaglyph"),
		LNG(""),
		PARAMETER_TYPE_Bool, 0.0
	);

	m_Parameters.Add_Value(
		pNode	, "STEREO_DIST"		, LNG("[CAP] Eye Distance [Degree]"),
		LNG(""),
		PARAMETER_TYPE_Double, 2.0, 0, true, 180, true
	);

	//-----------------------------------------------------
	m_Parameters.Add_Value(
		NULL	, "INTERPOLATED"	, LNG("[CAP] Interpolated"),
		LNG(""),
		PARAMETER_TYPE_Bool, true
	);

	m_Parameters.Add_Value(
		NULL	, "BKGRD_COLOR"		, LNG("[CAP] Background Color"),
		LNG(""),
		PARAMETER_TYPE_Color, SG_GET_RGB(0, 0, 0)
	);

	m_Parameters.Add_Value(
		NULL	, "SRC_RESOLUTION"	, LNG("Resolution"),
		LNG(""),
		PARAMETER_TYPE_Int, 200, 10, true
	);
}

//---------------------------------------------------------
bool CVIEW_Map_3D::_Parms_Update(bool bGet)
{
	return( _Parms_Update(bGet, m_pImage) );
}

bool CVIEW_Map_3D::_Parms_Update(bool bGet, CVIEW_Map_3D_Image *pImage)
{
	//-----------------------------------------------------
	if( bGet )
	{
		pImage->m_xShift		= m_Parameters("SHIFT_X")		->asDouble();
		pImage->m_yShift		= m_Parameters("SHIFT_Y")		->asDouble();
		pImage->m_zShift		= m_Parameters("SHIFT_Z")		->asDouble();

		pImage->m_xRotate		= m_Parameters("ROTATION_X")	->asDouble() * M_DEG_TO_RAD;
		pImage->m_yRotate		= m_Parameters("ROTATION_Y")	->asDouble() * M_DEG_TO_RAD;
		pImage->m_zRotate		= m_Parameters("ROTATION_Z")	->asDouble() * M_DEG_TO_RAD;

		pImage->m_Exaggeration	= m_Parameters("EXAGGERATION")	->asDouble();

		pImage->m_bCentral		= m_Parameters("CENTRAL")		->asInt() == 1;
		pImage->m_Central		= m_Parameters("CENTRAL_DIST")	->asDouble();

		pImage->m_Figure		= m_Parameters("FIGURE")		->asInt();
		pImage->m_Figure_Weight	= m_Parameters("FIGURE_WEIGHT")	->asDouble();

		pImage->m_bStereo		= m_Parameters("STEREO")		->asBool();
		pImage->m_Stereo		= m_Parameters("STEREO_DIST")	->asDouble() * M_DEG_TO_RAD;

		pImage->m_BkColor		= m_Parameters("BKGRD_COLOR")	->asColor();

		_Parms_StatusBar();

		//-------------------------------------------------
		CSG_Grid	*pDEM			= m_Parameters("ELEVATION")		->asGrid();

		if( !g_pData->Exists(pDEM, DATAOBJECT_TYPE_Grid) )
		{
			pDEM				= NULL;
		}

		pImage->m_Src_bUpdate	= pImage->m_pDEM != pDEM ? true : pImage->m_Src_bUpdate;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -