public override void ReEvaluateComputeValue(ref ReEvaluateArgs args)
{
var myspec = this.spec;
this.fillColor = myspec.ActualColor;
this.strokeColor = myspec.StrokeColor;
this.ActualX = ConvertToPx(myspec.X, ref args);
this.ActualY = ConvertToPx(myspec.Y, ref args);
this.ActualRadiusX = ConvertToPx(myspec.RadiusX, ref args);
this.ActualRadiusY = ConvertToPx(myspec.RadiusY, ref args);
this.ActualStrokeWidth = ConvertToPx(myspec.StrokeWidth, ref args);
//path may note need
if (this.IsPathValid) { return; }
ClearCachePath();
this.myCachedPath = new GraphicsPath();
myCachedPath.StartFigure();
myCachedPath.AddEllipse(this.ActualX - this.ActualRadiusX, this.ActualY - this.ActualRadiusY, 2 * this.ActualRadiusX, 2 * this.ActualRadiusY);
myCachedPath.CloseFigure();
ValidatePath();
}