示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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");
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }