### User Tools

This is an old revision of the document!

### Path

A path is a series of points, connected by very thin (invisible) lines.

In addition, a path can be open or closed. A open path is typically used to create another, by appending additional points. A closed path is final, and has a line between first and last points.

Paths can be created by giving an array of points, or by calling various functions to create or extend a path.

Note: The difference between Paths and 2D shapes are that Paths are composed of very thin lines, whereas a two dimensional shapes always enclose an area.

Which include:

arc(endpoint, options): return a circular or ellipsoid curved path (see example below for usage).

appendPoint([x,y]): create and return a new Path containing the callee's points followed by the given point.

appendPoints(x,y): return a new Path containing the callee's points followed by the given points

appendBezier(x,y, options): create and return a new Path containing the callee's points followed by a Bezier curve ending at the last point given; all but the last point given are the control points of the Bezier; a null initial control point means use the last two points of the callee as control points for the new Bezier curve.

options can specify {resolution: 55}. Paths can be concatenated with .concat(), the result is a new path.

#### Conversion to 2D Shape

Paths can be converted to two dimensional shapes. First, a Path can be converted directly to a two dimensional shape but the Path must be closed.

```let path = new CSG.Path2D([[10,10], [-10,10], [-10,-10]], true) // create a closed path
let shape = path.innerToCAG()```

Second, a path can be expanded into a two dimensional shape by tracing the path with a circle. The result is a path with rounded ends and thick lines segments. The path can be either open or closed.

```let path = new CSG.Path2D([[10,10], [-10,10], [-10,-10]], true) // create a closed path
let shape = path.expandToCAG(3)```

#### Conversion to 3D Shape

Creating a 3D solid is currently supported by the rectangularExtrude() function. This creates a 3D shape by following the path with a 2D rectangle (upright, perpendicular to the path direction):

```var path = new CSG.Path2D([ [10,10], [-10,10] ], /* closed = */ false);
var anotherpath = new CSG.Path2D([ [-10,-10] ]);
path = path.concat(anotherpath);
path = path.appendPoint([10,-10]);
path = path.close(); // close the path

// of course we could simply have done:
// var path = new CSG.Path2D([ [10,10], [-10,10], [-10,-10], [10,-10] ], /* closed = */ true);

// We can make arcs and circles:
var curvedpath = CSG.Path2D.arc({
center: [0,0,0],