private DryStroke CreateDryStrokeFromVectorBrush(DecodedVectorInkBuilder decodedVectorInkBuilder, Wacom.Ink.Serialization.Model.VectorBrush vectorBrush, Stroke stroke) { Wacom.Ink.Geometry.VectorBrush vb; if (vectorBrush.BrushPolygons.Count > 0) { vb = new Wacom.Ink.Geometry.VectorBrush(vectorBrush.BrushPolygons.ToArray()); } else if (vectorBrush.BrushPrototypeURIs.Count > 0) { List <BrushPolygon> brushPolygons = new List <BrushPolygon>(vectorBrush.BrushPrototypeURIs.Count); foreach (var uri in vectorBrush.BrushPrototypeURIs) { brushPolygons.Add(new BrushPolygon(uri.MinScale, ShapeUriResolver.ResolveShape(uri.ShapeUri))); } vb = new Wacom.Ink.Geometry.VectorBrush(brushPolygons.ToArray()); } else { throw new ArgumentException("Missing vector brush information! Expected BrushPolygons, BrushPolyhedrons or BrushPrototypeURIs."); } var result = decodedVectorInkBuilder.AddWholePath(stroke.Spline, stroke.Layout, vb); var ppp = stroke.Style.PathPointProperties; DryStroke dryStroke = new DryStroke { mPolygon = PolygonUtil.ConvertPolygon(result.Addition), mColor = MediaColor.FromArgb( ppp.Alpha.HasValue ? (byte)(ppp.Alpha * 255.0f) : byte.MinValue, ppp.Red.HasValue ? (byte)(ppp.Red * 255.0f) : byte.MinValue, ppp.Green.HasValue ? (byte)(ppp.Green * 255.0f) : byte.MinValue, ppp.Blue.HasValue ? (byte)(ppp.Blue * 255.0f) : byte.MinValue) }; return(dryStroke); }
private DryStroke CreateDryStrokeFromRasterBrush(DecodedRasterInkBuilder decodedRasterInkBuilder, RasterBrush rasterBrush, Stroke stroke) { var result = decodedRasterInkBuilder.AddWholePath(stroke.Spline.Data, rasterBrush.Spacing, stroke.Layout); List <float> points = new List <float>(result.Addition); uint channelMask = (uint)decodedRasterInkBuilder.SplineInterpolator.InterpolatedSplineLayout.ChannelMask; ParticleList particleList = new ParticleList(); particleList.Assign(points, channelMask); PathPointProperties ppp = stroke.Style.PathPointProperties; StrokeConstants strokeConstants = new StrokeConstants { Color = MediaColor.FromArgb( ppp.Alpha.HasValue ? (byte)(ppp.Alpha * 255.0f) : byte.MinValue, ppp.Red.HasValue ? (byte)(ppp.Red * 255.0f) : byte.MinValue, ppp.Green.HasValue ? (byte)(ppp.Green * 255.0f) : byte.MinValue, ppp.Blue.HasValue ? (byte)(ppp.Blue * 255.0f) : byte.MinValue) }; ParticleBrush particleBrush = new ParticleBrush { FillTexture = mGraphics.CreateTexture(Utils.GetPixelData(rasterBrush.FillTexture)), FillTileSize = new Size(rasterBrush.FillWidth, rasterBrush.FillHeight), RotationMode = (ParticleRotationMode)rasterBrush.RotationMode, Scattering = rasterBrush.Scattering, ShapeTexture = mGraphics.CreateTexture(Utils.GetPixelData(rasterBrush.ShapeTextures[0])) }; DryStroke dryStroke = new DryStroke(particleList, stroke.Style.RandomSeed, strokeConstants, particleBrush); return(dryStroke); }
protected override void DoRenderStroke(object o) { DryStroke stroke = (DryStroke)o; mRenderingContext.DrawParticleStroke(stroke.Path, stroke.StrokeConstants, stroke.ParticleBrush, Ink.Rendering.BlendMode.SourceOver, stroke.RandomSeed); }
protected override void DoRenderStroke(object o) { DryStroke stroke = (DryStroke)o; mRenderingContext.FillPolygon(stroke.mPolygon, stroke.mColor, Wacom.Ink.Rendering.BlendMode.SourceOver); }