//--------------------------------------------------------- bool CGCS_Graticule::On_Execute(void) { //----------------------------------------------------- CSG_Projection Projection; if( !Get_Projection(Projection) ) { return( false ); } //----------------------------------------------------- m_Projector.Set_Source(CSG_Projection("+proj=longlat +ellps=WGS84 +datum=WGS84", SG_PROJ_FMT_Proj4)); if( !m_Projector.Set_Target(Projection) ) { m_Projector.Destroy(); return( false ); } //----------------------------------------------------- CSG_Rect Extent( Parameters("XMIN")->asDouble(), Parameters("YMIN")->asDouble(), Parameters("XMAX")->asDouble(), Parameters("YMAX")->asDouble() ); if( !Get_Graticule(Extent) ) { m_Projector.Destroy(); return( false ); } //----------------------------------------------------- m_Projector.Destroy(); return( true ); }
//--------------------------------------------------------- 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 ); }