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]; }
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]; }
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); }
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; }