public void RefreshBorders() { drawArea.MakeCurrent(); SetViewPort(); double scaleX = (double)drawArea.Width / defaultWidth; double scaleY = (double)drawArea.Height / defaultHeight; proportion = (float)(scaleX / scaleY); borders.Y = (float)((-10.0 * scaleY * scale) + offsety); borders.Height = (float)(20.0 * scaleY * scale); borders.X = (float)(-10.0 * scaleX * scale + offsetx); borders.Width = (float)(20.0 * scaleX * scale); // настройка проекции Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); // теперь необходимо корректно настроить 2D ортогональную проекцию // в зависимости от того, какая сторона больше // мы немного варьируем то, как будет сконфигурированный настройки проекции Glu.gluOrtho2D(borders.Left, borders.Right, borders.Top, borders.Bottom); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); pixelsPerUnit = ((double)drawArea.Height / borders.Height); }
// 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 Plot() { if (!Window.add) { PlotSer = true; //paint = new Paint(Rts, pnlCh); //paint.Plot(); //, pnlCh); //MessageBox.Show(pnlCh.Controls.Count.ToString()); Chart.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); // далее мы рисуем координатные оси и стрелки на их концах int l = hiCl - 1; int From = -X0 - wiCl; int To = -X0 + ScreenW; // string str; foreach (var ds in DrawSer.Bars) { var gfgf = ds.Value.Price.ElementAt(0).Value[0]; if (gfgf >= From && gfgf <= To) { foreach (var pr in ds.Value.Price) { Gl.glVertex2d(pr.Value[0], pr.Value[2]); Gl.glVertex2d(pr.Value[0], pr.Value[2] + l); Gl.glVertex2d(pr.Value[1], pr.Value[2] + l); Gl.glVertex2d(pr.Value[1], pr.Value[2]); } } } // завершаем режим рисования Gl.glEnd(); // установка черного цвета Gl.glColor3f(0, 0, 50); Gl.glBegin(Gl.GL_POLYGON); Gl.glVertex2d(DrawSer.lastPriceX, DrawSer.lastPriceY); Gl.glVertex2d(DrawSer.lastPriceX + 10, DrawSer.lastPriceY + 10); Gl.glVertex2d(DrawSer.lastPriceX + 80, DrawSer.lastPriceY + 10); Gl.glVertex2d(DrawSer.lastPriceX + 80, DrawSer.lastPriceY - 10); Gl.glVertex2d(DrawSer.lastPriceX + 10, DrawSer.lastPriceY - 10); Gl.glEnd(); Gl.glColor3f(1, 1, 1); string strr = DrawSer.lastPrice.ToString(); int i = 0; foreach (var ch in strr) { Gl.glBegin(Gl.GL_LINE_STRIP); foreach (var f in FontPlot.Symbols[ch]) { // Glut.glutStrokeCharacter(Glut.GLUT_STROKE_ROMAN, '3'); Gl.glVertex2i(DrawSer.lastPriceX + 15 + i * 9 + f.X, DrawSer.lastPriceY - 5 + Convert.ToInt32(f.Y)); } Gl.glEnd(); i++; } Gl.glColor3f(0.172f, 0.2f, 0.215f); Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glVertex2d(DrawSer.lastPriceX, DrawSer.lastPriceY); Gl.glVertex2d(0, DrawSer.lastPriceY); Gl.glEnd(); // PlotNum(); Gl.glPopMatrix(); Gl.glFlush(); Chart.Invalidate(); // PlotNum(); PlotAxis(); PlotSer = false; } }