public override void Paint(PaintVisitor p) { if (Vxs != null) { //1. //convert vxs to bitmap //then render with bitmap cache** //or //2. convert vxs to path data if (backimg == null) { var svgPart = new SvgPart(SvgRenderVxKind.Path); svgPart.FillColor = fillColor; svgPart.SetVxsAsOriginal(Vxs); var svgVx = new SvgRenderVx(new SvgPart[] { svgPart }); if (svgVx != null && !svgVx.HasBitmapSnapshot) { var bounds = svgVx.GetBounds(); //create backimg = new ActualBitmap((int)bounds.Width, (int)bounds.Height); AggRenderSurface renderSurface = new AggRenderSurface(backimg); AggPainter painter = new AggPainter(renderSurface); svgVx.Render(painter); svgVx.SetBitmapSnapshot(backimg); //*** } } if (backimg != null) { p.InnerCanvas.DrawImage(backimg, new RectangleF(0, 0, backimg.Width, backimg.Height)); return; } } if (fillColor.A > 0) { p.FillPath(this.myCachedPath, this.fillColor); } if (this.strokeColor.A > 0) { p.DrawPath(this.myCachedPath, this.strokeColor, this.ActualStrokeWidth); } }
void EvaluatePathDefinition() { if (d_attribute != null) { //create new path AssignValues(svgPart, spec); svgPart.SetVxsAsOriginal( _ownerParser.ParseSvgPathDefinitionToVxs(d_attribute.ToCharArray())); if (svgPart.HasStrokeWidth && svgPart.StrokeWidth > 0) { //TODO: implement stroke rendering } d_attribute = null; } }
protected override void OnStartDemo(SampleViewport viewport) { SvgPart svgPart = new SvgPart(SvgRenderVxKind.Path); VertexStore vxs = new VertexStore(); vxs.AddMoveTo(100, 20); vxs.AddLineTo(150, 50); vxs.AddLineTo(110, 80); vxs.AddCloseFigure(); //------------------------------------------- svgPart.SetVxsAsOriginal(vxs); svgPart.FillColor = Color.Red; SvgRenderVx svgRenderVx = new SvgRenderVx(new SvgPart[] { svgPart }); svgRenderVx.DisableBackingImage = true; var uiSprite = new UISprite(10, 10); //init size = (10,10), location=(0,0) uiSprite.LoadSvg(svgRenderVx); viewport.AddContent(uiSprite); var spriteEvListener = new GeneralEventListener(); uiSprite.AttachExternalEventListener(spriteEvListener); //box1 = new LayoutFarm.CustomWidgets.SimpleBox(50, 50); //box1.BackColor = Color.Red; //box1.SetLocation(10, 10); ////box1.dbugTag = 1; //SetupActiveBoxProperties(box1); //viewport.AddContent(box1); //-------- rectBoxController.Init(); //polygonController.Visible = false; viewport.AddContent(polygonController); //------------------------------------------- viewport.AddContent(rectBoxController); //foreach (var ui in rectBoxController.GetControllerIter()) //{ // viewport.AddContent(ui); //} spriteEvListener.MouseDown += e1 => { //mousedown on ui sprite polygonController.SetPosition((int)uiSprite.Left, (int)uiSprite.Top); polygonController.SetTargetUISprite(uiSprite); polygonController.UpdateControlPoints(svgPart); }; spriteEvListener.MouseMove += e1 => { if (e1.IsDragging) { //drag event on uisprite int left = (int)uiSprite.Left; int top = (int)uiSprite.Top; int new_left = left + e1.DiffCapturedX; int new_top = top + e1.DiffCapturedY; uiSprite.SetLocation(new_left, new_top); //----- //also update controller position polygonController.SetPosition(new_left, new_top); } }; }