public static void DrawPieMark(RectangleBox rect, double xpos, double ypos, double size, double percent, RGBAColor col, string text, double depth = -1.0, bool bold = false)
 {
     UpdateDepth(depth);
     Gl.glPushMatrix();
     Gl.glTranslated(rect.left, rect.bottom, currentdepth);
     Gl.glPushMatrix();
     Gl.glTranslated(xpos, ypos, 0);
     glColor4d(col);
     if (bold)
     {
         Gl.glLineWidth(2);
     }
     Gl.glBegin(Gl.GL_LINE_STRIP);
     for (int i = 0; i <= 32; i++)
     {
         Gl.glVertex2d(-size * Math.Sin((double)i / 32 * 2 * Math.PI), size * Math.Cos((double)i / 32 * 2 * Math.PI));
     }
     Gl.glEnd();
     Gl.glLineWidth(1);
     glColor4d(col.Fade(0.5));
     Gl.glBegin(Gl.GL_TRIANGLE_FAN);
     Gl.glVertex2d(0, 0);
     for (int i = 0; i <= 32 * percent; i++)
     {
         Gl.glVertex2d(-0.8 * size * Math.Sin((double)i / 32 * 2 * Math.PI), 0.8 * size * Math.Cos((double)i / 32 * 2 * Math.PI));
     }
     Gl.glEnd();
     Gl.glPopMatrix();
     DrawString(xpos - 5, ypos - 5, text, new RGBAColor(1, 1, 1, 1));
     Gl.glPopMatrix();
 }
 public static void DrawEffectExcitation(RectangleBox rect, RGBAColor col, double intensity, double depth = -1.0)
 {
     if (Globals.enableeffects)
     {
         UpdateDepth(depth);
         SetBlendMode(BlendModes.Add);
         Gl.glPushMatrix();
         Gl.glTranslated(rect.left, rect.bottom, currentdepth);
         double left = rect.Width * (1.0 - intensity);
         Gl.glBegin(Gl.GL_TRIANGLE_FAN);
         glColor4d(col.Fade(0));
         Gl.glVertex2d(left, 0);
         Gl.glVertex2d(left, rect.Height);
         glColor4d(col.Fade(0.5));
         Gl.glVertex2d(0.2 * left + 0.8 * rect.Width, rect.Height);
         Gl.glVertex2d(0.2 * left + 0.8 * rect.Width, 0);
         Gl.glEnd();
         Gl.glBegin(Gl.GL_TRIANGLE_FAN);
         glColor4d(col.Fade(0.5));
         Gl.glVertex2d(0.2 * left + 0.8 * rect.Width, 0);
         Gl.glVertex2d(0.2 * left + 0.8 * rect.Width, rect.Height);
         glColor4d(col);
         Gl.glVertex2d(rect.Width, rect.Height);
         Gl.glVertex2d(rect.Width, 0);
         Gl.glEnd();
         Gl.glPopMatrix();
         SetBlendMode(BlendModes.Normal);
     }
 }
        public static void SetStencil(RectangleBox rect, bool on)
        {
            if (on)
            {
                Gl.glEnable(Gl.GL_STENCIL_TEST);
                //Gl.glEnable(Gl.GL_DEPTH_TEST);
                Gl.glStencilFunc(Gl.GL_ALWAYS, 1, 0xFF);
                Gl.glStencilOp(Gl.GL_KEEP, Gl.GL_KEEP, Gl.GL_REPLACE);
                Gl.glStencilMask(0xFF);
                Gl.glDepthMask(Gl.GL_FALSE);
                Gl.glClear(Gl.GL_STENCIL_BUFFER_BIT);

                UpdateDepth(-1);
                Gl.glColor4d(1.0, 1.0, 1, 0);
                Gl.glPushMatrix();
                Gl.glTranslated(rect.left, rect.bottom, currentdepth);
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                Gl.glVertex2d(0, 0);
                Gl.glVertex2d(0, rect.Height);
                Gl.glVertex2d(rect.Width, rect.Height);
                Gl.glVertex2d(rect.Width, 0);
                Gl.glEnd();
                Gl.glPopMatrix();

                Gl.glStencilFunc(Gl.GL_EQUAL, 1, 0xFF);
                Gl.glStencilMask(0x00);
                Gl.glDepthMask(Gl.GL_TRUE);
            }
            else
            {
                Gl.glDisable(Gl.GL_STENCIL_TEST);
            }
        }
 public PanelMotion()
 {
     caption     = "Motions";
     boundingbox = new RectangleBox(Globals.defaultwindowwidth * 0.61 + Globals.panelspacingbetween / 2,
                                    Globals.defaultwindowwidth - Globals.panelspacingtoleft,
                                    Globals.panelspacingtotop,
                                    300);
     enablestencil = false;
 }
 public PanelExample()
 {
     caption     = "Example";
     boundingbox = new RectangleBox((Globals.defaultwindowwidth - Globals.panelspacingbetween) * Globals.panelanimationratio,
                                    Globals.defaultwindowwidth - Globals.panelspacingtoleft * Globals.panelanimationratio,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop - 200,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop);
     boundingbox.left = boundingbox.right - 1;
     bordercolor      = Globals.guicolors[1];
 }
Exemple #6
0
 public PanelRaw()
 {
     caption     = "Raw EMG - CH1   ";
     boundingbox = new RectangleBox(Globals.panelspacingtoleft,
                                    Globals.defaultwindowwidth * 0.61 - Globals.panelspacingbetween / 2,
                                    Globals.panelspacingtotop,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop - Globals.panelemgheight - Globals.panelspacingcolumn);
     samplelen   = 1.0 / (dispbuf.maxlen - 3) * boundingbox.Width;
     offsetsamps = -20.0;
 }
 public PanelMinecraftAction()
 {
     caption     = "Action";
     boundingbox = new RectangleBox((Globals.defaultwindowwidth - Globals.panelspacingbetween) * Globals.panelanimationratio,
                                    Globals.defaultwindowwidth - Globals.panelspacingtoleft * Globals.panelanimationratio,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop - 150 - Globals.panelspacingcolumn - 200,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop - 200 - Globals.panelspacingcolumn);
     boundingbox.left = boundingbox.right - 1;
     bordercolor      = Globals.guicolors[1];
 }
Exemple #8
0
 public PanelEMG()
 {
     caption     = "EMG Activations";
     boundingbox = new RectangleBox(Globals.panelspacingtoleft,
                                    Globals.defaultwindowwidth * 0.61 - Globals.panelspacingbetween / 2,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop - Globals.panelemgheight,
                                    Globals.defaultwindowheight - Globals.panelspacingtotop);
     samplelen   = 1.0 / (dispbuf.maxlen - 3) * boundingbox.Width;
     offsetsamps = -2.0;
 }
        public static void DrawRectangle(RectangleBox rect, RGBAColor col, double borderwidth, double depth = -1.0, bool outer = false, bool glow = false)
        {
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            glColor4d(col);
            double rectw = rect.right - rect.left, recth = rect.top - rect.bottom;
            double borderwidthr = outer?-borderwidth:borderwidth;

            if (borderwidth <= 0)
            {
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                Gl.glVertex2d(0, 0);
                Gl.glVertex2d(rectw, 0);
                Gl.glVertex2d(rectw, recth);
                Gl.glVertex2d(0, recth);
                Gl.glEnd();
            }
            else
            {
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                Gl.glVertex2d(0, 0);
                Gl.glVertex2d(rectw, 0);
                if (glow)
                {
                    glColor4d(col.Fade(0.0));
                }
                Gl.glVertex2d(rectw - borderwidthr, borderwidthr);
                Gl.glVertex2d(borderwidthr, borderwidthr);
                Gl.glVertex2d(borderwidthr, recth - borderwidthr);
                if (glow)
                {
                    glColor4d(col);
                }
                Gl.glVertex2d(0, recth);
                Gl.glEnd();
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                Gl.glVertex2d(rectw, recth);
                Gl.glVertex2d(rectw, 0);
                if (glow)
                {
                    glColor4d(col.Fade(0.0));
                }
                Gl.glVertex2d(rectw - borderwidthr, borderwidthr);
                Gl.glVertex2d(rectw - borderwidthr, recth - borderwidthr);
                Gl.glVertex2d(borderwidthr, recth - borderwidthr);
                if (glow)
                {
                    glColor4d(col);
                }
                Gl.glVertex2d(0, recth);
                Gl.glEnd();
            }
            Gl.glPopMatrix();
        }
        public static void DrawMarkers(RectangleBox rect, List <Point2D> pts, RGBAColor col, int style, double size, double depth = -1.0)
        {
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            glColor4d(col);

            switch (style)
            {
            case 0:    //pts
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                foreach (var pt in pts)
                {
                    Gl.glVertex2d(pt.x - size / 2, pt.y);
                    Gl.glVertex2d(pt.x, pt.y + size / 2);
                    Gl.glVertex2d(pt.x + size / 2, pt.y);
                    Gl.glVertex2d(pt.x, pt.y - size / 2);
                }
                Gl.glEnd();
                break;

            case 1:    //cross
                Gl.glBegin(Gl.GL_LINES);
                Gl.glLineWidth(1.0f);
                foreach (var pt in pts)
                {
                    Gl.glVertex2d(pt.x - size / 2, pt.y - size / 2);
                    Gl.glVertex2d(pt.x + size / 2, pt.y + size / 2);
                    Gl.glVertex2d(pt.x - size / 2, pt.y + size / 2);
                    Gl.glVertex2d(pt.x + size / 2, pt.y - size / 2);
                }
                Gl.glEnd();
                break;

            case 2:    //crosshair
                Gl.glBegin(Gl.GL_LINES);
                Gl.glLineWidth(1.0f);
                foreach (var pt in pts)
                {
                    Gl.glVertex2d(pt.x - size / 2, pt.y);
                    Gl.glVertex2d(pt.x + size / 2, pt.y);
                    Gl.glVertex2d(pt.x, pt.y + size / 2);
                    Gl.glVertex2d(pt.x, pt.y - size / 2);
                }
                Gl.glEnd();
                break;

            default:
                break;
            }
            Gl.glPopMatrix();
        }
 public static void DrawBaseline(RectangleBox rect, double y, RGBAColor col, double depth = -1.0)
 {
     UpdateDepth(depth);
     Gl.glPushMatrix();
     Gl.glTranslated(rect.left, rect.bottom, currentdepth);
     glColor4d(col);
     Gl.glLineWidth(2);
     Gl.glBegin(Gl.GL_LINES);
     Gl.glVertex2d(0, y);
     Gl.glVertex2d(rect.right - rect.left, y);
     Gl.glEnd();
     Gl.glLineWidth(1);
     Gl.glPopMatrix();
 }
 public static void Set3D(RectangleBox vp)
 {
     Gl.glMatrixMode(Gl.GL_PROJECTION);
     //Gl.glDisable(Gl.GL_DEPTH_TEST);
     Gl.glLoadIdentity();
     Gl.glViewport((int)(vp.left * Globals.currentwindowwidth / Globals.defaultwindowwidth),
                   (int)(vp.bottom * Globals.currentwindowheight / Globals.defaultwindowheight),
                   (int)(vp.Width * Globals.currentwindowwidth / Globals.defaultwindowwidth),
                   (int)(vp.Height * Globals.currentwindowheight / Globals.defaultwindowheight));
     Glu.gluPerspective(40, vp.Width / vp.Height, 1.5, 64);
     Gl.glMatrixMode(Gl.GL_MODELVIEW);
     //Gl.glClear(Gl.GL_DEPTH_BUFFER_BIT);
     Gl.glLoadIdentity();
     Glu.gluLookAt(0, 0, 5, 0, 0, 1, 0, 1, 0);
     Gl.glTranslated(0, 0, 2);
 }
Exemple #13
0
        public ClickableSprite(RectangleBox box, string spritefilename) : base(box)
        {
            boundingbox = box;
            Bitmap im = new Bitmap(spritefilename);

            im.RotateFlip(RotateFlipType.RotateNoneFlipY);
            Rectangle  r  = new Rectangle(0, 0, im.Width, im.Height);
            BitmapData bd = im.LockBits(r, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

            Gl.glGenTextures(1, out tID);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, tID);
            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, im.Width, im.Height, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bd.Scan0);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_MODULATE);
            im.UnlockBits(bd);
            im.Dispose();
        }
        public static void DrawRawChannel(RectangleBox rect, double x, double y, RGBAColor col, ref CyclicBuffer <sbyte> buf, double depth = -1.0)
        {
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left + x, rect.bottom, currentdepth);
            glColor4d(col);
            //Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_LINE);
            Gl.glBegin(Gl.GL_LINE_STRIP);
            for (int i = 0; i < buf.maxlen; i++)
            {
                double perc = (double)Mod(i - buf.currentpos, buf.maxlen) / buf.maxlen; /*
                                                                                         * if (perc<0.1)
                                                                                         * glColor4d(col.Fade(perc/0.1));
                                                                                         * else
                                                                                         * glColor4d(col);*/
                sbyte  amp  = buf[i];
                double xpos = (double)i / (buf.maxlen - 50) * rect.Width;               //width+INTERMID
                Gl.glVertex2d(xpos, y + amp);
            }
            Gl.glEnd();
            Gl.glPopMatrix();

            /*
             * UpdateDepth(depth);
             * Gl.glPushMatrix();
             * Gl.glTranslated(rect.left + x, rect.bottom, currentdepth);
             * Gl.glLineWidth(3);
             * SetBlendMode(BlendModes.Add);
             * Gl.glBegin(Gl.GL_LINE_STRIP);
             * for (int i = 0; i < buf.maxlen; i++) {
             *  double perc = (double)Mod(i - buf.currentpos, buf.maxlen) / buf.maxlen;
             *  if (perc < 0.8)
             *      glColor4d(new RGBAColor(1, 1, 1, 0));
             *  else
             *      glColor4d(new RGBAColor(1, 1, 1, 1).Fade(5 * (perc - 0.8)));
             *  sbyte amp = buf.buf[i];
             *  double xpos = (double)i / (buf.maxlen - 50) * rect.Width;  //width+INTERMID
             *  Gl.glVertex2d(xpos, y + amp);
             * }
             * Gl.glEnd();
             * SetBlendMode(BlendModes.Normal);
             * Gl.glPopMatrix();*/
            Gl.glLineWidth(1);
        }
        public static void DrawParticles(RectangleBox rect, List <Particle> particles, double depth = -1.0, bool simulate = true)
        {
            if (simulate)
            {
                foreach (var p in particles)
                {
                    p.Simulate();
                }
                particles.RemoveAll(x => x.dead == true);
            }
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            foreach (var p in particles)
            {
                glColor4d(p.col);
                SetBlendMode(p.bm);
                switch (p.shape)
                {
                case Particle.ParticleShapes.Cross:
                    Gl.glBegin(Gl.GL_LINES);
                    Gl.glLineWidth(1.0f);
                    Gl.glVertex2d(p.x - p.xscale / 2, p.y - p.yscale / 2);
                    Gl.glVertex2d(p.x + p.xscale / 2, p.y + p.yscale / 2);
                    Gl.glVertex2d(p.x - p.xscale / 2, p.y + p.yscale / 2);
                    Gl.glVertex2d(p.x + p.xscale / 2, p.y - p.yscale / 2);
                    Gl.glEnd();
                    break;

                case Particle.ParticleShapes.Diamond:
                    Gl.glBegin(Gl.GL_TRIANGLE_FAN);
                    Gl.glVertex2d(p.x - p.xscale / 2, p.y);
                    Gl.glVertex2d(p.x, p.y + p.yscale / 2);
                    Gl.glVertex2d(p.x + p.xscale / 2, p.y);
                    Gl.glVertex2d(p.x, p.y - p.yscale / 2);
                    Gl.glEnd();
                    break;
                }
            }
            SetBlendMode(BlendModes.Normal);
            Gl.glEnd();
            Gl.glPopMatrix();
        }
        public static void DrawGyroChannel(RectangleBox rect, double x, double y, ref CyclicBuffer <PanelMotionData> buf, double depth = -1.0)
        {
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left + x, rect.bottom, currentdepth);
            Gl.glLineWidth(1);
            for (int ch = 0; ch < 3; ch++)
            {
                glColor4d(Globals.motionchannelcols[ch]);
                Gl.glBegin(Gl.GL_LINE_STRIP);
                for (int i = 0; i < buf.maxlen; i++)
                {
                    short  amp  = buf[i].gyro[ch];
                    double xpos = (double)i / (buf.maxlen) * rect.Width;  //width+INTERMID
                    Gl.glVertex2d(xpos, y + 0.1 * amp);
                }
                Gl.glEnd();
            }

            Gl.glPopMatrix();
        }
        public override void UpdateGraphics()
        {
            if (!inapp)
            {
                boundingbox.targetleft  = boundingbox.origleft * Globals.panelanimationratio;
                boundingbox.targetright = boundingbox.origright * Globals.panelanimationratio;
            }
            else
            {
                boundingbox.origleft = boundingbox.targetright - 1;
            }

            boundingbox.animateupdate(Globals.panelanimated);
            if (hover)
            {
                animationratio = 0.7 * animationratio + 0.3 * 0.2;
            }
            else
            {
                animationratio = 0.7 * animationratio + 0.3 * 0.0;
            }
            RectangleBox highlight = new RectangleBox(boundingbox.left, boundingbox.right, boundingbox.bottom,
                                                      animationratio * boundingbox.top + (1 - animationratio) * boundingbox.bottom);

            if (!border)
            {
                RendererWrapper.DrawRectangle(boundingbox, col, -1);
                RendererWrapper.DrawRectangle(highlight, col.Mix(col, new RGBAColor(1, 1, 1, 1), 0.5), -1);
            }
            else
            {
                RendererWrapper.DrawRectangle(boundingbox, new RGBAColor(0, 0, 0, 1), -1);
                RendererWrapper.DrawRectangle(highlight, col.Mix(col, new RGBAColor(1, 1, 1, 1), 0.5), -1);
                RendererWrapper.DrawRectangle(boundingbox, col, 2);
            }
            RendererWrapper.DrawString(boundingbox.left + 16, boundingbox.bottom + boundingbox.Height / 2 - 12.0 / 2, caption, new RGBAColor(1.0, 1.0, 1.0, 1.0));
        }
        public static void DrawArrow(RectangleBox rect, Point2D p1, Point2D p2, RGBAColor col, double thickness = 1.0, double headsize = 15.0, double depth = -1.0)
        {
            double ang = Math.Atan2(p2.y - p1.y, p2.x - p1.x);
            double siz = Math.Min(headsize, Math.Sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)));

            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            glColor4d(col);
            Gl.glLineWidth((float)thickness);
            Gl.glBegin(Gl.GL_LINES);
            Gl.glVertex2d(p1.x, p1.y);
            Gl.glVertex2d(p2.x - 0.5 * siz * Math.Cos(ang), p2.y - 0.5 * siz * Math.Sin(ang));
            Gl.glEnd();

            UpdateDepth(depth);
            Gl.glBegin(Gl.GL_TRIANGLE_FAN);
            Gl.glVertex2d(p2.x, p2.y);
            Gl.glVertex2d(p2.x - siz * Math.Cos(ang + 0.3), p2.y - siz * Math.Sin(ang + 0.3));
            Gl.glVertex2d(p2.x - siz * Math.Cos(ang - 0.3), p2.y - siz * Math.Sin(ang - 0.3));
            Gl.glEnd();

            Gl.glPopMatrix();
        }
 //public bool animated = true;
 public ClickableButton(RectangleBox box) : base(box)
 {
     boundingbox = box;
 }
        public static void DrawChannelLabel(RectangleBox rect, double x, double y, RGBAColor col, string text, bool selected, double depth = -1.0)
        {
            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            Gl.glLineWidth(1);
            Gl.glTranslated(x, y, 0);

            glColor4d(new RGBAColor(0, 0, 0, 1));
            Gl.glBegin(Gl.GL_TRIANGLE_FAN);
            Gl.glVertex2d(0, 0);
            Gl.glVertex2d(-7, 7);
            Gl.glVertex2d(-30, 7);
            Gl.glVertex2d(-30, -7);
            Gl.glVertex2d(-7, -7);
            Gl.glVertex2d(0, 0);
            Gl.glEnd();
            Gl.glPopMatrix();

            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            Gl.glTranslated(x, y, 0);

            glColor4d(col);
            if (selected)
            {
                Gl.glBegin(Gl.GL_TRIANGLE_FAN);
            }
            else
            {
                Gl.glBegin(Gl.GL_LINE_STRIP);
            }
            Gl.glVertex2d(0, 0);
            Gl.glVertex2d(-7, 7);
            Gl.glVertex2d(-30, 7);
            Gl.glVertex2d(-30, -7);
            Gl.glVertex2d(-7, -7);
            Gl.glVertex2d(0, 0);
            Gl.glEnd();
            Gl.glPopMatrix();

            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left, rect.bottom, currentdepth);
            Gl.glTranslated(x - 26, y - 3, 0);
            Gl.glScaled(0.07, 0.07, 1.0);
            if (selected)
            {
                glColor4d(new RGBAColor(0, 0, 0, 1));
            }
            else
            {
                glColor4d(col);
            }
            Gl.glLineWidth(1);
            foreach (char c in text)
            {
                Gl.glTranslated(3, 0.0, 0.0);
                Glut.glutStrokeCharacter(Glut.GLUT_STROKE_ROMAN, c);
            }
            Gl.glPopMatrix();
        }
        public static void DrawEMGChannel(RectangleBox rect, double x, double y, RGBAColor col, ref CyclicBuffer <PanelEMGData> buf, int ch, bool drawlabel = false, double depth = -1.0)
        {
            List <PanelLabel> pl        = new List <PanelLabel>();
            List <double>     plx       = new List <double>();
            double            origdepth = currentdepth;

            UpdateDepth(depth);
            Gl.glPushMatrix();
            Gl.glTranslated(rect.left + x, rect.bottom, currentdepth);
            glColor4d(col);
            //Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_LINE);
            Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
            for (int i = 0; i < buf.maxlen; i++)
            {
                byte   amp  = buf[i].amp[ch];
                double xpos = (double)i / (buf.maxlen - 3) * rect.Width;  //width+INTERMID
                if (drawlabel)
                {
                    foreach (var lab in buf[i].labels)
                    {
                        pl.Add(lab);
                        plx.Add(xpos);
                        break;
                    }
                }
                else
                {
                    glColor4d(col);
                }
                Gl.glVertex2d(xpos, y + (amp > 0?0:0) + 0.1 * amp);
                Gl.glVertex2d(xpos, y - (amp > 0?0:0) - 0.1 * amp);
            }
            Gl.glEnd();
            Gl.glLineWidth(1);
            Gl.glPopMatrix();

            if (drawlabel)
            {
                for (int i = 0; i < pl.Count; i++)
                {
                    UpdateDepth(depth);
                    Gl.glPushMatrix();
                    Gl.glTranslated(rect.left + x + plx[i], rect.bottom, origdepth + 0.001 / 2);
                    Gl.glLineWidth(pl[i].bold);
                    glColor4d(pl[i].col);
                    Gl.glBegin(Gl.GL_LINES);
                    Gl.glVertex2d(0, 0);
                    Gl.glVertex2d(0, rect.Height);
                    Gl.glEnd();

                    Gl.glLineWidth(1);
                    Gl.glBegin(Gl.GL_LINE_STRIP);
                    Gl.glVertex2d(0, 0 + 15);
                    Gl.glVertex2d(7, 7 + 15);
                    Gl.glVertex2d(30, 7 + 15);
                    Gl.glVertex2d(30, -7 + 15);
                    Gl.glVertex2d(7, -7 + 15);
                    Gl.glVertex2d(0, 0 + 15);
                    Gl.glEnd();

                    Gl.glTranslated(10, 12, 0.0);
                    Gl.glScaled(0.07, 0.07, 1.0);
                    foreach (char c in pl[i].label)
                    {
                        Gl.glTranslated(10, 0.0, 0.0);
                        Glut.glutStrokeCharacter(Glut.GLUT_STROKE_ROMAN, c);
                    }
                    Gl.glPopMatrix();
                }
            }
        }
 public static void DrawEffectExcitation(RectangleBox rect, RGBAColor col, double intensity, double depth = -1.0)
 {
     //no effects for you
 }
 public ClickableArea(RectangleBox box)
 {
     boundingbox = box;
 }