public SvgPathData.SvgPathIndex GetPathIndex(int partIndex) { var pathIndex = new SvgPathData.SvgPathIndex(); pathIndex.BlockIndex = blockIndex; pathIndex.ItemIndex = currentIndex; pathIndex.PartIndex = partIndex; return(pathIndex); }
private void DrawAnchorSub(CanvasDrawingSession win2d, ViewInfo viewInfo, SvgPathData.SvgPathIndex myIndex, int partIndex, float x, float y) { myIndex.PartIndex = partIndex; bool ellipse = true; switch (Command) { case 'c': case 'C': if (partIndex == 2) { ellipse = false; } break; default: break; } // bool hover = viewInfo.HoverIndex == myIndex; bool select = viewInfo.TargetPathData.GetCurrentIndex() == myIndex; Color color = Colors.Blue; bool fill = false; if (viewInfo.HoverIndex == myIndex) { fill = true; } else if (select) { color = GetColor(); fill = true; } else { color = GetColor(); } int size = 4; if (ellipse) { if (fill) { win2d.FillEllipse(x, y, size, size, color); } else { win2d.DrawEllipse(x, y, size, size, color); } } else { Rect r = new Rect(x - size, y - size, size * 2, size * 2); if (fill) { win2d.FillRectangle(r, color); } else { win2d.DrawRectangle(r, color); } } }
/// <summary> /// /// </summary> /// <param name="win2d"></param> /// <param name="scale"></param> internal void DrawAnchor(CanvasDrawingSession win2d, ViewInfo viewInfo, SvgPathData.SvgPathIndex myIndex) { float scale = viewInfo.Scale; switch (Command) { case 'M': case 'h': case 'H': case 'v': case 'V': case 'l': case 'L': int partindex = 0; foreach (Vector2 point in points) { float x = (float)point.X * scale; float y = (float)point.Y * scale; DrawAnchorSub(win2d, viewInfo, myIndex, partindex, x, y); partindex++; } break; case 'c': case 'C': if (points.Count == 3) { Color color = GetColor(); Vector2 point = points[2]; float x = (float)point.X * scale; float y = (float)point.Y * scale; DrawAnchorSub(win2d, viewInfo, myIndex, 2, x, y); Vector2 p0 = befor.GetPoint(); float x0 = (float)p0.X * scale; float y0 = (float)p0.Y * scale; Vector2 p1 = points[0]; float x1 = (float)p1.X * scale; float y1 = (float)p1.Y * scale; win2d.DrawLine(x0, y0, x1, y1, color); DrawAnchorSub(win2d, viewInfo, myIndex, 0, x1, y1); Vector2 p2 = points[1]; float x2 = (float)p2.X * scale; float y2 = (float)p2.Y * scale; win2d.DrawLine(x, y, x2, y2, color); DrawAnchorSub(win2d, viewInfo, myIndex, 1, x2, y2); } break; case 'a': case 'A': foreach (Vector2 point in points) { float x = (float)point.X * scale; float y = (float)point.Y * scale; DrawAnchorSub(win2d, viewInfo, myIndex, 0, x, y); } break; default: break; } }