📄 view_map_control.cpp
字号:
}
dc.SetPen(wxNullPen);
dc.SetLogicalFunction(wxINVERT);
A = _Get_Client(m_Distance_Pts[n - 1]);
dc.DrawLine(A.x, A.y, m_Mouse_Move.x, m_Mouse_Move.y);
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CVIEW_Map_Control::On_Paint(wxPaintEvent &event)
{
if( m_Bitmap.Ok() )
{
wxPaintDC dc(this);
dc.DrawBitmap(m_Bitmap, 0, 0, false);
_Distance_Draw(dc);
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::On_Size(wxSizeEvent &event)
{
wxRect r(_Get_Client());
if( m_Bitmap.GetWidth() != r.GetWidth() || m_Bitmap.GetHeight() != r.GetHeight() )
{
m_Bitmap.Create(r.GetWidth(), r.GetHeight());
Refresh_Map();
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::Refresh_Map(void)
{
if( m_Bitmap.Ok() )
{
wxMemoryDC dc;
dc.SelectObject(m_Bitmap);
m_pMap->Draw_Map(dc, 1.0, _Get_Client(), true);
dc.SelectObject(wxNullBitmap);
m_pParent->Ruler_Refresh();
Refresh(false);
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CVIEW_Map_Control::On_Key_Down(wxKeyEvent &event)
{
if( m_pMap->Find_Layer(Get_Active_Layer()) && Get_Active_Layer()->Edit_On_Key_Down(event.GetKeyCode()) )
{
return;
}
switch( event.GetKeyCode() )
{
default:
event.Skip();
break;
case WXK_PRIOR:
_Zoom(m_pMap->Get_Extent().Get_Center(), true);
break;
case WXK_NEXT:
_Zoom(m_pMap->Get_Extent().Get_Center(), false);
break;
case WXK_LEFT:
_Move(wxPoint(-10, 0));
break;
case WXK_RIGHT:
_Move(wxPoint( 10, 0));
break;
case WXK_UP:
_Move(wxPoint( 0, -10));
break;
case WXK_DOWN:
_Move(wxPoint( 0, 10));
break;
case WXK_F2:
m_pMap->SaveAs_Image();
break;
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_LDown(wxMouseEvent &event)
{
bool bCaptureMouse = true;
m_Mouse_Down = m_Mouse_Move = event.GetPosition();
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule && g_pModule->is_Interactive() )
{
m_Drag_Mode = ((CSG_Module_Interactive *)g_pModule->Get_Module())->Get_Drag_Mode();
bCaptureMouse = !g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDOWN, GET_KEYS(event));
}
else if( m_pMap->Find_Layer(Get_Active_Layer()) )
{
switch( Get_Active_Layer()->Get_Type() )
{
default:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
break;
case WKSP_ITEM_Grid:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_BOX;
break;
case WKSP_ITEM_Shapes:
m_Drag_Mode = ((CWKSP_Shapes *)Get_Active_Layer())->is_Editing()
? MODULE_INTERACTIVE_DRAG_NONE
: MODULE_INTERACTIVE_DRAG_BOX;
break;
}
Get_Active_Layer()->Edit_On_Mouse_Down(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event));
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_BOX;
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
Set_Mode(MAP_MODE_PAN_DOWN);
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
break;
}
//-----------------------------------------------------
if( bCaptureMouse )
{
CaptureMouse();
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_LUp(wxMouseEvent &event)
{
if( HasCapture() )
{
ReleaseMouse();
}
_Draw_Inverse(m_Mouse_Down, event.GetPosition());
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LUP, GET_KEYS(event));
}
else if( m_pMap->Find_Layer(Get_Active_Layer()) )
{
Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_LEFT);
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
_Distance_Add(event.GetPosition());
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
_Zoom(m_Mouse_Down, event.GetPosition());
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
Set_Mode(MAP_MODE_PAN);
_Move(m_Mouse_Down, event.GetPosition());
break;
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_LDClick(wxMouseEvent &event)
{
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDCLICK, GET_KEYS(event));
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
break;
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_RDown(wxMouseEvent &event)
{
m_Mouse_Down = m_Mouse_Move = event.GetPosition();
_Draw_Inverse(m_Mouse_Down, event.GetPosition());
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDOWN, GET_KEYS(event));
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
_Distance_Reset();
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
break;
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_RUp(wxMouseEvent &event)
{
wxMenu *pMenu = NULL;
m_Drag_Mode = MODULE_INTERACTIVE_DRAG_NONE;
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RUP, GET_KEYS(event));
}
else if( m_pMap->Find_Layer(Get_Active_Layer()) )
{
if( !Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_RIGHT)
&& (pMenu = Get_Active_Layer()->Edit_Get_Menu()) != NULL )
{
PopupMenu(pMenu, event.GetPosition());
delete(pMenu);
}
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
_Zoom(_Get_World(event.GetPosition()), false);
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
break;
}
}
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_RDClick(wxMouseEvent &event)
{
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDCLICK, GET_KEYS(event));
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
break;
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CVIEW_Map_Control::On_Mouse_Motion(wxMouseEvent &event)
{
_Set_StatusBar(_Get_World(event.GetPosition()));
m_pParent->Ruler_Set_Position(event.GetPosition().x, event.GetPosition().y);
switch( m_Mode )
{
//-----------------------------------------------------
case MAP_MODE_SELECT:
if( g_pModule )
{
TSG_Module_Interactive_Mode iMode
= event.LeftIsDown() ? MODULE_INTERACTIVE_MOVE_LDOWN
: event.MiddleIsDown() ? MODULE_INTERACTIVE_MOVE_MDOWN
: event.RightIsDown() ? MODULE_INTERACTIVE_MOVE_RDOWN
: MODULE_INTERACTIVE_MOVE;
g_pModule->Execute(_Get_World(event.GetPosition()), iMode, GET_KEYS(event));
}
else if( m_pMap->Find_Layer(Get_Active_Layer()) )
{
Get_Active_Layer()->Edit_On_Mouse_Move(
this, m_pMap->Get_World(_Get_Client()),
event.GetPosition(), m_Mouse_Move,
GET_KEYS(event)
);
}
break;
//-----------------------------------------------------
case MAP_MODE_DISTANCE:
if( m_Distance_Pts.Get_Count() > 0 )
{
int n = m_Distance_Pts.Get_Count();
wxClientDC dc(this);
wxPoint Last(_Get_Client(m_Distance_Pts[n - 1]));
dc.SetLogicalFunction(wxINVERT);
dc.DrawLine(Last.x, Last.y, m_Mouse_Move .x, m_Mouse_Move .y);
dc.DrawLine(Last.x, Last.y, event.GetPosition().x, event.GetPosition().y);
m_Distance_Move = SG_Get_Distance(m_Distance_Pts[n - 1], _Get_World(event.GetPosition()));
}
break;
//-----------------------------------------------------
case MAP_MODE_ZOOM:
break;
//-----------------------------------------------------
case MAP_MODE_PAN:
break;
//-----------------------------------------------------
case MAP_MODE_PAN_DOWN:
// _Move(m_Mouse_Down, event.GetPosition());
_Pan(m_Mouse_Down, event.GetPosition());
break;
}
//-----------------------------------------------------
_Draw_Inverse(m_Mouse_Down, m_Mouse_Move, event.GetPosition());
//-----------------------------------------------------
m_Mouse_Move = event.GetPosition();
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -