diff options
Diffstat (limited to 'src/game_tab/left_panel/board/BoardCanvas.cpp')
| -rw-r--r-- | src/game_tab/left_panel/board/BoardCanvas.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/game_tab/left_panel/board/BoardCanvas.cpp b/src/game_tab/left_panel/board/BoardCanvas.cpp index 7bebe45..119c270 100644 --- a/src/game_tab/left_panel/board/BoardCanvas.cpp +++ b/src/game_tab/left_panel/board/BoardCanvas.cpp @@ -1,5 +1,11 @@ #include "BoardCanvas.hpp" +#define TRANS(PT) { \ +wxPoint2DDouble tmp((PT).x,(PT).y); \ +tmp=rot_m.TransformPoint(tmp); \ +tmp=trans_m.TransformPoint(tmp); \ +(PT).x=tmp.m_x;(PT).y=tmp.m_y;} + wxDEFINE_EVENT(PLAY_MOVE_EVENT, wxCommandEvent); BoardCanvas::BoardCanvas(wxFrame *parent) @@ -462,3 +468,34 @@ void BoardCanvas::SetClockTime(short hours, short min, short sec, gs.white_time = std::make_tuple(hours, min, sec); } } + +void BoardCanvas::DrawArrow(wxDC &dc, int xsrc, int ysrc, int xdst, int ydst){ + // Compute arrow length and angle + wxPoint vect(xdst-xsrc,ydst-ysrc); + double length=sqrt(pow(vect.x,2)+pow(vect.y,2)); + double angle=acos(vect.x/length); + + // Compute metrics + std::uint8_t thickness=50; + std::uint8_t tip_height=sqrt(3)/2*thickness; + std::uint32_t tail_length=length-tip_height; + + // Setup transform matrix + wxAffineMatrix2D rot_m,trans_m; + rot_m.Rotate(angle); + trans_m.Translate(xsrc,ysrc); + + // Init polygons + wxPoint tip[]={wxPoint(tail_length,-thickness/2),wxPoint(tail_length,thickness/2),wxPoint(tail_length+tip_height,0)}; + wxPoint tail[]={wxPoint(0,-thickness/4),wxPoint(tail_length,-thickness/4),wxPoint(tail_length,thickness/4),wxPoint(0,thickness/4)}; + + // Transform points + TRANS(tip[0]);TRANS(tip[1]);TRANS(tip[2]); + TRANS(tail[0]);TRANS(tail[1]);TRANS(tail[2]);TRANS(tail[3]); + + // Draw + dc.SetPen(wxNullPen); + dc.SetBrush(wxColour(255,0,0)); + dc.DrawPolygon(3,tip); + dc.DrawPolygon(4,tail); +} |
