ELSE {
B:
PROC [name: Rope.
ROPE]
RETURNS [Controls.Button] ~ {
RETURN[Controls.ClickButton[Rope.Concat[name, ": On"], Button, e]];
};
e: EllipseData Ź NEW[EllipseDataRep];
nPts: INTEGER Ź IF nPoints.ok THEN nPoints.int ELSE 40;
e.points Ź NEW[G2dBasic.PairSequenceRep[nPts]];
e.derivs Ź NEW[G2dBasic.PairSequenceRep[nPts]];
e.accels Ź NEW[G2dBasic.PairSequenceRep[nPts]];
e.points.length Ź e.derivs.length Ź e.accels.length Ź nPts;
e.a Ź Controls.NewControl["a", vSlider, e, 0.0, 1.0, 0.5, EllipseControl];
e.b Ź Controls.NewControl["b", vSlider, e, 0.0, 1.0, 0.25, EllipseControl];
e.scale Ź Controls.NewControl["scale", vSlider, e, 0.0, 3.0, 1.0, EllipseControl];
ComputeEllipse[e];
e.viewer Ź Controls.OuterViewer[
name: "G2d Ellipse",
graphicsHeight: 200,
drawProc: DrawEllipse,
controls: LIST[e.a, e.b, e.scale],
buttons: LIST[B["Ellipse"], B["Focci"], B["Derivs"], B["Accels"]],
clientData: e].parent;
e.graphics Ź NARROW[e.viewer.data, Controls.OuterData].graphics;
};