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

📄 view_map_3d.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		pImage->m_pDEM			= pDEM;

		//-------------------------------------------------
		if( pImage->m_bInterpol != m_Parameters("INTERPOLATED")	->asBool() )
		{
			pImage->m_Src_bUpdate	= true;
			pImage->m_bInterpol		= !pImage->m_bInterpol;
		}

		//-------------------------------------------------
		pImage->Set_Source(m_Parameters("SRC_RESOLUTION")->asInt());

		return( pImage->m_pDEM != NULL );
	}

	//-----------------------------------------------------
	else
	{
		m_Parameters("SHIFT_X")			->Set_Value(pImage->m_xShift);
		m_Parameters("SHIFT_Y")			->Set_Value(pImage->m_yShift);
		m_Parameters("SHIFT_Z")			->Set_Value(pImage->m_zShift);

		m_Parameters("ROTATION_X")		->Set_Value(fmod(pImage->m_xRotate * M_RAD_TO_DEG, 360.0));
		m_Parameters("ROTATION_Y")		->Set_Value(fmod(pImage->m_yRotate * M_RAD_TO_DEG, 360.0));
		m_Parameters("ROTATION_Z")		->Set_Value(fmod(pImage->m_zRotate * M_RAD_TO_DEG, 360.0));

		m_Parameters("EXAGGERATION")	->Set_Value(pImage->m_Exaggeration);

		m_Parameters("CENTRAL")			->Set_Value(pImage->m_bCentral ? 1 : 0);
		m_Parameters("CENTRAL_DIST")	->Set_Value(pImage->m_Central);

		m_Parameters("STEREO")			->Set_Value(pImage->m_bStereo);
		m_Parameters("STEREO_DIST")		->Set_Value(pImage->m_Stereo * M_RAD_TO_DEG);

		_Parms_StatusBar();

		return( true );
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Parms_StatusBar(void)
{
	SetStatusText(wxString::Format(wxT("X %+.1f\xb0"), m_pImage->m_xRotate * M_RAD_TO_DEG)	, MAP3D_STATUSBAR_ROTATE_X);
	SetStatusText(wxString::Format(wxT("Y %+.1f\xb0"), m_pImage->m_yRotate * M_RAD_TO_DEG)	, MAP3D_STATUSBAR_ROTATE_Y);
	SetStatusText(wxString::Format(wxT("Z %+.1f\xb0"), m_pImage->m_zRotate * M_RAD_TO_DEG)	, MAP3D_STATUSBAR_ROTATE_Z);

	SetStatusText(wxString::Format(wxT("X %+.1f" ), m_pImage->m_xShift)					, MAP3D_STATUSBAR_SHIFT_X);
	SetStatusText(wxString::Format(wxT("Y %+.1f" ), m_pImage->m_yShift)					, MAP3D_STATUSBAR_SHIFT_Y);
	SetStatusText(wxString::Format(wxT("Z %+.1f" ), m_pImage->m_zShift)					, MAP3D_STATUSBAR_SHIFT_Z);

	SetStatusText(wxString::Format(wxT("E %.1f"  ), m_pImage->m_Exaggeration)			, MAP3D_STATUSBAR_EXAGGERATION);
	SetStatusText(wxString::Format(wxT("C %.1f"  ), m_pImage->m_bCentral ? m_pImage->m_Central : 0.0)	, MAP3D_STATUSBAR_CENTRAL);
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Parms_Command(int Command)
{
	switch( Command )
	{
	default:
		return;

	//-----------------------------------------------------
	case ID_CMD_MAP3D_SEQ_POS_ADD:		_Play_Pos_Add();	return;
	case ID_CMD_MAP3D_SEQ_POS_DEL:		_Play_Pos_Del();	return;
	case ID_CMD_MAP3D_SEQ_POS_DEL_ALL:	_Play_Pos_Clr();	return;
	case ID_CMD_MAP3D_SEQ_POS_EDIT:		_Play_Pos_Edit();	return;
	case ID_CMD_MAP3D_SEQ_PLAY:			_Play_Once();		return;
	case ID_CMD_MAP3D_SEQ_PLAY_LOOP:	_Play_Loop();		return;
	case ID_CMD_MAP3D_SEQ_SAVE:			_Play_Save();		return;

	//-----------------------------------------------------
	case ID_CMD_MAP3D_PARAMETERS:		_Parms_Dlg();		return;

	case ID_CMD_MAP3D_SAVE:				m_pImage->Save();	return;

	//-----------------------------------------------------
	case ID_CMD_MAP3D_INTERPOLATED:
		m_Parameters("INTERPOLATED")	->Set_Value(!m_pImage->m_bInterpol);

		_Parms_Update(true);
		return;

	case ID_CMD_MAP3D_SRC_RES_LESS:
		m_Parameters("SRC_RESOLUTION")	->Set_Value(m_pImage->m_Resolution - STEP_SRC_RES);

		_Parms_Update(true);
		return;

	case ID_CMD_MAP3D_SRC_RES_MORE:
		m_Parameters("SRC_RESOLUTION")	->Set_Value(m_pImage->m_Resolution + STEP_SRC_RES);

		_Parms_Update(true);
		return;

	//-----------------------------------------------------
	case ID_CMD_MAP3D_ROTATE_X_LESS:	m_pImage->m_xRotate			-= STEP_ROTATE;				break;
	case ID_CMD_MAP3D_ROTATE_X_MORE:	m_pImage->m_xRotate			+= STEP_ROTATE;				break;
	case ID_CMD_MAP3D_ROTATE_Y_LESS:	m_pImage->m_yRotate			-= STEP_ROTATE;				break;
	case ID_CMD_MAP3D_ROTATE_Y_MORE:	m_pImage->m_yRotate			+= STEP_ROTATE;				break;
	case ID_CMD_MAP3D_ROTATE_Z_LESS:	m_pImage->m_zRotate			-= STEP_ROTATE;				break;
	case ID_CMD_MAP3D_ROTATE_Z_MORE:	m_pImage->m_zRotate			+= STEP_ROTATE;				break;

	case ID_CMD_MAP3D_SHIFT_X_LESS:		m_pImage->m_xShift			-= STEP_SHIFT;				break;
	case ID_CMD_MAP3D_SHIFT_X_MORE:		m_pImage->m_xShift			+= STEP_SHIFT;				break;
	case ID_CMD_MAP3D_SHIFT_Y_LESS:		m_pImage->m_yShift			-= STEP_SHIFT;				break;
	case ID_CMD_MAP3D_SHIFT_Y_MORE:		m_pImage->m_yShift			+= STEP_SHIFT;				break;
	case ID_CMD_MAP3D_SHIFT_Z_LESS:		m_pImage->m_zShift			-= STEP_SHIFT;				break;
	case ID_CMD_MAP3D_SHIFT_Z_MORE:		m_pImage->m_zShift			+= STEP_SHIFT;				break;

	case ID_CMD_MAP3D_EXAGGERATE_LESS:	m_pImage->m_Exaggeration	-= STEP_EXAGGERATE;			break;
	case ID_CMD_MAP3D_EXAGGERATE_MORE:	m_pImage->m_Exaggeration	+= STEP_EXAGGERATE;			break;

	case ID_CMD_MAP3D_CENTRAL_LESS:		m_pImage->m_Central			-= STEP_CENTRAL;			break;
	case ID_CMD_MAP3D_CENTRAL_MORE:		m_pImage->m_Central			+= STEP_CENTRAL;			break;
	case ID_CMD_MAP3D_CENTRAL:			m_pImage->m_bCentral		 = !m_pImage->m_bCentral;	break;

	case ID_CMD_MAP3D_STEREO_LESS:		m_pImage->m_Stereo			-= STEP_STEREO;				break;
	case ID_CMD_MAP3D_STEREO_MORE:		m_pImage->m_Stereo			+= STEP_STEREO;				break;
	case ID_CMD_MAP3D_STEREO:			m_pImage->m_bStereo			 = !m_pImage->m_bStereo;	break;
	}

	_Parms_Changed();
}

//---------------------------------------------------------
bool CVIEW_Map_3D::_Parms_Dlg(void)
{
	if( DLG_Parameters(&m_Parameters) )
	{
		_Parms_Update(true);

		m_pImage->Set_Image();

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Parms_Changed(void)
{
	_Parms_Update(false);

	m_pImage->Set_Image();
}


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

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Pos_Add(void)
{
	CSG_Table_Record	*pRecord;

	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		pRecord	= m_Play.Add_Record();

		pRecord->Set_Value(PLAY_REC_ROTATE_X		, m_pImage->m_xRotate);
		pRecord->Set_Value(PLAY_REC_ROTATE_Y		, m_pImage->m_yRotate);
		pRecord->Set_Value(PLAY_REC_ROTATE_Z		, m_pImage->m_zRotate);
		pRecord->Set_Value(PLAY_REC_SHIFT_X			, m_pImage->m_xShift);
		pRecord->Set_Value(PLAY_REC_SHIFT_Y			, m_pImage->m_yShift);
		pRecord->Set_Value(PLAY_REC_SHIFT_Z			, m_pImage->m_zShift);
		pRecord->Set_Value(PLAY_REC_EXAGGERATION	, m_pImage->m_Exaggeration);
		pRecord->Set_Value(PLAY_REC_CENTRAL			, m_pImage->m_Central);
		pRecord->Set_Value(PLAY_REC_STEPS			, 10);
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Pos_Del(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		m_Play.Del_Record(m_Play.Get_Record_Count() - 1);
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Pos_Clr(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		m_Play.Del_Records();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Pos_Edit(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		DLG_Table(LNG("[CAP] 3D-View: Player Sequence"), &m_Play);
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Once(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		m_Play_Mode	= PLAY_MODE_RUN_ONCE;

		_Play();

		m_Play_Mode	= PLAY_MODE_NONE;
	}
	else if( m_Play_Mode == PLAY_MODE_RUN_ONCE )
	{
		_Play_Stop();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Loop(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		m_Play_Mode	= PLAY_MODE_RUN_LOOP;

		while( _Play() );
	}
	else if( m_Play_Mode == PLAY_MODE_RUN_LOOP )
	{
		_Play_Stop();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Save(void)
{
	if( m_Play_Mode == PLAY_MODE_NONE )
	{
		m_Play_Mode	= PLAY_MODE_RUN_SAVE;

		_Play();

		m_Play_Mode	= PLAY_MODE_NONE;
	}
	else if( m_Play_Mode == PLAY_MODE_RUN_SAVE )
	{
		_Play_Stop();
	}
}

//---------------------------------------------------------
void CVIEW_Map_3D::_Play_Stop(void)
{
	if( m_Play_Mode != PLAY_MODE_NONE )
	{
		m_Play_Mode	= PLAY_MODE_NONE;
	}
}

//---------------------------------------------------------
#define PLAYER_READ(iRec)	if( (pRecord = m_Play.Get_Record(iRec)) != NULL )			\
							{	xRotate[1]	= pRecord->asDouble(PLAY_REC_ROTATE_X);		\
								yRotate[1]	= pRecord->asDouble(PLAY_REC_ROTATE_Y);		\
								zRotate[1]	= pRecord->asDouble(PLAY_REC_ROTATE_Z);		\
								xShift [1]	= pRecord->asDouble(PLAY_REC_SHIFT_X);		\
								yShift [1]	= pRecord->asDouble(PLAY_REC_SHIFT_Y);		\
								zShift [1]	= pRecord->asDouble(PLAY_REC_SHIFT_Z);		\
								Exagg  [1]	= pRecord->asDouble(PLAY_REC_EXAGGERATION);	\
								Central[1]	= pRecord->asDouble(PLAY_REC_CENTRAL);		\
								Steps  [1]	= pRecord->asDouble(PLAY_REC_STEPS);		}

#define PLAYER_SWAP			{	xRotate[0]	= xRotate[1];	yRotate[0]	= yRotate[1];	zRotate[0]	= zRotate[1];	\
								xShift [0]	= xShift [1];	yShift [0]	= yShift [1];	zShift [0]	= zShift [1];	\
								Exagg  [0]	= Exagg  [1];	Central[0]	= Central[1];	Steps  [0]	= Steps  [1];	}

#define PLAYER_SET(Value)	(Value[0] + d * (Value[1] - Value[0]))

//---------------------------------------------------------
bool CVIEW_Map_3D::_Play(void)
{
	int				iRecord, iStep, iFrame	= 0, type;

	double			xRotate[2], yRotate[2], zRotate[2],
					xShift [2], yShift [2], zShift [2],
					Exagg  [2], Central[2], Steps  [2],
					d;

	wxString		file;

	CSG_Table_Record	*pRecord;

	//-----------------------------------------------------
	if( m_Play.Get_Record_Count() > 1 && m_Play_Mode != PLAY_MODE_NONE )
	{
		if( m_Play_Mode == PLAY_MODE_RUN_SAVE )
		{
			if( !DLG_Image_Save(file, type) )
			{
				m_Play_Mode	= PLAY_MODE_NONE;

				return( false );
			}

			iFrame	= 0;
		}

		//-------------------------------------------------
		PLAYER_READ(0);

		for(iRecord=1; iRecord<m_Play.Get_Record_Count() && m_Play_Mode!=PLAY_MODE_NONE; iRecord++)
		{
			PLAYER_SWAP;
			PLAYER_READ(iRecord);

			for(iStep=0; iStep<Steps[0] && m_Play_Mode!=PLAY_MODE_NONE; iStep++)
			{
				d							= iStep / (double)Steps[0];
				m_pImage->m_xRotate			= PLAYER_SET(xRotate);
				m_pImage->m_yRotate			= PLAYER_SET(yRotate);
				m_pImage->m_zRotate			= PLAYER_SET(zRotate);
				m_pImage->m_xShift			= PLAYER_SET(xShift );
				m_pImage->m_yShift			= PLAYER_SET(yShift );
				m_pImage->m_zShift			= PLAYER_SET(zShift );
				m_pImage->m_xShift			= PLAYER_SET(xShift );
				m_pImage->m_Exaggeration	= PLAYER_SET(Exagg  );
				m_pImage->m_Central			= PLAYER_SET(Central);

				_Parms_Changed();

				if( m_Play_Mode == PLAY_MODE_RUN_SAVE )
				{
					m_pImage->Save(wxString::Format(wxT("%s_%03d"), file.c_str(), iFrame++), type);
				}

				PROCESS_Wait();
			}
		}

		return( m_Play_Mode != PLAY_MODE_NONE );
	}

	m_Play_Mode	= PLAY_MODE_NONE;

	return( false );
}


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

//---------------------------------------------------------

⌨️ 快捷键说明

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