public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double x = DrawAreaX + 0.1, y = DrawAreaY + 0.05; base.Draw (gr, area_width, area_height, rtl); for (int i = 0; i < circles.Length; i++) { gr.Arc (x + circles[i].x + 0.1, y + circles[i].y + 0.1, circles[i].rad, 0, 2 * Math.PI); gr.Stroke (); } }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double x = DrawAreaX + 0.22, y = DrawAreaY + 0.2; double pos_x = x; double pos_y = y; Circle[] circles = null; base.Draw (gr, area_width, area_height, rtl); circles = new Circle [] { new Circle (0.01, 0.06), new Circle (0.27, 0.06), new Circle (0.01, 0.21), new Circle (0.27, 0.21), new Circle (0.14, 0), new Circle (0.14, 0.29) }; // Circle gr.Arc (pos_x + figure_size, pos_y + figure_size, figure_size, 0, 2 * Math.PI); gr.Stroke (); const double point_size = 0.01; for (int i = 0; i < circles.Length; i++) { gr.Arc (x + point_size + circles[i].x, y + point_size + circles[i].y, point_size, 0, 2 * Math.PI); gr.Fill (); gr.Stroke (); } gr.MoveTo (x + circles[2].x + 0.01, y + circles[2].y + 0.01); gr.LineTo (x + circles[1].x + 0.01, y + circles[1].y + 0.01); gr.Stroke (); gr.DrawTextCentered (pos_x + figure_size, pos_y + 0.08 + figure_size * 2, ServiceLocator.Instance.GetService <ITranslations> ().GetString ("Two people in the table sitting across each other")); }
static void DrawSlice(CairoContextEx gr, double x, double y, double dg, Color color) { double x1, y1, smallest_x, smallest_y, degrees; smallest_x = x; smallest_y = y; degrees = radian * (60 + dg); gr.MoveTo (x, y); x1 = x + radius * Math.Cos (degrees); y1 = y + radius * Math.Sin (degrees); gr.LineTo (x1, y1); if (x1 < smallest_x) smallest_x = x1; if (y1 < smallest_y) smallest_y = y1; degrees = dg * radian; gr.MoveTo (x, y); x1 = x + radius * Math.Cos (degrees); y1 = y + radius * Math.Sin (degrees); gr.LineTo (x1, y1); if (x1 < smallest_x) smallest_x = x1; if (y1 < smallest_y) smallest_y = y1; gr.Arc (x, y, radius, dg * radian, radian * (60 + dg)); gr.FillGradient (smallest_x, smallest_y, radius, radius, color); gr.Stroke (); }
public void DrawBalance(CairoContextEx gr, double x, double y, int index, bool full) { const double width = 0.5; double fig_x = x + 0.1, fig_y = y - 0.11; int total = (full == true) ? (elements * 2) : elements; gr.Rectangle (x + 0.05, y - 0.12, 0.38, 0.08); gr.Stroke (); gr.Rectangle (x + 0.5, y - 0.12, 0.38, 0.08); gr.Stroke (); for (int i = 0; i < total; i++) { switch (balances[i + index]) { case 1: gr.DrawEquilateralTriangle (fig_x, fig_y, 0.05); break; case 2: gr.Arc (fig_x + (0.05 / 2), fig_y + (0.05 / 2) + 0.003, (0.05 / 2), 0, 2 * Math.PI); gr.Stroke (); break; case 3: gr.Rectangle (fig_x, fig_y + 0.005, 0.045, 0.045); gr.Stroke (); break; } if (i == elements - 1) fig_x = x + 0.54; else fig_x += 0.07; } x += 0.2; y += 0.01; gr.MoveTo (x, y); gr.LineTo (x + width, y); gr.LineTo (x + width, y - 0.05); gr.Stroke (); gr.MoveTo (x , y); gr.LineTo (x , y - 0.05); gr.Stroke (); gr.DrawEquilateralTriangle (x + (width / 2) - 0.04, y, 0.08); gr.Stroke (); }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double x = DrawAreaX + 0.05, y = DrawAreaY; double pos_x = x; double pos_y = y; Circle[] circles = null; base.Draw (gr, area_width, area_height, rtl); // First circle gr.Arc (pos_x + figure_size, y + figure_size, figure_size, 0, 2 * Math.PI); gr.Stroke (); DrawAndConnectPoints (gr, pos_x, pos_y, new Circle [] { new Circle (0.14, 0), new Circle (0.14, 0.29), }, true); gr.MoveTo (pos_x, pos_y + figure_size * 2 + 0.05); gr.ShowPangoText (HasNRegionString (2)); gr.Stroke (); // Second circle pos_x += 0.4; gr.Arc (pos_x + figure_size, pos_y + figure_size, figure_size, 0, 2 * Math.PI); gr.Stroke (); DrawAndConnectPoints (gr, pos_x, pos_y, new Circle [] { new Circle (0.01, 0.06), new Circle (0.27, 0.06), new Circle (0.14, 0.29), }, true); gr.MoveTo (pos_x, pos_y + figure_size * 2 + 0.05); gr.ShowPangoText (HasNRegionString (4)); gr.Stroke (); // Third circle pos_x = x; pos_y += 0.45; gr.Arc (pos_x + figure_size, pos_y + figure_size, figure_size, 0, 2 * Math.PI); gr.Stroke (); DrawAndConnectPoints (gr, pos_x, pos_y, new Circle [] { new Circle (0.01, 0.06), new Circle (0.27, 0.06), new Circle (0.01, 0.21), new Circle (0.27, 0.21), }, true); gr.MoveTo (pos_x, pos_y + figure_size * 2 + 0.05); gr.ShowPangoText (HasNRegionString (8)); gr.Stroke (); switch (dots) { case 5: circles = new Circle [] { new Circle (0.01, 0.06), new Circle (0.27, 0.06), new Circle (0.01, 0.21), new Circle (0.27, 0.21), new Circle (0.14, 0), }; break; case 6: circles = new Circle [] { new Circle (0.01, 0.06), new Circle (0.27, 0.06), new Circle (0.01, 0.21), new Circle (0.27, 0.21), new Circle (0.14, 0), new Circle (0.14, 0.29) }; break; } // Forth circle pos_x += 0.4; gr.Arc (pos_x + figure_size, pos_y + figure_size, figure_size, 0, 2 * Math.PI); gr.Stroke (); DrawAndConnectPoints (gr, pos_x, pos_y, circles, Answer.Draw); }
static void DrawCircle(CairoContextEx gr, double x, double y, Color[] colors, int color_indice) { double dg; gr.Arc (x, y, radius, 0, 2 * Math.PI); gr.Stroke (); gr.Save (); for (int slice = 0; slice < total_slices; slice++) { dg = slice * (360 / total_slices); DrawSlice (gr, x, y, dg, colors [color_indice]); color_indice++; if (color_indice >= colors.Length) color_indice = 0; } gr.Restore (); }
private static void DrawSlice(CairoContextEx gr, double x, double y) { double degrees, x1, y1; degrees = 0; gr.MoveTo (x, y); x1 = x + radius * Math.Cos (degrees); y1 = y + radius * Math.Sin (degrees); gr.LineTo (x1, y1); gr.Stroke (); degrees = radian * 60; gr.MoveTo (x, y); x1 = x + radius * Math.Cos (degrees); y1 = y + radius * Math.Sin (degrees); gr.LineTo (x1, y1); gr.Stroke (); gr.Arc (x, y, radius, 0, radian * 60); gr.Stroke (); }
private void DrawFigure(CairoContextEx gr, double x, double y, FigureType fig) { double space_x, space_y; space_x = (rect_w - figure_size) / 2; space_y = (rect_h - figure_size) / 2; switch (fig) { case FigureType.Triangle: gr.DrawEquilateralTriangle (x + space_x, y + space_y, figure_size); break; case FigureType.Rectangle: gr.Rectangle (x + space_x, y + space_y, figure_size, figure_size); gr.Stroke (); break; case FigureType.Diamond: gr.DrawDiamond (x + space_x, y + space_y, figure_size); break; case FigureType.Cercle: gr.Arc (x + space_x + figure_size / 2, y + space_y + figure_size / 2, figure_size / 2, 0, 2 * Math.PI); gr.Stroke (); break; case FigureType.TriangleWithLine: gr.DrawEquilateralTriangle (x + space_x, y + space_y, figure_size); gr.MoveTo (x + space_x + figure_size / 2, y + space_y); gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size); gr.Stroke (); break; case FigureType.RectangleWithLine: gr.Rectangle (x + space_x, y + space_y, figure_size, figure_size); gr.MoveTo (x + space_x, y + space_y); gr.LineTo (x + space_x + figure_size, y + space_y + figure_size); gr.MoveTo (x + space_x + figure_size, y + space_y); gr.LineTo (x + space_x, y + space_y + figure_size); gr.Stroke (); break; case FigureType.DiamondWithLine: gr.DrawDiamond (x + space_x, y + space_y, figure_size); gr.MoveTo (x + space_x + figure_size / 2, y + space_y); gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size); gr.Stroke (); break; case FigureType.CercleWithLine: gr.Arc (x + space_x + figure_size / 2, y + space_y + figure_size / 2, figure_size / 2, 0, 2 * Math.PI); gr.Stroke (); gr.MoveTo (x + space_x + figure_size / 2, y + space_y); gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size); gr.Stroke (); break; } }
public override void Draw(CairoContextEx gr, double x, double y, double size) { gr.Arc (size / 2, size / 2, radius, 0, 2 * Math.PI); gr.Stroke(); }
public void DrawBalance(CairoContextEx gr, double x, double y, int index, bool full) { const double width = 0.5; double fig_x = x + 0.1, fig_y = y - 0.08; int total = (full == true) ? (elements * 2) : elements; for (int i = 0; i < total; i++) { switch (balances[i + index]) { case 1: gr.DrawEquilateralTriangle (fig_x, fig_y, 0.05); break; case 2: gr.Arc (fig_x + (0.05 / 2), fig_y + (0.05 / 2) + 0.003, (0.05 / 2), 0, 2 * Math.PI); gr.Stroke (); break; case 3: gr.Rectangle (fig_x, fig_y + 0.005, 0.045, 0.045); gr.Stroke (); break; } if (i == elements - 1) fig_x = x + 0.54; else fig_x += 0.07; } gr.DrawImageFromAssembly ("balance.svg", x + 0.02, y - 0.08, 0.9, 0.25); }
private void DrawObject(CairoContextEx gr, int area_width, int area_height) { palette.Alpha = alpha; double x = DrawAreaX + 0.15, y = DrawAreaY + 0.1; gr.Color = palette.Cairo (ColorPalette.Id.Black); double pos_x = x, pos_y = y; const double figure_size = 0.6; const double square_size = figure_size / NUMCOLUMNS ; const double center_square = square_size / 2; double radius_square = .8 * (square_size - (LineWidth *2)) / 2; gr.Rectangle (pos_x, pos_y, figure_size, figure_size); gr.Stroke (); for (int line = 0; line < NUMCOLUMNS - 1; line++) // Horizontal { pos_y += square_size; gr.MoveTo (pos_x, pos_y); gr.LineTo (pos_x + figure_size, pos_y); gr.Stroke (); } pos_y = y; for (int column = 0; column < NUMCOLUMNS - 1; column++) // Vertical { pos_x += square_size; gr.MoveTo (pos_x, pos_y); gr.LineTo (pos_x, pos_y + figure_size); gr.Stroke (); } pos_y = y + center_square; pos_x = x + center_square; for (int i = 0,itcolor=0; i < MAXDOTS && itcolor<palette.Count; i++) { int dx,dy; Color color = palette.Cairo(itcolor); dx = (location_order[i]) % NUMCOLUMNS; dy = (location_order[i]) / NUMCOLUMNS; gr.Arc (pos_x+square_size*dx, pos_y+square_size*dy,radius_square,0,2*Math.PI); gr.FillGradient (pos_x+square_size*dx, pos_y+square_size*dy, radius_square, radius_square, color); if (i==dotsPerColor[itcolor]) itcolor++; } }
private void DrawFigure(CairoContextEx gr, double x, double y, FigureElement[] figure) { const double cercle_size = 0.15; gr.Stroke (); gr.Arc (x + cercle_size / 2, y + cercle_size / 2, cercle_size / 2, 0, 2 * Math.PI); gr.Stroke (); for (int i = 0; i < figure.Length; i++) DrawFigureElement (gr, x, y, figure[i]); gr.Stroke (); }
void DrawFigure(CairoContextEx gr, double x, double y, FigureType type) { double space_x, space_y; space_x = (rect_w - figure_size) / 2; space_y = (rect_h - figure_size) / 2; switch (type) { case FigureType.Triangle: gr.DrawEquilateralTriangle (x + space_x, y + space_y, figure_size); break; case FigureType.Square: gr.Rectangle (x + space_x, y + space_y, figure_size, figure_size); gr.Stroke (); break; case FigureType.Pentagon: gr.DrawPentagon (x + space_x, y + space_y, figure_size); break; case FigureType.Circle: gr.Arc (x + space_x + figure_size / 2, y + space_y + figure_size / 2, figure_size / 2, 0, 2 * Math.PI); gr.Stroke (); break; default: throw new InvalidOperationException (); } }
static void DrawClock(CairoContextEx gr, double x, double y, int hand_short, int hand_large, bool draw_large) { const double radius = figure_size / 2; double x0, y0; int num, degrees; gr.Arc (x, y, radius, 0, 2 * Math.PI); gr.Stroke (); for (degrees = 0; degrees < 360; degrees+= 30) { x0 = radius * Math.Cos (degrees * radian); y0 = radius * Math.Sin (degrees * radian); // Small lines gr.MoveTo (x + 0.9 * x0, y + 0.9 * y0); gr.LineTo (x + x0, y + y0); gr.Stroke (); // Numbers num = (degrees / 30) + 3; if (num > 12) num = num - 12; gr.DrawTextCentered (x + x0 * 0.75, y + y0 * 0.75, num.ToString ()); gr.Stroke (); } if (draw_large) { // Hand Large degrees = (hand_large - 3) * 30; x0 = radius * Math.Cos (degrees * radian); y0 = radius * Math.Sin (degrees * radian); gr.MoveTo (x, y); gr.LineTo (x + x0 * 0.55, y + y0 * 0.55); gr.Stroke (); } // Hand Short degrees = (hand_short - 3) * 30; x0 = radius * Math.Cos (degrees * radian); y0 = radius * Math.Sin (degrees * radian); gr.MoveTo (x, y); gr.LineTo (x + x0 * 0.4, y + y0 * 0.4); gr.Stroke (); }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double first_x, x, y; double figure_size = 0.07 + (0.01 * (5 - lines)); double margin = 0; base.Draw (gr, area_width, area_height, rtl); // Figure 1 margin = ((1.0 - (figure_size * lines * 2)) / 2); x = first_x = margin + (figure_size * lines / 2) + figure_size / 2; y = DrawAreaY + 0.2; for (int line = 0; line < lines + 1; line++) { for (int circles = 0; circles < line; circles++) { gr.Arc (x, y, figure_size / 2, 0, 2 * Math.PI); gr.Stroke (); x += figure_size; } x = first_x = first_x - (figure_size / 2); y += figure_size; } // Figure 2 first_x = margin + (figure_size * lines); y = DrawAreaY + 0.2 + figure_size; for (int line = 0; line < lines; line++) { x = first_x = first_x + (figure_size / 2); for (int circles = 0; circles < lines - line; circles++) { gr.Arc (x, y, figure_size / 2, 0, 2 * Math.PI); gr.Stroke (); x += figure_size; } y += figure_size; } }
public void DrawFigure(CairoContextEx gr, double x, double y, bool [] puzzle, int index) { double pos_x = x, pos_y = y; double square_size = figure_size / lines; double center_square = square_size / 2; double radius_square = (square_size - (LineWidth *2)) / 2.5; gr.Rectangle (pos_x, pos_y, figure_size, figure_size); gr.Stroke (); for (int line = 0; line < lines - 1; line++) // Horizontal { pos_y += square_size; gr.MoveTo (pos_x, pos_y); gr.LineTo (pos_x + figure_size, pos_y); gr.Stroke (); } pos_y = y; for (int column = 0; column < columns - 1; column++) // Vertical { pos_x += square_size; gr.MoveTo (pos_x, pos_y); gr.LineTo (pos_x, pos_y + figure_size); gr.Stroke (); } pos_y = y + center_square; pos_x = x + center_square; for (int line = 0; line < lines; line++) // Circles { for (int column = 0; column < columns; column++) { if (puzzle[index + (columns * line) + column] == false) continue; gr.Arc (pos_x + (square_size * column), pos_y, radius_square, 0, 2 * Math.PI); gr.Fill (); gr.Stroke (); } pos_y += square_size; } }
static void DrawFigure(CairoContextEx gr, double x, double y, Figure figure) { switch (figure) { case Figure.Pentagon: gr.DrawPentagon (x, y, figure_size); break; case Figure.Circle: gr.Arc (x + figure_size / 2, y + (figure_size / 2), figure_size / 2, 0, 2 * Math.PI); break; case Figure.Triangle: gr.DrawEquilateralTriangle (x, y, figure_size); break; default: throw new InvalidOperationException ("Invalid figure type"); } gr.Stroke (); }
private void DrawFigureElement(CairoContextEx gr, double x, double y, FigureElement figure) { switch (figure.element) { case Element.SmallCircle: gr.Arc (x + figure.x + small_size / 2, y + figure.y + small_size / 2, small_size, 0, 2 * Math.PI); break; case Element.MediumCircle: gr.Arc (x + figure.x + medium_size / 2, y + figure.y + medium_size / 2, medium_size, 0, 2 * Math.PI); break; case Element.MediumCircleWithChild: gr.Arc (x + figure.x + medium_size / 2, y + figure.y + medium_size / 2, medium_size, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + figure.x + medium_size / 2, y + figure.y + medium_size / 2, small_size, 0, 2 * Math.PI); break; } gr.Stroke (); }
private static void DrawDiamon(CairoContextEx gr, double x, double y, CerclePosition cercles) { double distance = 0.04; gr.MoveTo (x + figure_size / 2, y); gr.LineTo (x, y + figure_size / 2); gr.LineTo (x + figure_size / 2, y + figure_size); gr.LineTo (x + figure_size, y + figure_size / 2); gr.LineTo (x + figure_size / 2, y); gr.Stroke (); if ((cercles & CerclePosition.Top) == CerclePosition.Top) { gr.Arc (x + figure_size / 2, y + distance, 0.01, 0, 2 * Math.PI); gr.Stroke (); } if ((cercles & CerclePosition.Right) == CerclePosition.Right) { gr.Arc (x + figure_size - distance, y + figure_size / 2, 0.01, 0, 2 * Math.PI); gr.Stroke (); } if ((cercles & CerclePosition.Bottom) == CerclePosition.Bottom) { gr.Arc (x + figure_size / 2, y + figure_size - distance, 0.01, 0, 2 * Math.PI); gr.Stroke (); } if ((cercles & CerclePosition.Left) == CerclePosition.Left) { gr.Arc (x + distance, y + figure_size / 2, 0.01, 0, 2 * Math.PI); gr.Stroke (); } }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double rect_w = DrawAreaWidth / rows; double rect_h = DrawAreaHeight / columns; base.Draw (gr, area_width, area_height, rtl); for (int column = 0; column < columns; column++) { for (int row = 0; row < rows; row++) { gr.Color = DefaultDrawingColor; gr.Rectangle (DrawAreaX + row * rect_w, DrawAreaY + column * rect_h, rect_w, rect_h); gr.Stroke (); gr.DrawTextCentered (DrawAreaX + (rect_w / 2) + column * rect_w, (rect_h / 2) + DrawAreaY + row * rect_h, (numbers[column + (row * 4)]).ToString() ); if (numbers[column + (row * 4)] % divisor == 0 && good_pos != column + (row * 4)) { gr.Arc (DrawAreaX + (rect_w / 2) + column * rect_w, (rect_h / 2) + DrawAreaY + row * rect_h, 0.05, 0, 2 * Math.PI); gr.FillGradient (DrawAreaX + (rect_w / 2) + column * rect_w, (rect_h / 2) + DrawAreaY + row * rect_h, 0.05, 0.05); } gr.Stroke (); } } }
public void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { gr.Scale (area_width, area_height); gr.LineWidth = 0.01; gr.Color = new Cairo.Color (0, 0, 0, 1); gr.SetPangoLargeFontSize (); gr.DrawTextCentered (0.5, 0.1, ServiceLocator.Instance.GetService <ITranslations> ().GetString ("Get ready to memorize the next objects...")); gr.Stroke (); gr.SetPangoFontSize (0.35); gr.DrawTextCentered (0.5, 0.5, countdown_time.ToString ()); gr.Stroke (); gr.Arc (0.5, 0.5, 0.25, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (0.5, 0.5, 0.28, 0, 2 * Math.PI); gr.Stroke (); }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double first_x = DrawAreaX + 0.05; double first_y = DrawAreaY + 0.1; const double space_fromrect = 0.02, space_fromcircle = 0.01; int circles = 8; const double unit = 0.0625; base.Draw (gr, area_width, area_height, rtl); gr.Rectangle (first_x, first_y, unit * 8, unit * 8); gr.Stroke (); // |-------| gr.MoveTo (first_x, first_y - 0.04 - space_fromrect); gr.LineTo (first_x, first_y - space_fromrect); gr.Stroke (); gr.MoveTo (first_x, first_y - 0.02 - space_fromrect); gr.LineTo (first_x + 0.5, first_y - 0.02 - space_fromrect); gr.Stroke (); gr.MoveTo (first_x + 0.5, first_y - 0.04 - space_fromrect); gr.LineTo (first_x + 0.5, first_y - space_fromrect); gr.Stroke (); gr.MoveTo (first_x + 0.2, first_y - 0.06 - space_fromrect); gr.ShowPangoText (ServiceLocator.Instance.GetService <ITranslations> ().GetString ("8 units")); gr.Stroke (); // --- // | // | // | // --- gr.MoveTo (first_x - space_fromrect, first_y); gr.LineTo (first_x - space_fromrect - 0.04, first_y); gr.Stroke (); gr.MoveTo (first_x - space_fromrect - 0.02, first_y); gr.LineTo (first_x - space_fromrect - 0.02, first_y + 0.5); gr.Stroke (); gr.MoveTo (first_x - space_fromrect, first_y + 0.5); gr.LineTo (first_x - space_fromrect - 0.04, first_y + 0.5); gr.Stroke (); gr.MoveTo (first_x - space_fromrect - 0.07, first_y + 0.3); gr.ShowPangoText (ServiceLocator.Instance.GetService <ITranslations> ().GetString ("8 units"), false, -1, 270 * Math.PI/180); gr.Stroke (); // Sample circle gr.Arc (first_x + 0.7, first_y + 0.1, unit / 2, 0, 2 * Math.PI); gr.Stroke (); // |-------| gr.MoveTo (first_x + 0.65, first_y + 0.05 - 0.04 - space_fromcircle); gr.LineTo (first_x + 0.65, first_y + 0.05 - space_fromcircle); gr.Stroke (); gr.MoveTo (first_x + 0.65, first_y + 0.05 - 0.02 - space_fromcircle); gr.LineTo (first_x + 0.65 + 0.1, first_y + 0.05 - 0.02 - space_fromcircle); gr.Stroke (); gr.MoveTo (first_x + 0.65 + 0.1, first_y + 0.05 - 0.04 - space_fromcircle); gr.LineTo (first_x + 0.65 + 0.1, first_y + 0.05 - space_fromcircle); gr.Stroke (); gr.MoveTo (first_x + 0.65, first_y - 0.04 - space_fromcircle); gr.ShowPangoText (ServiceLocator.Instance.GetService <ITranslations> ().GetString ("1 unit")); gr.Stroke (); // --- // | // | // | // --- gr.MoveTo (first_x + 0.65 - space_fromcircle, first_y + 0.05); gr.LineTo (first_x + 0.65 - space_fromcircle - 0.04, first_y + 0.05); gr.Stroke (); gr.MoveTo (first_x + 0.65 - space_fromcircle - 0.02, first_y + 0.05); gr.LineTo (first_x + 0.65 - space_fromcircle - 0.02, first_y + 0.05 + 0.1); gr.Stroke (); gr.MoveTo (first_x + 0.65 - space_fromcircle, first_y + 0.1 + 0.05); gr.LineTo (first_x + 0.65 - space_fromcircle - 0.04, first_y + 0.1 + 0.05); gr.Stroke (); gr.MoveTo (first_x + 0.65 - space_fromcircle - 0.08, first_y + 0.15); gr.ShowPangoText (ServiceLocator.Instance.GetService <ITranslations> ().GetString ("1 unit"), false, -1, 270 * Math.PI/180); gr.Stroke (); if (Answer.Draw == false) return; double x; for (int line = 0; line < 9; line++) { for (int circle = 0; circle < circles; circle++) { x = first_x + (unit / 2) + (circle * unit); if (circles == 7) x+= unit / 2; gr.Arc (x, (unit / 2) + first_y + (unit * line) - (unit / 8) * line, (unit / 2), 0, 2 * Math.PI); gr.Stroke (); } if (circles ==8) circles = 7; else circles = 8; } }
private static void DrawAndConnectPoints(CairoContextEx gr, double x, double y, Circle[] circles, bool connect) { const double point_size = 0.01; for (int i = 0; i < circles.Length; i++) { gr.Arc (x + point_size + circles[i].x, y + point_size + circles[i].y, point_size, 0, 2 * Math.PI); gr.Fill (); gr.Stroke (); } if (connect == false) return; gr.Save (); gr.LineWidth = 0.003; double offset = point_size; for (int from = 0; from < circles.Length; from++) { for (int to = 0; to < circles.Length; to++) { gr.MoveTo (x + circles[from].x+ offset, y + circles[from].y + offset); gr.LineTo (x + circles[to].x + offset, y + circles[to].y + offset); gr.Stroke (); } } gr.Restore (); }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double x = DrawAreaX + 0.2, y = DrawAreaY; double x0, y0, degrees; int pos; base.Draw (gr, area_width, area_height, rtl); gr.Arc (x + arc_centerx, y + arc_centery, radius, 0, 2 * Math.PI); gr.Stroke (); for (int slice = 0; slice < total_slices; slice++) { degrees = radian * slice * (360 / total_slices); gr.MoveTo (x + arc_centerx, y + arc_centery); gr.LineTo (x + arc_centerx + (radius * Math.Cos (degrees)), y + arc_centery + (radius * Math.Sin (degrees))); if (slice > total_slices - 1) continue; if (slice == 0) { degrees = radian * (slice * ((360 / total_slices)) + (360 / 12)); x0 = 0.5 * radius * Math.Cos (degrees); y0 = 0.5 * radius * Math.Sin (degrees); gr.DrawTextCentered (x + arc_centerx + x0, y + arc_centery + y0, "?"); continue; } if (slice < half_slices) { pos = random_indices [slice]; DrawSliceText (gr, x + arc_centerx, y + arc_centery, slice, (sum_offset + slices [pos * items_per_slice]).ToString (), (sum_offset + slices [1 + (pos * items_per_slice)]).ToString (), (sum_offset + slices [2 + (pos * items_per_slice)]).ToString ()); } else { pos = random_indices [slice - half_slices]; DrawSliceText (gr, x + arc_centerx, y + arc_centery, slice, slices_opposite [pos * items_per_slice].ToString (), slices_opposite [2 + (pos * items_per_slice)].ToString (), slices_opposite [1 + (pos * items_per_slice)].ToString ()); } } gr.MoveTo (0.1, 0.55); gr.ShowPangoText (ServiceLocator.Instance.GetService <ITranslations> ().GetString ("Choose one of the following:")); gr.Stroke (); }
public override void Draw(CairoContextEx gr, int area_width, int area_height, bool rtl) { double x = DrawAreaX + 0.05; double y = DrawAreaY + 0.1; base.Draw (gr, area_width, area_height, rtl); // Three circles gr.Arc (x + 0.06, y, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x, y + 0.1, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + 0.11, y + 0.1, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.MoveTo (x + 0.02, y + 0.18); gr.ShowPangoText ("CDE"); gr.Stroke (); // Two linked circles gr.Arc (x + 0.3, y, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + 0.3 + 0.06, y + 0.05, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.MoveTo (x + 0.30, y + 0.18); gr.ShowPangoText ("ACF"); gr.Stroke (); // Two squares gr.Rectangle (x + 0.5, y, 0.1, 0.1); gr.Rectangle (x + 0.62, y, 0.1, 0.1); gr.Stroke (); gr.MoveTo (x + 0.58, y + 0.18); gr.ShowPangoText ("BDF"); gr.Stroke (); // Tree squares gr.Rectangle (x - 0.05, y + 0.35, 0.1, 0.1); gr.Rectangle (x + 0.06 - 0.05, y + 0.37, 0.1, 0.1); gr.Rectangle (x + 0.12 - 0.05, y + 0.39, 0.1, 0.1); gr.Stroke (); gr.MoveTo (x + 0.04, y + 0.53); gr.ShowPangoText ("ABE"); gr.Stroke (); x += 0.25; y += 0.35; switch (question) { case QuestionType.TwoSquares: gr.Rectangle (x, y, 0.1, 0.1); gr.Rectangle (x + 0.05, y + 0.03, 0.1, 0.1); gr.Stroke (); gr.MoveTo (x + 0.05, y + 0.18); break; case QuestionType.TwoCercles: gr.Arc (x + 0.05, y + 0.05, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + 0.12 + 0.05, y + 0.05, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.MoveTo (x + 0.1, y + 0.18); break; case QuestionType.ThreeCercles: gr.Arc (x + 0.05 + 0.06, y + 0.04, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + 0.05, y + 0.06 + 0.04, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.Arc (x + 0.05 + 0.11, y + 0.06 + 0.04, 0.05, 0, 2 * Math.PI); gr.Stroke (); gr.MoveTo (x + 0.1, y + 0.18); break; } gr.ShowPangoText ("?"); gr.Stroke (); }