public new DrawEllipseObject GetWorldDrawObject() { if (Parent != null) { PointF worldTemp = new PointF(); var tempR = new PointF(rectangle.Width, rectangle.Height); worldTemp.X = rectangle.X;//当前坐标 worldTemp.Y = rectangle.Y; var worldPosition = new PointF(0f, 0f); var worldR = PointF.Empty; var p = Parent; while (p != null) { var zw = 0f; var zh = 0f; if (p.Width == 0 || p.Height == 0) { zw = 1f; zh = 1f; //worldTemp.X += p.Rectangle.X; //worldTemp.Y += p.Rectangle.Y; } else { zw = p.Width / p.ViewBox_w; zh = p.Height / p.ViewBox_h; } worldPosition.X += worldTemp.X * zw; worldPosition.Y += worldTemp.Y * zh; worldR.X += tempR.X * zw; worldR.Y += tempR.Y * zh; worldTemp.X = p.Rectangle.X; worldTemp.Y = p.Rectangle.Y; tempR = worldR; p = p.Parent; } worldPosition.X += worldTemp.X; worldPosition.Y += worldTemp.Y; var worldDrawObj = new DrawEllipseObject(worldPosition.X, worldPosition.Y, worldR.X, worldR.Y); //var worldDrawObj = new DrawEllipseObject(wokrldPosition.X, worldPosition.Y, 5, 5); return(worldDrawObj); } return(this); }
public static DrawEllipseObject Create(SVGEllipse svg) { try { float cx = ParseSize(svg.CX, Dpi.X); float cy = ParseSize(svg.CY, Dpi.Y); float rx = ParseSize(svg.RX, Dpi.X); float ry = ParseSize(svg.RY, Dpi.Y); var dobj = new DrawEllipseObject(cx - rx, cy - ry, rx * 2, ry * 2); dobj.SetStyleFromSvg(svg); return(dobj); } catch (Exception ex) { SVGErr.Log("DrawEllipse", "CreateRectangle", ex.ToString(), SVGErr._LogPriority.Info); return(null); } }