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