📄 wksp_map.cpp
字号:
///////////////////////////////////////////////////////////
// //
// SAGA //
// //
// System for Automated Geoscientific Analyses //
// //
// User Interface //
// //
// Program: SAGA //
// //
//-------------------------------------------------------//
// //
// WKSP_Map.cpp //
// //
// Copyright (C) 2005 by Olaf Conrad //
// //
//-------------------------------------------------------//
// //
// This file is part of 'SAGA - System for Automated //
// Geoscientific Analyses'. SAGA is free software; you //
// can redistribute it and/or modify it under the terms //
// of the GNU General Public License as published by the //
// Free Software Foundation; version 2 of the License. //
// //
// SAGA is distributed in the hope that it will be //
// useful, but WITHOUT ANY WARRANTY; without even the //
// implied warranty of MERCHANTABILITY or FITNESS FOR A //
// PARTICULAR PURPOSE. See the GNU General Public //
// License for more details. //
// //
// You should have received a copy of the GNU General //
// Public License along with this program; if not, //
// write to the Free Software Foundation, Inc., //
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, //
// USA. //
// //
//-------------------------------------------------------//
// //
// contact: Olaf Conrad //
// Institute of Geography //
// University of Goettingen //
// Goldschmidtstr. 5 //
// 37077 Goettingen //
// Germany //
// //
// e-mail: oconrad@saga-gis.org //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#include <wx/window.h>
#include <wx/dcmemory.h>
#include <wx/filename.h>
#include <saga_api/doc_pdf.h>
#include "svg_interactive_map.h"
#include "res_commands.h"
#include "res_dialogs.h"
#include "helper.h"
#include "dc_helper.h"
#include "active.h"
#include "active_legend.h"
#include "wksp_map_control.h"
#include "wksp_map_manager.h"
#include "wksp_map.h"
#include "wksp_map_layer.h"
#include "wksp_layer_legend.h"
#include "wksp_shapes.h"
#include "view_map.h"
#include "view_map_control.h"
#include "view_map_3d.h"
#include "view_layout.h"
#include "view_layout_info.h"
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#define LEGEND_SPACE 10
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CWKSP_Map::CWKSP_Map(void)
{
static int iMap = 0;
m_Name.Printf(wxT("%02d. %s"), ++iMap, LNG("[CAP] Map"));
_Create_Parameters();
m_pView = NULL;
m_pView_3D = NULL;
m_pLayout = NULL;
m_pLayout_Info = new CVIEW_Layout_Info(this);
m_bSynchronise = false;
m_Img_bSave = false;
}
//---------------------------------------------------------
CWKSP_Map::~CWKSP_Map(void)
{
View_Show (false);
View_3D_Show (false);
View_Layout_Show (false);
delete(m_pLayout_Info);
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
wxString CWKSP_Map::Get_Name(void)
{
return( m_Name );
}
//---------------------------------------------------------
wxString CWKSP_Map::Get_Description(void)
{
wxString s;
s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
LNG("[CAP] Map")
));
s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
LNG("[CAP] Name") , m_Name.c_str()
));
s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
LNG("[CAP] Layers") , Get_Count()
));
s.Append(wxT("</table>"));
return( s );
}
//---------------------------------------------------------
wxMenu * CWKSP_Map::Get_Menu(void)
{
wxMenu *pMenu;
pMenu = new wxMenu(LNG("[CAP] Map"));
CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
CMD_Menu_Add_Item(pMenu, true, ID_CMD_MAPS_SHOW);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_IMAGE);
CMD_Menu_Add_Item(pMenu, true, ID_CMD_MAPS_SAVE_IMAGE_ON_CHANGE);
#ifndef _SAGA_DONOTUSE_HARU
CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_PDF_INDEXED);
#endif
CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_INTERACTIVE_SVG);
CMD_Menu_Add_Item(pMenu, true, ID_CMD_MAPS_3D_SHOW);
CMD_Menu_Add_Item(pMenu, true, ID_CMD_MAPS_LAYOUT_SHOW);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SYNCHRONIZE);
return( pMenu );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CWKSP_Map::On_Command(int Cmd_ID)
{
switch( Cmd_ID )
{
default:
return( CWKSP_Base_Manager::On_Command(Cmd_ID) );
case ID_CMD_WKSP_ITEM_RETURN:
View_Show(true);
break;
case ID_CMD_MAPS_SAVE_IMAGE:
SaveAs_Image();
break;
case ID_CMD_MAPS_SAVE_IMAGE_ON_CHANGE:
SaveAs_Image_On_Change();
break;
case ID_CMD_MAPS_SAVE_PDF_INDEXED:
SaveAs_PDF_Indexed();
break;
case ID_CMD_MAPS_SAVE_INTERACTIVE_SVG:
SaveAs_Interactive_SVG();
break;
case ID_CMD_MAPS_SYNCHRONIZE:
Set_Synchronising(!m_bSynchronise);
break;
case ID_CMD_MAPS_SHOW:
View_Toggle();
break;
case ID_CMD_MAPS_3D_SHOW:
View_3D_Toggle();
break;
case ID_CMD_MAPS_LAYOUT_SHOW:
View_Layout_Toggle();
break;
}
return( true );
}
//---------------------------------------------------------
bool CWKSP_Map::On_Command_UI(wxUpdateUIEvent &event)
{
switch( event.GetId() )
{
default:
return( CWKSP_Base_Manager::On_Command_UI(event) );
case ID_CMD_MAPS_SHOW:
event.Check(m_pView != NULL);
break;
case ID_CMD_MAPS_3D_SHOW:
event.Check(m_pView_3D != NULL);
break;
case ID_CMD_MAPS_LAYOUT_SHOW:
event.Check(m_pLayout != NULL);
break;
case ID_CMD_MAPS_SAVE_IMAGE_ON_CHANGE:
event.Check(is_Image_Save_Mode());
break;
}
return( true );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CWKSP_Map::_Create_Parameters(void)
{
CSG_Parameter *pNode_0, *pNode_1;
//-----------------------------------------------------
m_Parameters.Create(this, LNG(""), LNG(""));
m_Parameters.Set_Callback_On_Parameter_Changed(&_On_Parameter_Changed);
//-----------------------------------------------------
pNode_0 = m_Parameters.Add_Node(
NULL , "NODE_GENERAL" , LNG("[CAP] General"),
LNG("")
);
m_Parameters.Add_String(
pNode_0 , "NAME" , LNG("[CAP] Name"),
LNG(""),
m_Name.c_str()
);
m_Parameters.Add_Value(
pNode_0 , "GOTO_NEWLAYER" , LNG("[CAP] Zoom to added layer"),
LNG(""),
PARAMETER_TYPE_Bool, g_pMaps->Get_Parameters()->Get_Parameter("GOTO_NEWLAYER")->asBool()
);
//-----------------------------------------------------
pNode_0 = m_Parameters.Add_Node(
NULL , "NODE_FRAME" , LNG("[CAP] Frame"),
LNG("")
);
m_Parameters.Add_Value(
pNode_0 , "FRAME_SHOW" , LNG("[CAP] Show"),
LNG(""),
PARAMETER_TYPE_Bool, g_pMaps->Get_Parameters()->Get_Parameter("FRAME_SHOW")->asBool()
);
m_Parameters.Add_Value(
pNode_0 , "FRAME_WIDTH" , LNG("[CAP] Width"),
LNG(""),
PARAMETER_TYPE_Int, g_pMaps->Get_Parameters()->Get_Parameter("FRAME_WIDTH")->asInt(), 5, true
);
//-----------------------------------------------------
pNode_0 = m_Parameters.Add_Node(
NULL , "NODE_PRINT" , LNG("[CAP] Print Layout"),
LNG("")
);
m_Parameters.Add_Choice(
pNode_0 , "PRINT_LEGEND" , LNG("[CAP] Show Legend"),
LNG(""),
wxString::Format(wxT("%s|%s|"),
LNG("no"),
LNG("yes")
), 1
);
m_Parameters.Add_Value(
pNode_0 , "PRINT_RESOLUTION" , LNG("[CAP] Display Resolution"),
LNG(""),
PARAMETER_TYPE_Int, 2, 1, true
);
pNode_1 = m_Parameters.Add_Node(
pNode_0 , "NODE_PRINT_FRAME" , LNG("[CAP] Frame"),
LNG("")
);
m_Parameters.Add_Value(
pNode_1 , "PRINT_FRAME_SHOW" , LNG("[CAP] Show"),
LNG(""),
PARAMETER_TYPE_Bool, true
);
m_Parameters.Add_Value(
pNode_1 , "PRINT_FRAME_WIDTH" , LNG("[CAP] Width"),
LNG(""),
PARAMETER_TYPE_Int, 7, 5, true
);
//-----------------------------------------------------
m_Img_Parms.Set_Name(LNG("[CAP] Save Map as Image..."));
pNode_0 = m_Img_Parms.Add_Node(NULL, "NODE_MAP", LNG("Map"), LNG(""));
m_Img_Parms.Add_Value(
pNode_0 , "NX" , LNG("[PRM] Map Width [Pixels]"),
LNG(""),
PARAMETER_TYPE_Int, 800 , 1, true
);
m_Img_Parms.Add_Value(
pNode_0 , "NY" , LNG("[PRM] Map Height [Pixels]"),
LNG(""),
PARAMETER_TYPE_Int, 600 , 1, true
);
m_Img_Parms.Add_Value(
pNode_0 , "FR" , LNG("[PRM] Frame Width [Pixels]"),
LNG(""),
PARAMETER_TYPE_Int, 20 , 0, true
);
m_Img_Parms.Add_Value(
pNode_0 , "REF" , LNG("[PRM] Save Georeference (world file)"),
LNG(""),
PARAMETER_TYPE_Bool, 1
);
pNode_0 = m_Img_Parms.Add_Node(NULL, "NODE_LEGEND", LNG("[PRM] Legend"), LNG(""));
m_Img_Parms.Add_Value(
pNode_0 , "LG" , LNG("[PRM] Save"),
LNG(""),
PARAMETER_TYPE_Bool, 1
);
m_Img_Parms.Add_Value(
pNode_0 , "LZ" , LNG("[PRM] Zoom"),
LNG(""),
PARAMETER_TYPE_Double, 1.0, 0, true
);
}
//---------------------------------------------------------
int CWKSP_Map::Get_Frame_Width(void)
{
return( m_Parameters("FRAME_SHOW")->asBool() ? m_Parameters("FRAME_WIDTH")->asInt() : 0 );
}
//---------------------------------------------------------
int CWKSP_Map::Get_Print_Resolution(void)
{
return( m_Parameters("PRINT_RESOLUTION")->asInt() );
}
//---------------------------------------------------------
int CWKSP_Map::Get_Print_Frame(void)
{
return( m_Parameters("PRINT_FRAME_SHOW")->asBool() ? m_Parameters("PRINT_FRAME_WIDTH")->asInt() : 0 );
}
//---------------------------------------------------------
int CWKSP_Map::Get_Print_Legend(void)
{
return( m_Parameters("PRINT_LEGEND")->asInt() );
}
//---------------------------------------------------------
int CWKSP_Map::_On_Parameter_Changed(CSG_Parameter *pParameter)
{
if( pParameter && pParameter->Get_Owner() && pParameter->Get_Owner()->Get_Owner() )
{
return( ((CWKSP_Map *)pParameter->Get_Owner()->Get_Owner())->
On_Parameter_Changed(pParameter->Get_Owner(), pParameter)
);
}
return( 0 );
}
//---------------------------------------------------------
int CWKSP_Map::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
{
return( 1 );
}
//---------------------------------------------------------
void CWKSP_Map::Parameters_Changed(void)
{
m_Name = m_Parameters("NAME")->asString();
if( m_pView )
{
m_pView->SetTitle(m_Name);
m_pView->Ruler_Set_Width(Get_Frame_Width());
}
View_Refresh(false);
CWKSP_Base_Manager::Parameters_Changed();
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CWKSP_Map_Layer * CWKSP_Map::Find_Layer(CWKSP_Layer *pLayer)
{
for(int i=0; i<Get_Count(); i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -