📄 view_map_3d.cpp
字号:
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 + -