/// <summary> /// In this class the second parameter is the number of paths /// </summary> /// <param name="pathdata"></param> /// <param name="increment"></param> /// <returns></returns> public ShapeCollection CreatePaths(PathData pathdata, double increment) { ShapeCollection pc = new ShapeCollection(); pc.PatternName = pathdata.Name; if (pathdata.PathType == PatternType.barrel) { Barrel b = pathdata as Barrel; RadialOffsetPath path = b.OutlineAsOffsets((int)(1 / increment)); Polygon poly = CreatePolygonFrom(path, b.ToolPosition); (poly.RenderTransform as CompositeTransform).Rotation = b.Phase; pc.AddShape(poly); } return(pc); }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="x"></param> X coordinate of starting point /// <param name="y"></param> Y coordinate of starting point /// <returns></returns> public Polygon CreatePolygonFrom(RadialOffsetPath path, double rstart = 0) { Polygon p = new Polygon(); CompositeTransform ct = new CompositeTransform(); p.Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0)); p.RenderTransform = ct; double lastR = rstart; for (int i = 0; i < path.NumPoints; i++) { double angle = i * path.Increment * 2 * Math.PI; double r = lastR + path[i]; double x = Math.Round(r * Math.Cos(angle),3); double y = Math.Round(r * Math.Sin(angle), 3); Point nxtPoint = new Point(x,y ); p.Points.Add(nxtPoint); lastR = r; } return p; }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="x"></param> X coordinate of starting point /// <param name="y"></param> Y coordinate of starting point /// <returns></returns> public Polygon CreatePolygonFrom(RadialOffsetPath path, double rstart = 0) { Polygon p = new Polygon(); CompositeTransform ct = new CompositeTransform(); p.Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0)); p.RenderTransform = ct; double lastR = rstart; for (int i = 0; i < path.NumPoints; i++) { double angle = i * path.Increment * 2 * Math.PI; double r = lastR + path[i]; double x = Math.Round(r * Math.Cos(angle), 3); double y = Math.Round(r * Math.Sin(angle), 3); Point nxtPoint = new Point(x, y); p.Points.Add(nxtPoint); lastR = r; } return(p); }
public RadialOffsetPath OutlineAsOffsets(int nsteps) { RadialOffsetPath outline = new RadialOffsetPath(); outline.NumPoints = nsteps; double inc = 1.0 / (nsteps - 1); outline.Increment = inc; double r = OffsetAt(0); double lastR = r; outline.Add(r); for (int i = 1; i < nsteps; i++) { r = OffsetAt(i * inc); outline.Add(r - lastR); lastR = r; } return outline; }