📄 wksp_shapes_line.cpp
字号:
///////////////////////////////////////////////////////////
// //
// SAGA //
// //
// System for Automated Geoscientific Analyses //
// //
// User Interface //
// //
// Program: SAGA //
// //
//-------------------------------------------------------//
// //
// WKSP_Shapes_Line.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 "wksp_layer_classify.h"
#include "wksp_shapes_line.h"
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CWKSP_Shapes_Line::CWKSP_Shapes_Line(CSG_Shapes *pShapes)
: CWKSP_Shapes(pShapes)
{
Create_Parameters();
}
//---------------------------------------------------------
CWKSP_Shapes_Line::~CWKSP_Shapes_Line(void)
{
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CWKSP_Shapes_Line::On_Create_Parameters(void)
{
CWKSP_Shapes::On_Create_Parameters();
//-----------------------------------------------------
// Display...
m_Parameters.Add_Value(
m_Parameters("NODE_DISPLAY"), "DISPLAY_POINTS" , LNG("[CAP] Show Points"),
LNG(""),
PARAMETER_TYPE_Bool, false
);
//-----------------------------------------------------
// Size...
m_Parameters.Add_Node(
NULL , "NODE_SIZE" , LNG("[CAP] Display: Size"),
LNG("")
);
_AttributeList_Add(
m_Parameters("NODE_SIZE") , "SIZE_ATTRIB" , LNG("[CAP] Attribute"),
LNG("")
);
m_Parameters.Add_Choice(
m_Parameters("NODE_SIZE") , "SIZE_TYPE" , LNG("[CAP] Size relates to..."),
LNG(""),
wxString::Format(wxT("%s|%s|"),
LNG("[VAL] Screen"),
LNG("[VAL] Map Units")
), 0
);
m_Parameters.Add_Value(
m_Parameters("NODE_SIZE") , "SIZE_DEFAULT" , LNG("[CAP] Default Size"),
LNG(""),
PARAMETER_TYPE_Int, 0, 0, true
);
m_Parameters.Add_Range(
m_Parameters("NODE_SIZE") , "SIZE_RANGE" , LNG("[CAP] Size Range"),
LNG(""),
0, 10, 0, true
);
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CWKSP_Shapes_Line::On_DataObject_Changed(void)
{
CWKSP_Shapes::On_DataObject_Changed();
_AttributeList_Set(m_Parameters("SIZE_ATTRIB"), true);
}
//---------------------------------------------------------
void CWKSP_Shapes_Line::On_Parameters_Changed(void)
{
CWKSP_Shapes::On_Parameters_Changed();
//-----------------------------------------------------
m_Size_Type = m_Parameters("SIZE_TYPE")->asInt();
if( (m_iSize = m_Parameters("SIZE_ATTRIB")->asInt()) >= m_pShapes->Get_Table().Get_Field_Count()
|| (m_dSize = m_pShapes->Get_Table().Get_MaxValue(m_iSize) - (m_Size_Min = m_pShapes->Get_Table().Get_MinValue(m_iSize))) <= 0.0 )
{
m_iSize = -1;
m_Size = m_Parameters("SIZE_DEFAULT")->asInt();
}
else
{
m_Size = (int)m_Parameters("SIZE_RANGE")->asRange()->Get_LoVal();
m_dSize = (m_Parameters("SIZE_RANGE")->asRange()->Get_HiVal() - m_Size) / m_dSize;
}
//-----------------------------------------------------
Get_Style(m_Pen);
m_bPoints = m_Parameters("DISPLAY_POINTS")->asBool();
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
int CWKSP_Shapes_Line::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
{
CWKSP_Shapes::On_Parameter_Changed(pParameters, pParameter);
return( 1 );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CWKSP_Shapes_Line::Get_Style(wxPen &Pen, wxString *pName)
{
Pen = wxPen(m_Def_Color, (int)m_Size, wxSOLID);
if( pName )
{
if( m_iColor < 0 || m_pClassify->Get_Mode() == CLASSIFY_UNIQUE )
{
pName->Clear();
}
else
{
pName->Printf(m_pShapes->Get_Table().Get_Field_Name(m_iColor));
}
}
return( true );
}
//---------------------------------------------------------
bool CWKSP_Shapes_Line::Get_Style_Size(int &min_Size, int &max_Size, double &min_Value, double &dValue, wxString *pName)
{
if( m_iSize >= 0 )
{
min_Size = (int)(m_Size);
max_Size = (int)(m_Size + ((m_pShapes->Get_Table().Get_MaxValue(m_iSize) - m_Size_Min) * m_dSize));
min_Value = m_Size_Min;
dValue = m_dSize;
if( pName )
{
pName->Printf(m_pShapes->Get_Table().Get_Field_Name(m_iSize));
}
return( true );
}
return( false );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CWKSP_Shapes_Line::_Draw_Initialize(CWKSP_Map_DC &dc_Map)
{
dc_Map.dc.SetPen(m_Pen);
}
//---------------------------------------------------------
void CWKSP_Shapes_Line::_Draw_Shape(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape, bool bSelection)
{
//-----------------------------------------------------
if( bSelection )
{
dc_Map.dc.SetPen(wxPen(wxColour(255, 0, 0), pShape == m_pShapes->Get_Selection(0) ? 2 : 1, wxSOLID));
}
else if( m_iColor >= 0 || m_iSize >= 0 )
{
wxPen Pen(m_Pen);
if( m_iColor >= 0 )
{
int Color = m_pClassify->Get_Class_Color_byValue(pShape->Get_Record()->asDouble(m_iColor));
Pen.SetColour(SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -