//--------------------------------------------------------- void CINFO_Messages::Add_Line(void) { CSG_Colors c; SetDefaultStyle(wxTextAttr(wxNullColour, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW))); _Add_Text(wxT("\n\n")); c.Set_Ramp( Get_Color_asInt(wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION)), Get_Color_asInt(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)) ); c.Set_Count(100); for(int i=0; i<c.Get_Count(); i++) { SetDefaultStyle(wxTextAttr( Get_Color_asWX(c.Get_Color(c.Get_Count() - 1 - i)), Get_Color_asWX(c.Get_Color(i)) )); _Add_Text(wxT(" ")); } SetDefaultStyle(wxTextAttr(wxNullColour, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW))); }
//--------------------------------------------------------- void CWKSP_Layer_Legend::_Draw_Continuum(wxDC &dc, int y, double zFactor) { int i; double zMin, zMax; //----------------------------------------------------- zMin = m_pClassify->Get_RelativeToMetric(0.0); zMax = m_pClassify->Get_RelativeToMetric(1.0); //----------------------------------------------------- if( zMin >= zMax ) { if( m_pLayer->Get_Value_Range() > 0.0 ) { i = m_pClassify->Get_Class_Count() - 1; _Draw_Box (dc, y, BOX_HEIGHT, Get_Color_asWX(m_pClassify->Get_Class_Color(i))); _Draw_Label (dc, y, m_pClassify->Get_Class_Name(i), TEXTALIGN_TOP); y += BOX_HEIGHT; } i = 0; _Draw_Box (dc, y, BOX_HEIGHT, Get_Color_asWX(m_pClassify->Get_Class_Color(i))); _Draw_Label (dc, y, m_pClassify->Get_Class_Name(i), TEXTALIGN_TOP); } //----------------------------------------------------- else if( METRIC_HEIGHT > m_pClassify->Get_Class_Count() * BOX_HEIGHT ) { _Draw_Boxes(dc, y); } //----------------------------------------------------- else { int dyFont; double yToDC, dz; _Set_Font(dc, FONT_LABEL); dc.GetTextExtent(wxString::Format(wxT("01234567")), &i, &dyFont); zMin *= zFactor; zMax *= zFactor; yToDC = METRIC_HEIGHT / (zMax - zMin); dz = pow(10.0, floor(log10(zMax - zMin)) - 1.0); while( yToDC * dz < dyFont ) dz *= 2.0; yToDC = METRIC_HEIGHT / (double)m_pClassify->Get_Class_Count(); if( m_bVertical ) { _Draw_Continuum_V(dc, y, yToDC, zMin, zMax, zFactor, dz, dyFont); } else { _Draw_Continuum_H(dc, y, yToDC, zMin, zMax, zFactor, dz, dyFont); } } }
//--------------------------------------------------------- bool CVIEW_Table_Control::_Set_Record(int iRecord, CSG_Table_Record *pRecord) { m_pRecords[iRecord] = pRecord; if( m_Field_Offset ) { SetRowLabelValue(iRecord, pRecord->asString(0)); } for(int iCol=0, iField=m_Field_Offset; iField<m_pTable->Get_Field_Count(); iCol++, iField++) { switch( m_pTable->Get_Field_Type(iField) ) { default: SetCellValue(iRecord, iCol, pRecord->is_NoData(iField) ? SG_T("") : pRecord->asString(iField)); break; case SG_DATATYPE_Color: SetCellBackgroundColour(iRecord, iCol, Get_Color_asWX(pRecord->asInt(iField))); break; } } if( pRecord->is_Selected() ) { SelectRow(iRecord, true); } return( true ); }
//--------------------------------------------------------- bool CActive_Attributes_Control::_Set_Record(int iRecord) { CSG_Table_Record *pRecord = m_pTable->Get_Record(iRecord); if( m_Field_Offset ) // feature attributes { SetRowLabelValue(iRecord, pRecord->asString(0)); } else // grid cell values { SetRowLabelValue(iRecord, wxString::Format("%d", 1 + iRecord)); } for(int iCol=0, iField=m_Field_Offset; iField<m_pTable->Get_Field_Count(); iCol++, iField++) { switch( m_pTable->Get_Field_Type(iField) ) { default: SetCellValue(iRecord, iCol, pRecord->is_NoData(iField) ? SG_T("") : pRecord->asString(iField)); break; case SG_DATATYPE_Color: SetCellBackgroundColour(iRecord, iCol, Get_Color_asWX(pRecord->asInt(iField))); break; } } if( pRecord->is_Selected() ) { SelectRow(iRecord, true); } return( true ); }
//--------------------------------------------------------- inline void CWKSP_Shapes_Point::Draw_Initialize(CWKSP_Map_DC &dc_Map) { dc_Map.dc.SetBrush (m_Brush); dc_Map.dc.SetPen (m_Pen); m_Sel_Color_Fill = Get_Color_asWX(m_Parameters("SEL_COLOR_FILL")->asInt()); }
//--------------------------------------------------------- void CWKSP_Layer_Legend::_Draw_Boxes(wxDC &dc, int y) { for(int i=m_pClassify->Get_Class_Count()-1; i>=0; i--, y+=BOX_HEIGHT) { _Draw_Box (dc, y, BOX_HEIGHT, Get_Color_asWX(m_pClassify->Get_Class_Color(i))); _Draw_Label (dc, y, m_pClassify->Get_Class_Name(i), TEXTALIGN_TOP); } }
//--------------------------------------------------------- void CVIEW_Table_Control::On_LClick(wxGridEvent &event) { int iField = m_Field_Offset + event.GetCol(); CSG_Table_Record *pRecord = m_pRecords[event.GetRow()]; //----------------------------------------------------- if( event.AltDown() ) { if( m_pTable->Get_Field_Type(iField) == SG_DATATYPE_String ) { if( event.ControlDown() ) { g_pData->Open (pRecord->asString(iField)); } else { Open_Application(pRecord->asString(iField)); } } } //----------------------------------------------------- else if( event.ControlDown() ) { m_pTable->Select(pRecord, true); Update_Selection(); } else if( event.ShiftDown() ) { SelectBlock(event.GetRow(), 0, GetGridCursorRow(), GetNumberCols(), false); } else { SelectRow(event.GetRow(), false); if( pRecord && iField >= m_Field_Offset && iField < m_pTable->Get_Field_Count() && m_pTable->Get_Field_Type(iField) == SG_DATATYPE_Color ) { long lValue; if( DLG_Color(lValue = pRecord->asInt(iField)) ) { pRecord->Set_Value(iField, lValue); SetCellBackgroundColour(event.GetRow(), event.GetCol(), Get_Color_asWX(pRecord->asInt(iField))); ForceRefresh(); } } } //----------------------------------------------------- SetGridCursor(event.GetRow(), event.GetCol()); }
//--------------------------------------------------------- void CWKSP_Shapes_Point::On_Parameters_Changed(void) { CWKSP_Shapes::On_Parameters_Changed(); //----------------------------------------------------- m_Symbol_Type = m_Parameters("DISPLAY_SYMBOL_TYPE")->asInt(); if( !SG_File_Exists (m_Parameters("DISPLAY_SYMBOL_IMAGE")->asString()) || !m_Symbol.LoadFile(m_Parameters("DISPLAY_SYMBOL_IMAGE")->asString()) ) { m_Symbol = IMG_Get_Image(ID_IMG_DEFAULT); } //----------------------------------------------------- m_Size_Type = m_Parameters("SIZE_TYPE") ->asInt(); m_Size_Scale = m_Parameters("SIZE_SCALE")->asInt(); if( (m_iSize = m_Parameters("SIZE_ATTRIB")->asInt()) >= Get_Shapes()->Get_Field_Count() || (m_dSize = Get_Shapes()->Get_Maximum(m_iSize) - (m_Size_Min = Get_Shapes()->Get_Minimum(m_iSize))) <= 0.0 ) { m_iSize = -1; m_Size = m_Parameters("SIZE_DEFAULT")->asDouble(); } else { m_Size = m_Parameters("SIZE_RANGE")->asRange()->Get_LoVal(); m_dSize = (m_Parameters("SIZE_RANGE")->asRange()->Get_HiVal() - m_Size) / m_dSize; } //----------------------------------------------------- m_Label_Angle = m_Parameters("LABEL_ANGLE")->asDouble(); if( (m_iLabel_Angle = m_Parameters("LABEL_ANGLE_ATTRIB")->asInt()) >= Get_Shapes()->Get_Field_Count() ) { m_iLabel_Angle = -1; } switch( m_Parameters("LABEL_ALIGN_X")->asInt() ) { case 0: m_Label_Align = TEXTALIGN_LEFT; break; case 1: m_Label_Align = TEXTALIGN_XCENTER; break; case 2: m_Label_Align = TEXTALIGN_RIGHT; break; } switch( m_Parameters("LABEL_ALIGN_Y")->asInt() ) { case 0: m_Label_Align |= TEXTALIGN_TOP; break; case 1: m_Label_Align |= TEXTALIGN_YCENTER; break; case 2: m_Label_Align |= TEXTALIGN_BOTTOM; break; } //----------------------------------------------------- m_bOutline = m_Parameters("OUTLINE")->asBool(); m_Pen = wxPen(!m_bOutline ? m_Def_Color : Get_Color_asWX(m_Parameters("OUTLINE_COLOR")->asColor()), m_Parameters("OUTLINE_SIZE")->asInt(), wxSOLID); m_Brush = wxBrush(m_Def_Color, BrushList_Get_Style(m_Parameters("DISPLAY_BRUSH")->asInt())); }
//--------------------------------------------------------- void CWKSP_Data_Button::On_Paint(wxPaintEvent &event) { if( m_pItem ) { if( !GetToolTip() || GetToolTip()->GetTip().Cmp(m_pItem->Get_Name()) ) { SetToolTip(m_pItem->Get_Name()); } //------------------------------------------------- wxPaintDC dc(this); if( is_Manager() ) { dc.DrawText(m_pItem->Get_Name(), 2, 2); } //------------------------------------------------- else { wxRect r(GetClientRect()); if( m_pItem->Get_Type() == WKSP_ITEM_Table ) { dc.DrawBitmap(wxBitmap(IMG_Get_Bitmap(ID_IMG_WKSP_TABLE, r.GetWidth() - 1)), r.GetLeft(), r.GetTop(), true ); } else { dc.DrawBitmap(((CWKSP_Layer *)m_pItem)->Get_Thumbnail(r.GetWidth() - 1, r.GetHeight() - 1), r.GetLeft(), r.GetTop(), true ); } //--------------------------------------------- if( m_pItem->is_Selected() ) { dc.SetPen(wxPen(Get_Color_asWX(g_pData->Get_Parameter("THUMBNAIL_SELCOLOR")->asColor()))); Draw_Edge(dc, EDGE_STYLE_SIMPLE, r); r.Deflate(1); Draw_Edge(dc, EDGE_STYLE_SIMPLE, r); r.Deflate(1); Draw_Edge(dc, EDGE_STYLE_SIMPLE, r); } } } }
//--------------------------------------------------------- void CVIEW_ScatterPlot::_Draw_Legend(wxDC &dc, wxRect r) { CSG_Colors Colors(*m_Options("DENSITY_PAL")->asColors()); Colors.Set_Count(r.GetHeight()); for(int i=0, y=r.GetBottom(); i<Colors.Get_Count(); i++, y--) { Draw_FillRect(dc, Get_Color_asWX(Colors.Get_Color(i)), r.GetLeft(), y, r.GetRight(), y + 1); } // r.Offset(0, -r.GetHeight()); Draw_Edge(dc, EDGE_STYLE_SIMPLE, r); Draw_Text(dc, TEXTALIGN_BOTTOMLEFT, 2 + r.GetRight(), r.GetBottom(), "0"); Draw_Text(dc, TEXTALIGN_TOPLEFT , 2 + r.GetRight(), r.GetTop (), wxString::Format("%d", (int)m_Count.Get_Max())); }
//--------------------------------------------------------- void CActive_Attributes_Control::On_LClick(wxGridEvent &event) { int iField = m_Field_Offset + event.GetCol(); CSG_Table_Record *pRecord = m_pTable->Get_Record(event.GetRow()); //----------------------------------------------------- if( event.AltDown() ) { if( m_pTable->Get_Field_Type(iField) == SG_DATATYPE_String ) { Open_Application(pRecord->asString(iField)); } } //----------------------------------------------------- if( event.ControlDown() ) { if( m_pTable->Get_Field_Type(iField) == SG_DATATYPE_String ) { g_pData->Open (pRecord->asString(iField)); } } //----------------------------------------------------- else { if( pRecord && iField >= m_Field_Offset && iField < m_pTable->Get_Field_Count() && m_pTable->Get_Field_Type(iField) == SG_DATATYPE_Color ) { long lValue; if( DLG_Color(lValue = pRecord->asInt(iField)) ) { pRecord->Set_Value(iField, lValue); SetCellBackgroundColour(event.GetRow(), event.GetCol(), Get_Color_asWX(pRecord->asInt(iField))); ForceRefresh(); } } } //----------------------------------------------------- SetGridCursor(event.GetRow(), event.GetCol()); }
//--------------------------------------------------------- wxPGProperty * CParameters_Control::_Get_Property(wxPGProperty *pParent, CSG_Parameter *pParameter) { wxString Name(pParameter->Get_Name()), ID(pParameter->Get_Identifier()); wxPGProperty *pProperty = NULL; switch( pParameter->Get_Type() ) { case PARAMETER_TYPE_Node: default: if( pParameter->Get_Children_Count() > 0 ) { if( pParameter->Get_Parent() == NULL || pParameter->Get_Parent()->Get_Type() == PARAMETER_TYPE_Node ) pProperty = new wxPropertyCategory (Name, ID); else pProperty = new wxStringProperty (Name, ID, wxT("")); } break; case PARAMETER_TYPE_Bool: pProperty = new wxBoolProperty (Name, ID, pParameter->asBool()); break; case PARAMETER_TYPE_Int: pProperty = new wxIntProperty (Name, ID, pParameter->asInt()); break; case PARAMETER_TYPE_Double: pProperty = new wxFloatProperty (Name, ID, pParameter->asDouble()); break; case PARAMETER_TYPE_Range: pProperty = new CParameters_PG_Range (Name, ID, pParameter); break; case PARAMETER_TYPE_Degree: pProperty = new CParameters_PG_Degree (Name, ID, pParameter); break; case PARAMETER_TYPE_String: pProperty = new wxStringProperty (Name, ID, pParameter->asString()); break; case PARAMETER_TYPE_Color: pProperty = new wxColourProperty (Name, ID, Get_Color_asWX(pParameter->asColor())); break; case PARAMETER_TYPE_Colors: pProperty = new CParameters_PG_Colors (Name, ID, pParameter); break; case PARAMETER_TYPE_Text: case PARAMETER_TYPE_FilePath: case PARAMETER_TYPE_Font: case PARAMETER_TYPE_Table_Fields: case PARAMETER_TYPE_FixedTable: case PARAMETER_TYPE_Parameters: pProperty = new CParameters_PG_Dialog (Name, ID, pParameter); break; case PARAMETER_TYPE_Grid_List: case PARAMETER_TYPE_Table_List: case PARAMETER_TYPE_Shapes_List: case PARAMETER_TYPE_TIN_List: case PARAMETER_TYPE_PointCloud_List: if( !pParameter->is_Output() ) { pProperty = new CParameters_PG_Dialog (Name, ID, pParameter); } break; case PARAMETER_TYPE_Choice: case PARAMETER_TYPE_Table_Field: case PARAMETER_TYPE_Grid_System: case PARAMETER_TYPE_Grid: case PARAMETER_TYPE_Table: case PARAMETER_TYPE_Shapes: case PARAMETER_TYPE_TIN: case PARAMETER_TYPE_PointCloud: pProperty = new CParameters_PG_Choice (pParameter); break; } //----------------------------------------------------- if( pProperty ) { if( pParent ) { m_pPG->Insert(pParent, -1, pProperty); } else { m_pPG->Append(pProperty); } //------------------------------------------------- CSG_String s, sDesc; sDesc = pParameter->Get_Description(PARAMETER_DESCRIPTION_TYPE); s = pParameter->Get_Description(PARAMETER_DESCRIPTION_TEXT); if( s.Length() > 0 ) { sDesc.Append( wxT("\n___\n") ); sDesc.Append( s ); } s = pParameter->Get_Description(PARAMETER_DESCRIPTION_PROPERTIES); if( s.Length() > 0 ) { sDesc.Append(wxT("\n___\n")); sDesc.Append(s); } m_pPG->SetPropertyHelpString(pProperty, sDesc.c_str()); //------------------------------------------------- switch( pParameter->Get_Type() ) { case PARAMETER_TYPE_Node: default: if( pParameter->Get_Parent() && pParameter->Get_Parent()->Get_Type() != PARAMETER_TYPE_Node ) { m_pPG->LimitPropertyEditing(pProperty); // m_pPG->SetPropertyCell(pProperty, 0, Name , wxNullBitmap, SYS_Get_Color(wxSYS_COLOUR_BTNTEXT), SYS_Get_Color(wxSYS_COLOUR_BTNFACE)); // m_pPG->SetPropertyCell(pProperty, 1, wxT(""), wxNullBitmap, SYS_Get_Color(wxSYS_COLOUR_BTNTEXT), SYS_Get_Color(wxSYS_COLOUR_BTNFACE)); } break; case PARAMETER_TYPE_Bool: pProperty->SetAttribute(wxPG_BOOL_USE_CHECKBOX , (long)true); break; case PARAMETER_TYPE_Int: break; case PARAMETER_TYPE_Double: pProperty->SetAttribute(wxPG_FLOAT_PRECISION , (long)16); break; case PARAMETER_TYPE_String: if( ((CSG_Parameter_String *)pParameter->Get_Data())->is_Password() ) { pProperty->SetAttribute(wxPG_STRING_PASSWORD, (long)pParameter->asString()); } else if( pParameter->is_Information() ) { m_pPG->LimitPropertyEditing(pProperty); } break; case PARAMETER_TYPE_Color: pProperty->SetEditor(wxPGEditor_Choice); break; case PARAMETER_TYPE_FilePath: break; case PARAMETER_TYPE_Colors: case PARAMETER_TYPE_Text: case PARAMETER_TYPE_Font: case PARAMETER_TYPE_FixedTable: case PARAMETER_TYPE_Grid_List: case PARAMETER_TYPE_Table_List: case PARAMETER_TYPE_Shapes_List: case PARAMETER_TYPE_TIN_List: case PARAMETER_TYPE_PointCloud_List: case PARAMETER_TYPE_Parameters: m_pPG->LimitPropertyEditing(pProperty); break; } if( pParameter->is_Information() ) { m_pPG->EnableProperty(pProperty, false); } } return( pProperty ); }
//--------------------------------------------------------- void CWKSP_Layer_Legend::_Draw_Continuum_H(wxDC &dc, int y, double yToDC, double zMin, double zMax, double zFactor, double dz, int dyFont) { int i, iy, jy, yTick, yText, sx, sy; double z; wxString s; yTick = y + m_dxBox; yText = y + m_dxBox + m_dxTick; //----------------------------------------------------- for(i=0, z=m_xBox; i<m_pClassify->Get_Class_Count(); i++, z+=yToDC) { Draw_FillRect(dc, Get_Color_asWX(m_pClassify->Get_Class_Color(i)), (int)(z), y, (int)(z + yToDC), yTick); } Draw_Edge(dc, EDGE_STYLE_SIMPLE, m_xBox, y, m_xBox + METRIC_HEIGHT, yTick); //----------------------------------------------------- switch( m_pClassify->Get_Metric_Mode() ) { case METRIC_MODE_NORMAL: default: jy = METRIC_POS_H(zMin) - METRIC_HEIGHT; z = dz * floor(zMin / dz); if( z < zMin ) z += dz; for(; z<=zMax; z+=dz) { iy = METRIC_POS_H(z); dc.DrawLine(iy, yTick, iy, yText); s = METRIC_GET_STRING(z, dz); dc.GetTextExtent(s, &sx, &sy); if( abs(jy - iy) >= (int)(1.25 * sx) ) { jy = iy; Draw_Text(dc, TEXTALIGN_TOPCENTER, iy, yText, s); } } break; case METRIC_MODE_LOGUP: jy = METRIC_POS_H(zMax) + METRIC_HEIGHT; z = dz * floor(zMax / dz); if( z > zMax ) z -= dz; for(; z>=zMin; z-=dz) { iy = METRIC_POS_H(z); dc.DrawLine(iy, yTick, iy, yText); s = METRIC_GET_STRING(z, dz); dc.GetTextExtent(s, &sx, &sy); if( abs(jy - iy) >= (int)(1.25 * sx) ) { jy = iy; Draw_Text(dc, TEXTALIGN_TOPCENTER, iy, yText, s); } while( abs(iy - METRIC_POS_H(z - dz)) > 2 * sx ) dz *= 0.1; } break; case METRIC_MODE_LOGDOWN: jy = METRIC_POS_H(zMin) - METRIC_HEIGHT; z = dz * floor(zMin / dz); if( z < zMin ) z += dz; for(; z<=zMax; z+=dz) { iy = METRIC_POS_H(z); dc.DrawLine(iy, yTick, iy, yText); s = METRIC_GET_STRING(z, dz); dc.GetTextExtent(s, &sx, &sy); if( abs(jy - iy) >= (int)(1.25 * sx) ) { jy = iy; Draw_Text(dc, TEXTALIGN_TOPCENTER, iy, yText, s); } while( abs(iy - METRIC_POS_H(z + dz)) > 2 * sx ) dz *= 0.1; } break; } //----------------------------------------------------- _Set_Size(METRIC_HEIGHT, yText + dyFont); }
//--------------------------------------------------------- void CWKSP_Layer_Legend::_Draw_Continuum_V(wxDC &dc, int y, double yToDC, double zMin, double zMax, double zFactor, double dz, int dyFont) { int i, iy, jy; double z; //----------------------------------------------------- for(i=0, z=y+METRIC_HEIGHT; i<m_pClassify->Get_Class_Count(); i++, z-=yToDC) { Draw_FillRect(dc, Get_Color_asWX(m_pClassify->Get_Class_Color(i)), m_xBox, (int)(z), m_xTick, (int)(z - yToDC)); } Draw_Edge(dc, EDGE_STYLE_SIMPLE, m_xBox, y, m_xTick, y + METRIC_HEIGHT); //----------------------------------------------------- switch( m_pClassify->Get_Metric_Mode() ) { case METRIC_MODE_NORMAL: default: z = dz * floor(zMin / dz); if( z < zMin ) z += dz; for(; z<=zMax; z+=dz) { iy = METRIC_POS_V(z); dc.DrawLine(m_xTick, iy, m_xText, iy); _Draw_Label(dc, iy, METRIC_GET_STRING(z, dz), TEXTALIGN_YCENTER); } break; case METRIC_MODE_LOGUP: jy = METRIC_POS_V(zMax) + (1 + dyFont); z = dz * floor(zMax / dz); if( z > zMax ) z -= dz; for(; z>=zMin; z-=dz) { iy = METRIC_POS_V(z); dc.DrawLine(m_xTick, iy, m_xText, iy); if( abs(jy - iy) >= (int)(0.75 * dyFont) ) { jy = iy; _Draw_Label(dc, iy, METRIC_GET_STRING(z, dz), TEXTALIGN_YCENTER); } while( abs(iy - METRIC_POS_V(z - dz)) > 2 * dyFont ) dz *= 0.1; } break; case METRIC_MODE_LOGDOWN: jy = METRIC_POS_V(zMin) - (1 + dyFont); z = dz * floor(zMin / dz); if( z < zMin ) z += dz; for(; z<=zMax; z+=dz) { iy = METRIC_POS_V(z); dc.DrawLine(m_xTick, iy, m_xText, iy); if( abs(jy - iy) >= (int)(0.75 * dyFont) ) { jy = iy; _Draw_Label(dc, iy, METRIC_GET_STRING(z, dz), TEXTALIGN_YCENTER); } while( abs(iy - METRIC_POS_V(z + dz)) > 2 * dyFont ) dz *= 0.1; } break; } //----------------------------------------------------- _Set_Size(0, METRIC_HEIGHT + dc.GetFont().GetPointSize()); }
//--------------------------------------------------------- void CWKSP_Layer_Legend::_Draw_Point(wxDC &dc, CWKSP_Shapes_Point *pLayer) { bool bSize; int min_Size, max_Size; double min_Value, d_Value; wxString Name, Name_Size; wxPen Pen; wxBrush Brush; //----------------------------------------------------- m_BoxStyle = BOXSTYLE_CIRCLE; m_Box_bFill = true; //----------------------------------------------------- bSize = pLayer->Get_Style_Size(min_Size, max_Size, min_Value, d_Value, &Name_Size); pLayer->Get_Style(Pen, Brush, m_Box_bOutline, &Name); if( m_pClassify->Get_Mode() != CLASSIFY_UNIQUE || !bSize ) { dc.SetBrush(Brush); dc.SetPen(Pen); if( Name.Length() > 0 ) { _Draw_Title(dc, FONT_SUBTITLE, Name); } // _Draw_Boxes(dc, m_Position.y); for(int i=m_pClassify->Get_Class_Count()-1, y=m_Position.y; i>=0; i--, y+=BOX_HEIGHT) { // _Draw_Box (dc, y, BOX_HEIGHT, Get_Color_asWX(m_pClassify->Get_Class_Color(i))); _Set_Size(0, BOX_HEIGHT); if( m_Box_bOutline == false ) { Pen = dc.GetPen(); Pen.SetColour(Get_Color_asWX(m_pClassify->Get_Class_Color(i))); dc.SetPen(Pen); } if( m_Box_bFill ) { Brush = dc.GetBrush(); Brush.SetColour(Get_Color_asWX(m_pClassify->Get_Class_Color(i))); dc.SetBrush(Brush); } pLayer->Draw_Symbol(dc, m_xBox + m_dxBox / 2, y + (BOX_HEIGHT - BOX_SPACE) / 2, (BOX_HEIGHT - BOX_SPACE) / 2); _Draw_Label(dc, y, m_pClassify->Get_Class_Name(i), TEXTALIGN_TOP); } } //----------------------------------------------------- if( bSize ) { dc.SetBrush(Brush); dc.SetPen(Pen); _Draw_Title(dc, FONT_SUBTITLE, Name_Size); _Draw_Point_Sizes(dc, pLayer, min_Size, max_Size, min_Value, d_Value); _Set_Size(0, SIZE_HEIGHT + dc.GetFont().GetPointSize()); } }
//--------------------------------------------------------- bool CWKSP_Map_Graticule::Draw(CWKSP_Map_DC &dc_Map) { if( !Get_Graticule(dc_Map.m_rWorld) || m_Graticule.Get_Count() <= 0 ) { return( false ); } if( !m_Parameters("SHOW_ALWAYS")->asBool() ) { CSG_Parameter_Range *pRange = m_Parameters("SHOW_RANGE")->asRange(); double dRange = dc_Map.m_rWorld.Get_XRange() > dc_Map.m_rWorld.Get_YRange() ? dc_Map.m_rWorld.Get_XRange() : dc_Map.m_rWorld.Get_YRange(); if( dRange < pRange->Get_LoVal() || pRange->Get_HiVal() < dRange ) { return( false ); } } //----------------------------------------------------- CWKSP_Map_DC *pDC = m_Parameters("TRANSPARENCY")->asDouble() > 0.0 ? new CWKSP_Map_DC(dc_Map.m_rWorld, dc_Map.m_rDC, dc_Map.m_Scale, SG_GET_RGB(255, 255, 255)) : NULL; CWKSP_Map_DC &dc = pDC ? *pDC : dc_Map; //----------------------------------------------------- wxPen Pen(m_Parameters("COLOR")->asColor(), m_Parameters("SIZE")->asInt()); switch( m_Parameters("LINE_STYLE")->asInt() ) { default: case 0: Pen.SetStyle(wxPENSTYLE_SOLID ); break; // Solid style. case 1: Pen.SetStyle(wxPENSTYLE_DOT ); break; // Dotted style. case 2: Pen.SetStyle(wxPENSTYLE_LONG_DASH ); break; // Long dashed style. case 3: Pen.SetStyle(wxPENSTYLE_SHORT_DASH ); break; // Short dashed style. case 4: Pen.SetStyle(wxPENSTYLE_DOT_DASH ); break; // Dot and dash style. case 5: Pen.SetStyle(wxPENSTYLE_BDIAGONAL_HATCH ); break; // Backward diagonal hatch. case 6: Pen.SetStyle(wxPENSTYLE_CROSSDIAG_HATCH ); break; // Cross-diagonal hatch. case 7: Pen.SetStyle(wxPENSTYLE_FDIAGONAL_HATCH ); break; // Forward diagonal hatch. case 8: Pen.SetStyle(wxPENSTYLE_CROSS_HATCH ); break; // Cross hatch. case 9: Pen.SetStyle(wxPENSTYLE_HORIZONTAL_HATCH); break; // Horizontal hatch. case 10: Pen.SetStyle(wxPENSTYLE_VERTICAL_HATCH ); break; // Vertical hatch. // case 11: Pen.SetStyle(wxPENSTYLE_STIPPLE ); break; // Use the stipple bitmap. // case 12: Pen.SetStyle(wxPENSTYLE_USER_DASH ); break; // Use the user dashes: see wxPen::SetDashes. // case 13: Pen.SetStyle(wxPENSTYLE_TRANSPARENT ); break; // No pen is used. } dc.dc.SetPen(Pen); //----------------------------------------------------- for(int iLine=0; iLine<m_Graticule.Get_Count(); iLine++) { CSG_Shape *pLine = m_Graticule.Get_Shape(iLine); for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++) { if( pLine->Get_Point_Count(iPart) > 1 ) { TSG_Point_Int B, A = dc.World2DC(pLine->Get_Point(0, iPart)); for(int iPoint=1; iPoint<pLine->Get_Point_Count(iPart); iPoint++) { B = A; A = dc.World2DC(pLine->Get_Point(iPoint, iPart)); dc.dc.DrawLine(A.x, A.y, B.x, B.y); } } } } //----------------------------------------------------- if( m_Parameters("LABEL")->asBool() ) { int Size = (int)(0.5 + 0.01 * m_Parameters("LABEL_SIZE")->asDouble() * ( dc.m_rDC.GetWidth() < dc.m_rDC.GetHeight() ? dc.m_rDC.GetWidth() : dc.m_rDC.GetHeight() ) ); if( Size > 2 ) { int Effect; wxColour Effect_Color = Get_Color_asWX(m_Parameters("LABEL_EFFCOL")->asInt()); wxFont Font = Get_Font(m_Parameters("LABEL_FONT")); Font.SetPointSize(Size); dc.dc.SetFont(Font); dc.dc.SetTextForeground(m_Parameters("LABEL_FONT")->asColor()); switch( m_Parameters("LABEL_EFFECT")->asInt() ) { default: Effect = TEXTEFFECT_NONE; break; case 1: Effect = TEXTEFFECT_FRAME; break; case 2: Effect = TEXTEFFECT_TOP; break; case 3: Effect = TEXTEFFECT_TOPLEFT; break; case 4: Effect = TEXTEFFECT_LEFT; break; case 5: Effect = TEXTEFFECT_BOTTOMLEFT; break; case 6: Effect = TEXTEFFECT_BOTTOM; break; case 7: Effect = TEXTEFFECT_BOTTOMRIGHT; break; case 8: Effect = TEXTEFFECT_RIGHT; break; case 9: Effect = TEXTEFFECT_TOPRIGHT; break; } for(int iPoint=0; iPoint<m_Coordinates.Get_Count(); iPoint++) { CSG_Shape *pPoint = m_Coordinates.Get_Shape(iPoint); TSG_Point_Int p(dc.World2DC(pPoint->Get_Point(0))); wxString Type(pPoint->asString(0)); int Align = !Type.Cmp("LAT_MIN") ? TEXTALIGN_CENTERLEFT : !Type.Cmp("LAT_MAX") ? TEXTALIGN_CENTERRIGHT : !Type.Cmp("LON_MIN") ? TEXTALIGN_BOTTOMCENTER : !Type.Cmp("LON_MAX") ? TEXTALIGN_TOPCENTER : TEXTALIGN_CENTER; Draw_Text(dc.dc, Align, p.x, p.y, 0.0, pPoint->asString(1), Effect, Effect_Color); } } } //----------------------------------------------------- if( pDC ) { dc_Map.Draw_DC(dc, m_Parameters("TRANSPARENCY")->asDouble() / 100.0); delete(pDC); } return( true ); }