public override Task Rebuild() { this.DebugDepth("Rebuild"); bool changed = false; using (RebuildLock()) { var sides = Sides.ClampIfNotCalculated(this, 3, 360, ref changed); var diameter = Diameter.ClampIfNotCalculated(this, .01, 1000000, ref changed); var height = Height.ClampIfNotCalculated(this, .01, 1000000, ref changed); using (new CenterAndHeightMaintainer(this)) { var path = new VertexStorage(); path.MoveTo(0, 0); path.LineTo(diameter / 2, 0); path.LineTo(0, height); Mesh = VertexSourceToMesh.Revolve(path, sides); } } Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); return(Task.CompletedTask); }