public void SetupCorners(Quad2f quad2f) { //set bounds //create child control point for _corners.Clear(); _corners.Add(new PointF(quad2f.left_top_x, quad2f.left_top_y)); _corners.Add(new PointF(quad2f.right_top_x, quad2f.right_top_y)); _corners.Add(new PointF(quad2f.right_bottom_x, quad2f.right_bottom_y)); _corners.Add(new PointF(quad2f.left_bottom_x, quad2f.left_bottom_y)); //from the point we create a rect child _cornerBoxes.Clear(); int j = _corners.Count; for (int i = 0; i < j; ++i) { Box cornerBox = new Box(10, 10); PointF p = _corners[i]; cornerBox.SetLocation((int)p.X, (int)p.Y); cornerBox.MouseDrag += CornerBox_MouseDrag; cornerBox.NeedClipArea = false; //special for control box _cornerBoxes.Add(cornerBox); } }
private void _quadControl_ShapeUpdated(QuadWidgetControl sender, EventArgs arg) { //update shape of sprite //transform from original lionBounds to quadPolygon Quad2f quadCorners = _quadControl.GetQuadCorners(); _quadCorners[0] = quadCorners.left_top_x; _quadCorners[1] = quadCorners.left_top_y; _quadCorners[2] = quadCorners.right_top_x; _quadCorners[3] = quadCorners.right_top_y; _quadCorners[4] = quadCorners.right_bottom_x; _quadCorners[5] = quadCorners.right_bottom_y; _quadCorners[6] = quadCorners.left_bottom_x; _quadCorners[7] = quadCorners.left_bottom_y; //this is bilinear transformation if (_useBilinear) { Bilinear txBilinear = Bilinear.RectToQuad( _lionBounds.Left, _lionBounds.Top, _lionBounds.Right, _lionBounds.Bottom, _quadCorners); if (txBilinear.IsValid) { SpriteShape spriteShape = _mySprite.GetSpriteShape(); spriteShape.ResetTransform(); spriteShape.ApplyTransform(txBilinear); } } else { Perspective perspective = new Perspective( _lionBounds.Left, _lionBounds.Top, _lionBounds.Right, _lionBounds.Bottom, _quadCorners); if (perspective.IsValid) { SpriteShape spriteShape = _mySprite.GetSpriteShape(); spriteShape.ResetTransform(); spriteShape.ApplyTransform(perspective); } } }
protected override void OnGLRender(object sender, EventArgs args) { _pcx.SmoothMode = SmoothMode.Smooth; _pcx.StrokeColor = PixelFarm.Drawing.Color.Blue; _pcx.Clear(PixelFarm.Drawing.Color.White); //set clear color and clear all buffer _pcx.ClearColorBuffer(); //test , clear only color buffer //------------------------------- if (!_isInit) { _glbmp = DemoHelper.LoadTexture(RootDemoPath.Path + @"\logo-dark.jpg"); _isInit = true; } PixelFarm.Drawing.RenderSurfaceOriginKind prevOrgKind = _pcx.OriginKind; //save switch (DrawSet) { default: case T107_1_DrawImageSet.Full: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { _pcx.DrawImage(_glbmp, i, i); //left,top (NOT x,y) i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawImage(_glbmp, i, i); //left,top (NOT x,y) i += 50; } } break; case T107_1_DrawImageSet.Half: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawImage(_glbmp, i, i, _glbmp.Width / 2, _glbmp.Height / 2); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawImage(_glbmp, i, i, _glbmp.Width / 2, _glbmp.Height / 2); //left,top (NOT x,y) i += 50; } } break; case T107_1_DrawImageSet.ToRect: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { //left,top (NOT x,y) //PixelFarm.Drawing.RectangleF srcRect = new PixelFarm.Drawing.RectangleF(i, i, _glbmp.Width, _glbmp.Height); _pcx.DrawImage(_glbmp, i, i, _glbmp.Width / 2, _glbmp.Height / 2); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { //PixelFarm.Drawing.RectangleF srcRect = new PixelFarm.Drawing.RectangleF(i, i, _glbmp.Width, _glbmp.Height); _pcx.DrawImage(_glbmp, i, i, _glbmp.Width / 2, _glbmp.Height / 2); i += 50; } } break; case T107_1_DrawImageSet.ToQuad1: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; Quad2f quad = new Quad2f(); quad.SetCornersFromRect(0, 0, _glbmp.Width / 2, _glbmp.Height / 2); //half size for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawImageToQuad(_glbmp, quad); quad.Offset(50, 50); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; quad.SetCornersFromRect(0, 0, _glbmp.Width / 2, _glbmp.Height / 2); //half size for (int i = 0; i < 400;) { _pcx.DrawImageToQuad(_glbmp, quad); quad.Offset(50, 50); i += 50; } } break; case T107_1_DrawImageSet.ToQuad2: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; float rotateDegree = 20; //float[] quad = new float[8]; Quad2f quad = new Quad2f(); for (int i = 0; i < 400;) { //left,top (NOT x,y) quad.SetCornersFromRect(0, 0, _glbmp.Width, _glbmp.Height); AffineMat aff = AffineMat.Iden(); aff.Translate(-_glbmp.Width / 2, -_glbmp.Height / 2); //move to bitmap's center aff.RotateDeg(rotateDegree); aff.Translate(i + _glbmp.Width / 2, i + _glbmp.Height / 2); quad.Transform(aff); _pcx.DrawImageToQuad(_glbmp, quad); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { //left,top (NOT x,y) quad.SetCornersFromRect(0, 0, _glbmp.Width, -_glbmp.Height); AffineMat aff = AffineMat.Iden(); aff.Translate(-_glbmp.Width / 2, -_glbmp.Height / 2); //move to bitmap's center aff.RotateDeg(rotateDegree); aff.Translate(i + _glbmp.Width / 2, i + _glbmp.Height / 2); quad.Transform(aff); _pcx.DrawImageToQuad(_glbmp, quad); i += 50; } } break; case T107_1_DrawImageSet.ToQuad3: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; float rotateDegree = 60; for (int i = 0; i < 400;) { AffineMat aff = AffineMat.Iden(); aff.Translate(-_glbmp.Width / 2, -_glbmp.Height / 2); //move to bitmap's center aff.RotateDeg(rotateDegree); aff.Translate(i + _glbmp.Width / 2, i + _glbmp.Height / 2); _pcx.DrawImageToQuad(_glbmp, aff); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { AffineMat aff = AffineMat.Iden(); aff.Translate(-_glbmp.Width / 2, -_glbmp.Height / 2); //move to bitmap's center aff.RotateDeg(rotateDegree); aff.Translate(i + _glbmp.Width / 2, i + _glbmp.Height / 2); _pcx.DrawImageToQuad(_glbmp, aff); i += 50; } } break; case T107_1_DrawImageSet.SubImages0: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; PixelFarm.Drawing.Rectangle srcRect = new PixelFarm.Drawing.Rectangle(0, 0, _glbmp.Width, _glbmp.Height); for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } } break; case T107_1_DrawImageSet.SubImages1: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; PixelFarm.Drawing.Rectangle srcRect = new PixelFarm.Drawing.Rectangle(0, 0, _glbmp.Width / 2, _glbmp.Height / 2); for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } } break; case T107_1_DrawImageSet.SubImages2: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; PixelFarm.Drawing.Rectangle srcRect = new PixelFarm.Drawing.Rectangle(20, 20, 50, 50); for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawSubImage(_glbmp, srcRect, i, i); i += 50; } } break; case T107_1_DrawImageSet.SubImagesWithScale: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; PixelFarm.Drawing.Rectangle srcRect = new PixelFarm.Drawing.Rectangle(20, 20, 50, 50); for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawSubImage(_glbmp, srcRect, i, i, 2f); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawSubImage(_glbmp, srcRect, i, i, 2f); i += 50; } } break; case T107_1_DrawImageSet.SubImageWithBlurX: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawImageWithBlurX(_glbmp, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawImageWithBlurX(_glbmp, i, i); i += 50; } } break; case T107_1_DrawImageSet.SubImageWithBlurY: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawImageWithBlurY(_glbmp, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawImageWithBlurY(_glbmp, i, i); i += 50; } // } break; case T107_1_DrawImageSet.DrawWithConv3x3: { _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; for (int i = 0; i < 400;) { //left,top (NOT x,y) _pcx.DrawImageWithConv3x3(_glbmp, Mat3x3ConvGen.sobelHorizontal, i, i); i += 50; } // _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftBottom; for (int i = 0; i < 400;) { _pcx.DrawImageWithConv3x3(_glbmp, Mat3x3ConvGen.emboss, i, i); i += 50; } } break; } _pcx.OriginKind = prevOrgKind;//restore }
public void SimpleVG(GraphicsDevice device) { ICanvas canvas = new GraphicsCanvas(device, device.SwapChain, new Vector2f(1.0f, 1.0f)); // We first create all needed fills. SolidFill solidFill = new SolidFill(); solidFill.Colour = Colour.LightBlue; GradientFill graFill = GradientFill.CreateGradient( new Colour[] { new Colour(13, 185, 242, 255), new Colour(191, 234, 21, 255), new Colour(112, 62, 193, 255), new Colour(255, 242, 81, 255) }, new float[] { 0.30f, 0.60f }, new Vector2f(1, 1)); TextureFill texFill = new TextureFill(CreateSampleTexture()); RadialFill radFill = new RadialFill(new Vector2f(0.75f, 0.75f), 0.15f, Colour.White, Colour.Black); Quad2f rect = new Quad2f(Vector2f.Zero, new Vector2f(0.5f, 0), new Vector2f(0.5f, 0.5f), new Vector2f(0.0f, 0.5f)); Quad2f rect2 = new Quad2f(new Vector2f(0.5f, 0.5f), new Vector2f(1, 0.5f), new Vector2f(1, 1), new Vector2f(0.5f, 1.0f)); bool exit = false; device.SwapChain.Window.Closed += delegate(Window w) { exit = true; }; float a = 0; while (!exit) { device.SwapChain.Window.DoEvents(); using (DeviceLock l = device.Lock()) { device.Clear(device.SwapChain, Colour.Green); device.SetViewports(new Region2i(0, 0, (int)device.SwapChain.Width, (int)device.SwapChain.Height)); // We render. canvas.Begin(CanvasRenderFlags.None); canvas.FillShape(solidFill, rect, null); canvas.FillShape(radFill, rect2, null); canvas.Transform = new LinearTransform( new Math.Matrix.Matrix4x4f(Math.MathHelper.Cos(a), -Math.MathHelper.Sin(a), 0, 0, Math.MathHelper.Sin(a), Math.MathHelper.Cos(a), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)); canvas.FillShape(graFill, rect, null); canvas.FillShape(texFill, rect2, null); canvas.End(); } Console.WriteLine("FPS: {0}\nTrig Count: {1}", device.DevicePerformance.CurrentFPS, device.DevicePerformance.MaxTrianglesPerFrame); a += 0.003f; device.SwapChain.Present(); } texFill.Texture.Dispose(); }
protected override void OnGLRender(object sender, EventArgs args) { //reset _pcx.SmoothMode = SmoothMode.Smooth; _pcx.ClearColorBuffer(); _painter.Clear(Color.Yellow); switch (DrawSet) { case T408_DrawSet.A: { //draw msdf bitmap to mask surface if (_maskRenderSurface == null) { GLRenderSurface currentSurface = _pcx.CurrentRenderSurface; _maskRenderSurface = new GLRenderSurface(100, 100); _pcx.AttachToRenderSurface(_maskRenderSurface); //draw mask _pcx.Clear(Color.Black); _pcx.DrawImageWithMsdf(_msdfMaskGLBmp, 0, 0, 5, Color.White); //switch back to normal surface _pcx.AttachToRenderSurface(currentSurface); } //render with simple mask _pcx.DrawImageWithMask( _maskRenderSurface.GetInnerGLData().GLBmp, _colorGLBmp, 0, 0); } break; case T408_DrawSet.B: { RectangleF maskSrc = new RectangleF(0, 0, _msdfMaskBmp.Width, _msdfMaskBmp.Height); Rectangle rect = new Rectangle(10, 10, 120, 120); Quad2f quad = new Quad2f(); quad.SetCornersFromRect(rect); AffineMat mat1 = AffineMat.Iden(); mat1.Translate(-rect.Width / 2, -rect.Height / 2); mat1.RotateDeg(45); mat1.Translate(rect.Width / 2, rect.Height / 2); quad.Transform(mat1); //***test transform //----------------------- //create mask surface, this quite low leve step. //user should use this through drawboard //----------------------- if (_maskRenderSurface2 == null) { //before we switch to another GLRenderSurface. //we save current setting of current GLRenderSurface _pcx.SaveStates(out GLPainterStatesData saveData1); _maskRenderSurface2 = new GLRenderSurface(100, 100); _pcx.AttachToRenderSurface(_maskRenderSurface2); _pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; //draw mask _pcx.Clear(Color.Black); //draw image to specific quad _pcx.DrawImageWithMsdf(_msdfMaskGLBmp, quad, Color.White); //switch back to normal surface _pcx.RestoreStates(saveData1); } _pcx.DrawImageWithMask( _maskRenderSurface2.GetInnerGLData().GLBmp, _colorGLBmp, 20, 20); } break; } SwapBuffers(); }