Commit 529dda31 authored by h2b's avatar h2b

Documentation added.

parent e60350c0
......@@ -2,6 +2,53 @@
This is a Scala library of graphics utilities. It is focused on simple drawing of shapes and functions without the need of instructing the graphics system by a dozen or so settings before a simple picture is shown. It is not meant to program graphical user interfaces with buttons, menus and so on.
## The World
A `World` provides graphics in world coordinates. For instance,
val w = World(p1, p2)(p0, w, h, title)
defines a world that has a coordinate system with a `Point` `p1` in the lower-left corner and the upper-right corner at `p2`. All operations ensure clipping to that area, so that it is safe to use coordinates outside of it.
The second parameter group defines the location at the screen: `p0` denotes the upper left `Pixel`, `w` and `h` the width and the height of the window in pixels and `title` gives a window title (that will not reduce the drawing area).
A `Point` defines a location in the world coordinate system using two doubles, while a `Pixel` denotes a location on the screen by means of two integers.
Note that the y axis of the world coordinate system is directed from bottom to top while at the screen level it is vice versa.
So, for example
val w = World(Point(-100,-100), Point(100,100))(Pixel(0,0), 200, 200, "Circle")
defines a world with x and y axis both ranging from -100 to +100 shown in a window of size 200x200 pixels at the upper left corner of the screen titled "Circle".
Once you have a world, you can execute several methods on it: `plot` a point or `clear` the world to a specified color, use `moveTo` or `drawTo` for plotter-like operations and -- at the highest abstraction -- `draw` or `fill` shapes of type `Drawable` or `Fillable`, respectively. (For details see the [API](#api).)
Each world maintains an `activeColor` which can be set and is used for most drawings and fillings until it is changed (except for those that use their own color).
To fill a circle of color `Magenta` and radius 75.0 around the origin of our world `w` on a white background, we write:
w.activeColor = Color.Magenta
w.fill(Circle(Point(0,0), 75.0))
## The Shapes
Shapes are used for the `World`'s `draw` and `fill` methods. A shape can extend the `Shape.Drawable` or `Shape.Fillable` trait or both, which makes it applicable to the according method.
The package comes with a variety of predefined shapes ranging from simple figures like `Line`, `Rectangle` or `Circle` to higher-order ones like `Function` or even `Grid` which draws a simple coordinate system into the world. (For details see the [API](#api).)
Of course, you can define your own shapes. Just implement the `Shape.Drawable` or `Shape.Fillable` trait(s).
## The Screen
A `Screen` provides direct pixel graphics. It is the back end of `World`.
It can be used on its own if no world coordinate system is needed and bare screen-pixel coordinates shall be applied instead. There are no fancy general shape-oriented `draw` and `fill` operations as `World` has to offer, but only some primitives like `setPixel`, `drawLine`, `drawSquare`, `fillSquare`, `moveTo` or `drawTo`.
(For details see the [API](#api).)
## API
See [Scaladoc](
object readme {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
import de.h2b.scala.lib.simgraf._
import de.h2b.scala.lib.simgraf.shapes._
val w = World(Point(-100,-100), Point(100,100))(Pixel(0,0), 200, 200, "Circle")
//> w : de.h2b.scala.lib.simgraf.World = de.h2b.scala.lib.simgraf.World$$anon$1
//| @7e2d773b/
w.activeColor = Color.Magenta
w.fill(Circle(Point(0,0), 75.0))
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment