private RasterInkStroke 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); ParticleBrush particleBrush = new ParticleBrush { FillTexture = mGraphics.CreateTexture(Task.Run(async() => await Utils.GetPixelDataAsync(rasterBrush.FillTexture)).Result), FillTileSize = new Size(rasterBrush.FillWidth, rasterBrush.FillHeight), RotationMode = (ParticleRotationMode)rasterBrush.RotationMode, Scattering = rasterBrush.Scattering, ShapeTexture = mGraphics.CreateTexture(Task.Run(async() => await Utils.GetPixelDataAsync(rasterBrush.ShapeTextures[0])).Result) }; RasterInkStroke dryStroke = new RasterInkStroke(stroke, rasterBrush, particleList, particleBrush); return(dryStroke); }
private List <RasterInkStroke> RecreateDryStrokes(InkModel inkDataModel) { if (inkDataModel.InkTree.Root == null) { return(new List <RasterInkStroke>()); } List <RasterInkStroke> dryStrokes = new List <RasterInkStroke>(inkDataModel.Strokes.Count); DecodedRasterInkBuilder decodedRasterInkBuilder = new DecodedRasterInkBuilder(); IEnumerator <InkNode> enumerator = inkDataModel.InkTree.Root.GetRecursiveEnumerator(); while (enumerator.MoveNext()) { if (enumerator.Current is StrokeNode strokeNode) { var dryStroke = CreateDryStroke(decodedRasterInkBuilder, strokeNode.Stroke, inkDataModel); dryStrokes.Add(dryStroke); bool res = inkDataModel.SensorData.GetSensorData(dryStroke.SensorDataId, out SensorData sensorData); if (res) { mSerializer.LoadSensorDataFromModel(inkDataModel, sensorData); } } } return(dryStrokes); }
private RasterInkStroke CreateDryStroke(DecodedRasterInkBuilder decodedVectorInkBuilder, Stroke stroke, InkModel inkDataModel) { inkDataModel.Brushes.TryGetBrush(stroke.Style.BrushUri, out Wacom.Ink.Serialization.Model.Brush brush); if (brush is Wacom.Ink.Serialization.Model.VectorBrush vectorBrush) { throw new Exception("This sample does not support serialization of both raster and vector brushes"); } else if (brush is RasterBrush rasterBrush) { return(CreateDryStrokeFromRasterBrush(decodedVectorInkBuilder, rasterBrush, stroke)); } else { throw new Exception("Brush not recognized"); } }
private List <DryStroke> RecreateDryStrokes(InkModel inkDataModel) { if (inkDataModel.InkTree.Root == null) { return(new List <DryStroke>()); } List <DryStroke> dryStrokes = new List <DryStroke>(inkDataModel.Strokes.Count); DecodedRasterInkBuilder decodedRasterInkBuilder = new DecodedRasterInkBuilder(); IEnumerator <InkNode> enumerator = inkDataModel.InkTree.Root.GetRecursiveEnumerator(); while (enumerator.MoveNext()) { if ((enumerator.Current is StrokeNode strokeNode)) { dryStrokes.Add(CreateDryStroke(decodedRasterInkBuilder, strokeNode.Stroke, inkDataModel)); } } return(dryStrokes); }
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); }