sclass ScaledDiagram { settable int w = 600; settable int h = 400; int horizontalMargin = 10; int verticalMargin = 10; settable DoubleRange horizontalRange; settable DoubleRange verticalRange; DoubleRange xRange() { ret doubleRange(horizontalMargin, w-horizontalMargin); } DoubleRange yRange() { ret doubleRange(h-verticalMargin, verticalMargin); } double xToScreen(double x) { ret transformBetweenDoubleRanges(x, horizontalRange(), xRange()); } double yToScreen(double y) { ret transformBetweenDoubleRanges(y, verticalRange(), yRange()); } double xFromScreen(double x) { ret transformBetweenDoubleRanges(x, xRange(), horizontalRange()); } double yFromScreen(double y) { ret transformBetweenDoubleRanges(y, yRange(), verticalRange()); } }