public GDI(DrawingModes DM, PenStyles PS, int PW, int PC) { // Get screen's device context hDC = GetDC(ScreenHWND); // Indicates if pen object created and // attached to screen's device context PenCreated = true; // Apply new drawing modes, colors e.t.c. this.CPenWidth = PW; this.CPenColor = PC; this.CPenStyle = PS; this.CDrawMode = DM; // Obtain system resources hPEN = CreatePen(PS, PW, PC); OldROP = SetROP2(hDC, DM); SelectObject(hDC, hPEN); }
void surface_DrawingModeChanged(object source, DrawingModes drawingMode) { switch (drawingMode) { case DrawingModes.None: SetButtonChecked(btnCursor); break; case DrawingModes.Ellipse: SetButtonChecked(btnEllipse); break; case DrawingModes.Rect: SetButtonChecked(btnRect); break; case DrawingModes.Text: SetButtonChecked(btnText); break; case DrawingModes.Line: SetButtonChecked(btnLine); break; case DrawingModes.Arrow: SetButtonChecked(btnArrow); break; case DrawingModes.Crop: SetButtonChecked(btnCrop); break; case DrawingModes.Highlight: SetButtonChecked(btnHighlight); break; case DrawingModes.Obfuscate: SetButtonChecked(btnObfuscate); break; case DrawingModes.Path: SetButtonChecked(btnFreehand); break; } }
private static extern Int32 SetROP2(IntPtr hDC, DrawingModes nDrawMode);
public List<Label> PrintValuesInRange(Graphics g, int x1, int x2, DrawingModes m) { List<Label> labels; int i, j; if(!FitRangeToData(x1, x2, out i, out j)) { return null; } double smallest = GetSmallestInRange(i, j); double range = GetLargestInRange(i, j) - smallest; labels = DrawGridLines(g, i, j, (int)smallest, (int)(smallest + range)); switch(m) { case DrawingModes.Close: List<PointF> points = new List<PointF>(); for(int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double y = (set.Values[idx].close - smallest) * 400 / range; points.Add(new PointF((float)x, (float)y)); } g.DrawLines(Pens.Red, points.ToArray()); break; case DrawingModes.HiLoOpenClose: double len = Math.Min(8, Math.Floor(400 / (double)(j - i))); len += len < 5 && len > 0.25 ? 1 : 0; for(int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double hi = (set.Values[idx].high - smallest) * 400 / range; double lo = (set.Values[idx].low - smallest) * 400 / range; double open = (set.Values[idx].open - smallest) * 400 / range; double close = (set.Values[idx].close - smallest) * 400 / range; g.DrawLine(Pens.Red, (float)x, (float)lo, (float)x, (float)hi); g.DrawLine(Pens.Red, (float)x, (float)open, (float)(x - len), (float)open); g.DrawLine(Pens.Red, (float)x, (float)close, (float)(x + len), (float)close); } break; case DrawingModes.CandleSticks: double width = Math.Min(8, Math.Ceiling(400 / (double)(j - i))); width += width < 5 ? 1 : 0; for (int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double hi = (set.Values[idx].high - smallest) * 400 / range; double lo = (set.Values[idx].low - smallest) * 400 / range; double open = (set.Values[idx].open - smallest) * 400 / range; double close = (set.Values[idx].close - smallest) * 400 / range; Pen p = open <= close ? Pens.Red : Pens.Black; g.DrawLine(p, (float)x, (float)lo, (float)x, (float)hi); if(open <= close) { g.FillRectangle(Brushes.Red, (float)(x - (width / 2)), (float)open, (float)width, (float)(close - open)); } else { g.FillRectangle(Brushes.Black, (float)(x - (width / 2)), (float)close, (float)width, (float)(open - close)); } } break; default: break; } return labels; }
public List <Label> PrintValuesInRange(Graphics g, int x1, int x2, DrawingModes m) { List <Label> labels; int i, j; if (!FitRangeToData(x1, x2, out i, out j)) { return(null); } double smallest = GetSmallestInRange(i, j); double range = GetLargestInRange(i, j) - smallest; labels = DrawGridLines(g, i, j, (int)smallest, (int)(smallest + range)); switch (m) { case DrawingModes.Close: List <PointF> points = new List <PointF>(); for (int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double y = (set.Values[idx].close - smallest) * 400 / range; points.Add(new PointF((float)x, (float)y)); } g.DrawLines(Pens.Red, points.ToArray()); break; case DrawingModes.HiLoOpenClose: double len = Math.Min(8, Math.Floor(400 / (double)(j - i))); len += len <5 && len> 0.25 ? 1 : 0; for (int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double hi = (set.Values[idx].high - smallest) * 400 / range; double lo = (set.Values[idx].low - smallest) * 400 / range; double open = (set.Values[idx].open - smallest) * 400 / range; double close = (set.Values[idx].close - smallest) * 400 / range; g.DrawLine(Pens.Red, (float)x, (float)lo, (float)x, (float)hi); g.DrawLine(Pens.Red, (float)x, (float)open, (float)(x - len), (float)open); g.DrawLine(Pens.Red, (float)x, (float)close, (float)(x + len), (float)close); } break; case DrawingModes.CandleSticks: double width = Math.Min(8, Math.Ceiling(400 / (double)(j - i))); width += width < 5 ? 1 : 0; for (int idx = set.IndexOfKey(i); idx <= set.IndexOfKey(j); ++idx) { double x = (set.Values[idx].date - i) * 400 / (j - i); double hi = (set.Values[idx].high - smallest) * 400 / range; double lo = (set.Values[idx].low - smallest) * 400 / range; double open = (set.Values[idx].open - smallest) * 400 / range; double close = (set.Values[idx].close - smallest) * 400 / range; Pen p = open <= close ? Pens.Red : Pens.Black; g.DrawLine(p, (float)x, (float)lo, (float)x, (float)hi); if (open <= close) { g.FillRectangle(Brushes.Red, (float)(x - (width / 2)), (float)open, (float)width, (float)(close - open)); } else { g.FillRectangle(Brushes.Black, (float)(x - (width / 2)), (float)close, (float)width, (float)(open - close)); } } break; default: break; } return(labels); }
public static PoIStyle GetBasicStyle(string name = "Name", DrawingModes mode = DrawingModes.Point) { if (defaultStyle != null) return defaultStyle; defaultStyle = new PoIStyle { MinResolution = 0, MaxResolution = -1, DrawingMode = mode, CallOutForeground = Colors.Black, CallOutFillColor = Colors.White, StrokeOpacity = 1.0, StrokeWidth = 1.0, StrokeColor = Colors.Black, FillColor = Colors.Black, FillOpacity = 1.0, NameLabel = name, Visible = true, Category = "Other", Icon = "", CanDelete = true, CanRotate = true, CanEdit = true, CanMove = true, CallOutOrientation = DataServer.CallOutOrientation.Right, CallOutTimeOut = 5, IconHeight = 30, IconWidth = 30, ShowOnTimeline = null, TapMode = DataServer.TapMode.CallOutPopup, TitleMode = TitleModes.None, AddMode = AddModes.Silent, TimelineBehaviour = TimelineBehaviours.None, AutoCallOutLabels = false, MaxTitleResolution = -1, InnerTextColor = Colors.White, Cluster = false, ScalePoi = null, ScaleStartResolution = null, MaxScale = null, ScaleUnits = null, SubTitles = "" }; return defaultStyle; }