📄 wksp_shapes_point.cpp
字号:
bOutline = m_Parameters("DISPLAY_OUTLINE")->asBool();
Brush = wxBrush(m_Def_Color, _BrushList_Get_Style(m_Parameters("DISPLAY_BRUSH")->asInt()));
Pen = wxPen(!bOutline ? m_Def_Color : Get_Color_asWX(m_Parameters("DISPLAY_OUTLINE_COLOR")->asColor()), m_Parameters("DISPLAY_OUTLINE_SIZE")->asInt(), 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_Point::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 );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
inline void CWKSP_Shapes_Point::_Draw_Initialize(CWKSP_Map_DC &dc_Map)
{
dc_Map.dc.SetBrush (m_Brush);
dc_Map.dc.SetPen (m_Pen);
}
//---------------------------------------------------------
inline bool CWKSP_Shapes_Point::_Draw_Initialize(CWKSP_Map_DC &dc_Map, int &Size, CSG_Shape *pShape, bool bSelection)
{
//-----------------------------------------------------
double dSize = m_iSize < 0 ? m_Size : m_Size + (pShape->Get_Record()->asDouble(m_iSize) - m_Size_Min) * m_dSize;
switch( m_Size_Type )
{
default:
case 0: dSize *= dc_Map.m_Scale; break;
case 1: dSize *= dc_Map.m_World2DC; break;
}
Size = (int)(0.5 + dSize);
//-----------------------------------------------------
if( Size > 0 )
{
if( bSelection )
{
dc_Map.dc.SetBrush (wxBrush(wxColour(255, 255, 0), wxSOLID));
dc_Map.dc.SetPen (wxPen (wxColour(255, 0, 0), pShape == m_pShapes->Get_Selection(0) ? 2 : 1, wxSOLID));
}
else if( !bSelection && m_iColor >= 0 )
{
int Color = m_pClassify->Get_Class_Color_byValue(pShape->Get_Record()->asDouble(m_iColor));
wxBrush Brush(m_Brush);
Brush.SetColour(SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color));
dc_Map.dc.SetBrush(Brush);
if( !m_bOutline )
{
wxPen Pen(m_Pen);
Pen.SetColour(SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color));
dc_Map.dc.SetPen(Pen);
}
}
return( true );
}
return( false );
}
//---------------------------------------------------------
void CWKSP_Shapes_Point::_Draw_Shape(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape, bool bSelection)
{
int Size;
//-----------------------------------------------------
if( _Draw_Initialize(dc_Map, Size, pShape, bSelection) )
{
TSG_Point_Int p(dc_Map.World2DC(pShape->Get_Point(0)));
Draw_Symbol(dc_Map.dc, p.x, p.y, Size);
//-------------------------------------------------
if( bSelection )
{
_Draw_Initialize(dc_Map);
}
}
}
//---------------------------------------------------------
void CWKSP_Shapes_Point::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
{
TSG_Point_Int p(dc_Map.World2DC(pShape->Get_Point(0)));
Draw_Text(dc_Map.dc, TEXTALIGN_TOPCENTER, p.x, p.y, pShape->Get_Record()->asString(m_iLabel));
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#define DRAW_CIRCLE(d) { int s = (int)((d) * size);\
dc.DrawCircle(x, y, s);\
}
#define DRAW_SQUARE { int s = (int)(0.7071067812 * size);\
dc.DrawRectangle(x - s, y - s, 2 * s, 2 * s);\
}
#define DRAW_RHOMBUS { wxPoint p[4];\
p[0].y = p[2].y = y;\
p[1].x = p[3].x = x;\
p[0].x = x - size;\
p[2].x = x + size;\
p[1].y = y - size;\
p[3].y = y + size;\
dc.DrawPolygon(4, p);\
}
#define DRAW_TRIANGLE_UP { wxPoint p[3];\
p[0].y = p[1].y = y + (size / 2);\
p[2].y = y - (size - 1);\
p[0].x = x - (int)(0.8660254038 * size);\
p[1].x = x + (int)(0.8660254038 * size);\
p[2].x = x;\
dc.DrawPolygon(3, p);\
}
#define DRAW_TRIANGLE_DOWN { wxPoint p[3];\
p[0].y = p[1].y = y - (size / 2);\
p[2].y = y + (size - 1);\
p[0].x = x - (int)(0.8660254038 * size);\
p[1].x = x + (int)(0.8660254038 * size);\
p[2].x = x;\
dc.DrawPolygon(3, p);\
}
//---------------------------------------------------------
void CWKSP_Shapes_Point::Draw_Symbol(wxDC &dc, int x, int y, int size)
{
switch( m_Symbol_Type )
{
default:
case 0: // circle
DRAW_CIRCLE(1.0);
break;
case 1: // square
DRAW_SQUARE;
break;
case 2: // rhombus
DRAW_RHOMBUS;
break;
case 3: // triangle up
DRAW_TRIANGLE_UP;
break;
case 4: // triangle down
DRAW_TRIANGLE_DOWN;
break;
case 5: // square in circle
DRAW_CIRCLE(1.0);
DRAW_SQUARE;
break;
case 6: // rhombus in circle
DRAW_CIRCLE(1.1);
DRAW_RHOMBUS;
break;
case 7: // triangle up in circle
DRAW_CIRCLE(1.0);
DRAW_TRIANGLE_UP;
break;
case 8: // triangle down in circle
DRAW_CIRCLE(1.0);
DRAW_TRIANGLE_DOWN;
break;
case 9: // circle in square
DRAW_SQUARE;
DRAW_CIRCLE(0.7);
break;
case 10: // circle in rhombus
DRAW_RHOMBUS;
DRAW_CIRCLE(0.5 * sqrt(2.0));
break;
case 11: // circle in triangle up
DRAW_TRIANGLE_UP;
DRAW_CIRCLE(0.5);
break;
case 12: // circle in triangle down
DRAW_TRIANGLE_DOWN;
DRAW_CIRCLE(0.5);
break;
case 13: // image
{
double d = (double)m_Symbol.GetWidth() / (double)m_Symbol.GetHeight();
int sx, sy;
if( d > 1.0 )
{
sx = size;
sy = (int)(0.5 + size / d);
}
else
{
sx = (int)(0.5 + size * d);
sy = size;
}
if( sx > 0 && sy > 0 )
{
dc.DrawBitmap(wxBitmap(m_Symbol.Scale(2 * sx, 2 * sy)), x - sx, y - sy, true);
}
}
break;
}
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
wxMenu * CWKSP_Shapes_Point::On_Edit_Get_Menu(void)
{
wxMenu *pMenu;
pMenu = new wxMenu;
CMD_Menu_Add_Item(pMenu, true , ID_CMD_SHAPES_EDIT_SHAPE);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_EDIT_ADD_SHAPE);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_EDIT_DEL_SHAPE);
return( pMenu );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -