Tutorials (back to the list of tutorials)

## Fundamental Geometries in iGeo

### Creating Points

The first simplest geometry to create would be a point. It can be created by instantiating a IPoint class. Three numbers in the arguments of IPoint constructor are x y z coordinates.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new IPoint(0,0,0);
new IPoint(20,0,0);
new IPoint(20,20,0);
new IPoint(0,20,0);
```

### Setting Color of Objects

To set color to iGeo objects, use clr() method with arguments of either float(0.0-1.0) or int (0-255) or hsb() method with float.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new IPoint(0,0,0).clr(255,0,0); // RGB in int
new IPoint(20,0,0).clr(0,0.3,0.9); // RGB in float or double
new IPoint(20,20,0).hsb(0.5,1.0,0.9); // HSB in float or double
new IPoint(0,20,0).clr(255); // grayscale in int, float or double
```

### Creating Lines

To create line objects, use ICurve class (a line is seen as a type of a curve). Put x, y, z of the start point and x, y, z of the end point in the argument.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new ICurve(0,0,0, 30,30,30);
new ICurve(0,-10,0, 30,10,20).clr(0.5,0,0);
new ICurve(0,-20,0, 30,-10,10).clr(1.0,0,0); // NOTE: float is put in clr()
new ICurve(0,-30,0, 30,-30,0).clr(1,0,0); // NOTE: int is put in clr() and the range of int in color is 0-255
```

### Creating NURBS Curves

To create NURBS(Non-Uniform Rational Basis Spline) curve objects, use also ICurve class. Put array of x, y, z as control points and degree of the curve in the argument. The array of x, y, z needs to be 2D array. Note that to create degree 2 curve you need more than 3 control points and for degree 3, more than 4.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

double[][] controlPoints1 =
{{0,0,0}, {20,20,20}, {-20,20,0}};
new ICurve(controlPoints1, 2); // degree = 2

// to put number inside
new ICurve(new double[][]{{0,15,0}, {20,35,20}, {-20,35,0}}, 2).clr(1.,0,0);

// degree 1 curve (polyline)
double[][] controlPoints2 =
{{-60,-30,0}, {-60,-10,0}, {-40,-30,0}, {-40,-10,0}};
new ICurve(controlPoints2, 1).clr(0,1.,1.);

// or you can omit the degree argument for polyline
double[][] controlPoints3 =
{{-30,-30,0}, {-30,-10,0}, {-10,-30,0}, {-10,-10,0}};
new ICurve(controlPoints3).clr(0,0.5,1.);

// degree 2 curve
double[][] controlPoints4 =
{{0,-30,0}, {0,-10,0}, {20,-30,0}, {20,-10,0}};
new ICurve(controlPoints4,2).clr(.5,0,1.);

// degree 3 curve
double[][] controlPoints5 =
{{30,-30,0}, {30,-10,0}, {50,-30,0}, {50,-10,0}};
new ICurve(controlPoints5,3).clr(1.,0,1.);
```

### Creating Simple Surfaces

Here is an example of creating surfaces specifying 3 or 4 corner points. Use ISurface class to create a surface. Put 3 or 4 of x, y, z coordinates in the argument.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new ISurface(0,0,0, 40,40,40, 80,0,0, 40,-40,40);

// 3 corner points (triangle)
new ISurface(-50,40,0, -10,40,0, -50,0,0).clr(0,0,1.);

// rectangle
new ISurface(-50,-10,0, -10,-10,0, -10,-40,0, -50,-40,0).clr(0,1.,1.);
```

### Creating NURBS Surfaces

To create NURBS surface specifying degree number, use also ISurface class. The first argument is 2D array of control points in u and v direction of x y z coordinates array. The second argument is u degree and the third is v degree. Note again that to have degree 2 you need more than 3 control points in u or v direction and for degree 3, more than 4.

```import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

// 4 points in u direction, 3 points in v direction
double[][][] controlPoints =
{{{-30,-30, 10}, {-30,  0,-20}, {-30, 30,  0}},
{{  0,-30,-10}, {  0, 20,-50}, {  0, 30,-20}},
{{ 30,-30,-20}, { 30, 20, 60}, { 30, 30, 30}},
{{ 60,-30,  0}, { 60,  0, 40}, { 60, 30, 30}}};

// u degree = 3, v degree = 2
new ISurface(controlPoints, 3, 2).clr(1,.8,0);
```

(back to the list of tutorials)