// End конструктор public void Plot(PaintPoint ds, int X0, int Y0, double scaleX, double scaleY) { //paint = new Paint(Rts, pnlCh); //paint.Plot(); //, pnlCh); //MessageBox.Show(pnlCh.Controls.Count.ToString()); Ant.MakeCurrent(); // очистка буфера цвета и буфера глубины Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); // очищение текущей матрицы Gl.glLoadIdentity(); // установка черного цвета Gl.glColor3f(100, 0, 0); // помещаем состояние матрицы в стек матриц Gl.glPushMatrix(); // выполняем перемещение в пространстве по осям X и Y Gl.glTranslated(X0, Y0, 0); // Gl.glScaled(scaleX, scaleY, 1); // Gl.glLineWidth(1); Gl.glBegin(Gl.GL_QUADS);//GL_LINES); // далее мы рисуем координатные оси и стрелки на их концах foreach (var bar in BarsDraw.Bars) { foreach (var k in bar.Point) { Gl.glVertex2d(k.Of.X, k.Of.Y); Gl.glVertex2d(k.Of.X, k.Of.Y + hightCl - 1); Gl.glVertex2d(k.To.X, k.To.Y + hightCl - 1); Gl.glVertex2d(k.To.X, k.To.Y); } } // завершаем режим рисования Gl.glEnd(); //axis.PlotAxis(X0,Y0,scaleX,scaleY); Gl.glPopMatrix(); Gl.glFlush(); Ant.Invalidate(); axis.PlotAxis1(ds, X0, Y0, scaleX, scaleY); //FontPlot.Plot(ds, startPrice, delta, Ant.Height, Ant.Width, Paint.hightCl, Paint.widthCl, X0, Y0); Ant.Invalidate(); }
public void PlotAxis1(PaintPoint ds, int X0, int Y0, double scaleX, double scaleY) { x += x0 - X0; y += y0 - Y0; // sx = sx + sX - scaleX; // sy = sy + sY - scaleY; // очищение текущей матрицы Gl.glLoadIdentity(); // установка черного цвета // Gl.glColor3f(100, 0, 0); // помещаем состояние матрицы в стек матриц Gl.glPushMatrix(); Gl.glColor3f(0.882f, 0.572f, 0.094f); Gl.glTranslated(X0 + x, Y0 + y, 0); // Gl.glScaled(sx, sy, 1); // Gl.glScaled(sx, sy, 1); Gl.glLineWidth(1); Gl.glBegin(Gl.GL_LINES); // далее мы рисуем координатные оси и стрелки на их концах //Y Gl.glVertex2d(-widthY, hightWindow / 2); Gl.glVertex2d(-widthY, -hightWindow / 2 + highX); //X Gl.glVertex2d(-widthWindow, -hightWindow / 2 + highX); Gl.glVertex2d(-widthY, -hightWindow / 2 + highX); x0 = X0; y0 = Y0; // sX = scaleX; // sY = scaleY; // завершаем режим рисования Gl.glEnd(); FontPlot.Plot(ds, startPrice, delta, hightWindow, widthWindow, Paint.hightCl, Paint.widthCl, X0, Y0); // Gl.glBegin(Gl.GL_TEXCOORD1_BIT_PGI); // Gl.glRasterPos3d(-widthY, 0, 1); // .glutBitmapString(, startPrice.ToString()); // Gl.glEnd(); Gl.glPopMatrix(); Gl.glFlush(); }
// Прорисовка шрифтов на экране public static void Plot(PaintPoint ds, double stPr, double delta, int hi, int we, int hiCl, int weCl, int X0, int Y0) { x1 += x0 - X0; y1 += y0 - Y0; // double ff = y1 / delta; int hag = (int)(y1 / hiCl); //delta); // К-во кластеров в дельта смещении по оси цен int ost = Convert.ToInt32(y1 % hiCl); // Пикселей до следующего кластера цены double pr = stPr + (hag * delta); // Цена для отображения в соответствии со смещением int dobavka = (Paint.hightCl - 10) / 2; // Цена по центру кластера dobavka -= ost; int dobavka2 = dobavka; dobavka -= hiCl; dobavka2 += hiCl; int delPrice = 10; if (Paint.hightCl >= 7 && Paint.hightCl < 10) { delPrice = 20; } else if (Paint.hightCl >= 5 && Paint.hightCl < 7) { delPrice = 40; } else if (Paint.hightCl >= 3 && Paint.hightCl < 5) { delPrice = 50; } else if (Paint.hightCl >= 2 && Paint.hightCl < 3) { delPrice = 100; } else if (Paint.hightCl < 2) { delPrice = 100; } Gl.glColor3f(1.0f, 1.0f, 1.0f); int d = 0; for (double j = 0; j <= hi / 2; j += hiCl) { dobavka += hiCl; double price = pr + d * delta; if ((price) % delPrice == 0) { string str = (price).ToString(); Byte i = 0; foreach (var ch in str) { Gl.glBegin(Gl.GL_LINE_STRIP); foreach (var f in FontPlot.Symbols[ch]) { Gl.glVertex2i(-Axis.widthY + i * 9 + 2 + f.X, dobavka + f.Y); } Gl.glEnd(); i++; } } d++; } d = 0; for (double j = 0; j >= -hi / 2; j -= hiCl) { if ((dobavka2 -= hiCl) < -hi / 2 + 20) { break; } double price = pr - d * delta; if ((price) % delPrice == 0) { string str = (price).ToString(); Byte i = 0; foreach (var ch in str) { Gl.glBegin(Gl.GL_LINE_STRIP); foreach (var f in FontPlot.Symbols[ch]) { if (dobavka + f.Y < -hi / 2) { break; } Gl.glVertex2i(-Axis.widthY + i * 9 + 2 + f.X, dobavka2 + f.Y); } Gl.glEnd(); i++; } } d++; } x0 = X0; y0 = Y0; int sum = 0; int t = ds.Bars.Count - 1; int numBar = ds.Bars.Count - 1; int deltaNum = 60 / weCl + 1; int printNum = numBar - deltaNum; for (int i = ds.Bars.Count - 1; i > 0; i--) { if (ds.Bars[i].Point[0].Of.X >= x1 - Axis.widthY - weCl && ds.Bars[i].Point[0].Of.X < x1 - Axis.widthY) { numBar = i; break; } } for (int i = ds.Bars.Count - 1; i > 0; i--) { // sum += weCl; if (printNum <= numBar && numBar >= numBar - we / weCl) { string str = (ds.Bars[printNum].date.Hour + ":" + ds.Bars[printNum].date.Minute).ToString(); int startPrint = ds.Bars[printNum].Point[0].Of.X - x1 + weCl / 2 - 20; byte h = 0; foreach (var ch in str) { if (ch == ':') { Gl.glBegin(Gl.GL_LINES); foreach (var f in FontPlot.Symbols[ch]) { Gl.glVertex2i(startPrint + h * 9 + 2 + f.X, -hi / 2 + 1 + f.Y); } Gl.glEnd(); startPrint += 6; continue; } Gl.glBegin(Gl.GL_LINE_STRIP); foreach (var f in FontPlot.Symbols[ch]) { Gl.glVertex2i(startPrint + h * 9 + f.X, -hi / 2 + 1 + f.Y); } Gl.glEnd(); h++; } } printNum -= deltaNum; if (printNum < 0) { break; } // numBar--; } }