private VectorInkStroke 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 pipelineData = decodedVectorInkBuilder.AddWholePath(stroke.Spline, stroke.Layout, vb); return(new VectorInkStroke(stroke, vb, pipelineData)); }
public VectorInkStroke(Stroke stroke, Wacom.Ink.Geometry.VectorBrush vectorBrush, PipelineData pipelineData) { Id = stroke.Id; PathPointProperties ppp = stroke.Style.PathPointProperties; 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); Spline = stroke.Spline; Layout = stroke.Layout; VectorBrush = vectorBrush; Polygon = PolygonUtil.ConvertPolygon(pipelineData.Merged.Addition); SimplPoly = pipelineData.Merged.Addition; SensorDataOffset = stroke.SensorDataOffset; SensorDataMappings = stroke.SensorDataMappings; SensorDataId = stroke.SensorDataId; Attributes attribs = new Attributes(Color); if (ppp.Size.HasValue) { attribs.Size = ppp.Size.Value; } Constants = attribs; }
public PipelineData AddWholePath(Spline path, PathPointLayout layout, Wacom.Ink.Geometry.VectorBrush vectorBrush) { var splineInterpolator = new CurvatureBasedInterpolator(layout); var brushApplier = new BrushApplier(layout, vectorBrush); var points = splineInterpolator.Add(true, true, path, null); var polys = brushApplier.Add(true, true, points.Addition, points.Prediction); var hulls = mConvexHullChainProducer.Add(true, true, polys.Addition, polys.Prediction); var merged = mPolygonMerger.Add(true, true, hulls.Addition, hulls.Prediction); return(new PipelineData(polys, merged)); }
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); }