# Alphabetical Listing

> The human animal differs from the lesser primates in his passion for lists.

— H. Allen Smith

## Index

The complete incomplete [1] non-alphabetical [2] alphabetical list of functions and modules currently in The GHOUL, with links to their documentation.
This took a pile of editing, even with the powerful 'find-and-replace' routine of the Geany, so you better appreciate it…​

### Animation

These functions were written primarily to make the GIF illustrations for this documentation…​

`Animate()` | Animate objects and their properties. Complex version.
`Animator()` | Animate objects and their properties.
`BezierTCUp()` | Smooth transition curve for object properties.
`BezierTCDown()` | Smooth transition curve for object properties.
`StringTee()` | Animate objects and their properties. Simple version.
`ViewPort()` | Zoom and rotate around objects.

### Curves

Bézier curve and SVG imaging functions and modules.

#### Bézier

`ArcAngles()` | Angle values of an arc divided into n angles.
`BezierCFractionX()` | Find vertex where x=X.
`BezierCFractionY()` | Find vertex where y=Y.
`BezierCurve()` | Bézier curve as an array of vertices.
`BezierCurveLength()` | The developed length of a Bézier curve.
`BezierPoint()` | Alias for `DeCasteljau()`, and more.
`BCPolygon()` | Polygon in a tuple of arrays [[Points],[Paths]].
`BCPolyhedron()` | Polyhedron in a tuple of arrays [[Points],[Faces]].
`BCShowTPPlane()` | Troubleshoot module for visualising TPPlanes.
`CBezierPoint()` | Cubic Bézier alias for `DeCasteljau()` but faster.
`CurveLength()` | The developed length of any curve.
`CurveOffset()` | Offset an entire curve, left or right.
`DeCasteljau()` | Calculate vertex on a Bézier curve.
`FindCurveVertex()` | Find vertex at distance D.
`QBezierPoint()` | Quadratic Bézier alias for `DeCasteljau()` but faster.
`ShowDeCasteljau()` | Visualise the generation of a Bézier curve.

#### SVG

`SVG()` | Create SVG shapes and images.
`SVG_Shape()` | Create SVG shapes from a library.
`SVG_Glyph()` | Use SVG fonts.

### Lists

Indexable variable functions.

#### Arrays

`ArrayAdd()` | Add something to each element of an array.
`ArrayDomain()` | A tuple with the extreme values of all vertices in an array.
`ArrayProduct()` | Multiply a number of successive array elements with each other.
`ArraySelect()` | Select a number of non-successive array elements.
`ArrayShift()` | Circular shift an array, left or right.
`ArraySum()` | Sum a number of successive elements of an array.
`CropArray()` | Demote an entire array of vertices to 2D.
`Dex()` | Circular address an array element.
`Find()` | Find index of array element.
`FindEQ()` | Find index of array element.
`FindGT()` | Find index of array element.
`FindGTE()` | Find index of array element.
`FindLT()` | Find index of array element.
`FindLTE()` | Find index of array element.
`FindValue()` | Obsolete, use `GetValue()` instead.
`FlattenArray()` | Flattening is depth reduction of an array.
`GetValue()` | Get the value from a key-value pair in such an array.
`IsArray()` | Check if something is an array.
`IsInArray()` | Check if something is in an array.
`Last()` | Last value stored in an array.
`Left()` | Like 'leftstring' but for arrays.
`Len()` | Highest possible index of an array.
`Match()` | Like `GetValue()` but with keys and values in separate arrays.
`MoebiusArray()` | Obsolete, use `Dex()` instead.
`PadArray()` | Add elements to items in an array, e.g., promote from 2D to 3D &c.
`QuickFind()` | Find stuff, quickly, but not as quickly as `search()`, so use that.
`QuickSort()` | Sort an array. Quickly.
`RemoveDoubles()` | Remove double entries from an array.
`ReverseArray()` | Flip an array front-to-back.
`RightArray()` | like 'rightstring', but for arrays.
`ScaleArray()` | Scale an array of vertices with X, Y, and Z factors.
`SetArrayElement()` | Set an array element to a certain value.
`SmashArray()` | Reduce array depth to 1. (I.e, `FlattenArray()` on steroids.)
`SubArray()` | Substring for arrays.
`SumArrays()` | Sums values of two equal-length arrays.

#### Matrices

Mostly (affine) transformation functions.

`AffineTransformArray()` | Perform affine transformations on an array of vertices.
`AffineTransformVertex()` | Perform affine transformations on a vertex.
`IdentityMatrix()` | Generate an identity matrix.
`RotationMatrix()` | Create an affine rotation matrix.
`ScalingMatrix()` | Create an affine scaling matrix.
`ShearingMatrix()` | Create an affine shearing matrix.
`TransformMatrix()` | Create an affine transform matrix on the basis of The GHOUL’s transform notations.
`TranslationMatrix()` | Create an affine translation matrix.
`TransposeMatrix()` | Transpose a matrix.

#### Tuples

`CropTuple()` | Crop a tuple to n items.
`FillTuple()` | Create a tuple filled with n of the same items.
`IsInRange()` | Check if value is a member of the specified range.
`LeftTuple()` | 'Leftstring' but for tuples.
`PadTuple()` | Pad a tuple to length n with a given value.
`RangeToTuple()` | Convert a range to a tuple.
`RemoveElement()` | Remove an element from a tuple.
`ReverseTuple()` | Flip a tuple back to front.
`RightTuple()` | 'Rightstring' but for tuples.
`SetTupleElement()` | Set a tuple element to a certain value.
`SubTuple()` | 'Substring' but for tuples.

#### Vectors

`Bisect()` | Bisect the (acute) angle between two vectors.
`BisectObtuse()` | Bisect the obtuse angle between two vectors.
`BisectLeft()` | Bisect the angle between two vectors 'to the left'.
`BisectRight()` | Bisect the angle between two vectors 'to the right'.
`CrossProduct()` | Vector cross-product.
`DotProduct()` | Vector dot-product.
`HomogeniseVector()` | Homogenise a vector.
`IncAzToVector()` | Turn inclination and azimuth angles into a vector.
`LengthVector()` | Create a vector of a certain length (and direction).
`LPerpVector()` | Vector perpendicular to the 'left' of the given vector.
`Modulus()` | Vector modulus, or 'length'.
`Offset()` | Offset a vector/vertex in the direction of the bisector of two other vectors.
`ProjectVector()` | Project a 3D vector onto Z=0.
`RPerpVector()` | Vector perpendicular to the 'right' of the given vector.
`SegmentDirection()` | 3D direction of a curve segment. `VectorToIncAz()` but different.
`UnitVector()` | Create a unit vector.
`VectorAngle()` | Angle between two vectors.
`VectorSum()` | Sum all vectors in an array of vectors.
`VectorToIncAz()` | Convert a vector into inclination and azimuth angles.
`VectorToPolar()` | Convert a vector into polar coordinates.

### Math and Logic

Math, logic and some otherwise-difficult-to-place functions.

`AndIsFalse()` | And-is-false operation on an array of expressions.
`AndIsTrue()` | Or-is-false operation on an array of expressions.
`Clip()` | Clip a value between a max. and a min. limit.
`Deg()` | Convert radians to degrees.
`Factorial()` | Factorial of n.
`GreatestCommonDivisor()` | Greatest common divisor of an array of values.
`InlineVertex()` | Vertex colinear with two other vertices, on a given plane.
`Intermediate()` | Intermediate curve, vertex, color &c.
`Interpolate()` | Interpolate or extrapolate.
`IsEven()` | Check that value is even.
`IsOdd()` | Check that value is odd.
`IsInteger()` | Check that value is integer.
`IsNotInteger()` | Check that value is not integer.
`IsFraction()` | Check that value is a fraction.
`IsNumber()` | Check that value is a number.
`IsPositive()` | Check that value is positive.
`IsNegative()` | Check that value is negative.
`KroneckerDelta()` | Return Kronecker delta for two values.
`LeastCommonMultiple()` | Least common multiple of an array of values.
`Map()` | Circular map a value onto a range.
`MCeil()` | Like `ceil()` but different.
`MFloor()` | Like `floor()` but different.
`Mod()` | Like the native '%' operator, but more…​
`MRound()` | Like `round()` but different.
`NDecimal()` | The nth decimal of a number.
`NearestEven()` | The nearest even number to a value.
`NearestOdd()` | The nearest odd number to a value.
`OrIsFalse()` | Or-is-false operation on an array of expressions.
`OrIsTrue()` | Or-is-true operation on an array of expressions.
`Rad()` | Convert degrees to radians.
`UndefFallback()` | Fallback value if x=undef.
`Zerofallback()` | Fallback value if x=0.

### Meshes

Not much, but pretty important…​

`CoverMesh()` | Cover an array of vertices with a mesh.
`QuadSpace()` | Triangulate a 'face' between four vertices.

### Modifiers

Things that make other things look like other things.

`CircularArray()` | Copy objects in a (partial) circle.
`LinearArray()` | Copy objects in a line.
`OutRadius()` | Compensate radius for '$fn-effect'.
`Position()` | Position an object in 3D.
`PosX2D()` | Trim the -x part of a 2D shape.
`PosX3D()` | Trim the -x part of a 3D shape.
`PosZ3D()` | Trim the -z part of a 3D shape.
`ScreenPosition()` | Position an object on the screen (viewport).
`SectorCut()` | Cut a sector from an object.
`Torus()` | Turn a 2D shape into a (partial) torus.
`Tumble()` | Tumble an object in an animation.

### Objects

Things. Useful or not. 'Line', here, means a long, thin and narrow `cube()`.

`ALine()` | A very long line, through a point, at an angle.
`Arrow()` | A 3D arrow.
`BallCylinderBetween()` | Cylinder with radiused ends between two points.
`Cap()` | Turn a 2D shape into a 3D cap.
`ChamferedBar()` | A bar with chamfered ends.
`ChamferedCube()` | A cube with chamfered edges.
`ChamferedCylinder()` | A cylinder with chamfered ends.
`CoordinateSystem()` | A coordinate system, for illustrations.
`CylinderBetween()` | A cylinder between two points.
`Dimension()` | For dimensioning an object, for illustrations.
`GraphPaper()` | GraphPaper, to illustrate functions and curves.
`HLine()` | A very long horizontal line, through a point.
`Line()` | A line between two points.
`Protractor()` | A protractor for measuring objects.
`Ruler()` | A ruler for measuring objects.
`StarCap()` | A cap for a star-shaped end.
`VLine()` | A very long vertical line, through a point.
`Waterline()` | 'Waterline' for illustrations.

### Parts

Actual real-world parts, or parts thereof.

#### Parts

`GTPulley()` | Toothed-belt pulley.
`GTTooth()` | Toothed-belt pulley tooth.
`KnurledCylinder()` | A knurled cylinder.
`SimpleThread()` | Simple machine thread routine.
`SimpleThreadedHole()` | Simple machine threaded hole.
`SimpleThreadedRod()` | Simple machine threaded rod.
`SimpleBolt()` | Simple machine threaded bolt.
`SimpleNut()` | Simple machine threaded nut.

#### Thread

Threads, for bolts, not needles. Any shape or form.

`Thread()` | Very powerful thread generator.

### Shapes

Useful and maybe-no-so shapes. These are 2D objects, formatted like a polygon, i.e., [[Points],[Paths]] so they can be manipulated at will, unlike the native shapes like `circle()` &c.

`ChamferedRectangle()` | Chamfered rectangle.
`Circle()` | Can you do `circle()[0][5]`? No, but you can `Circle()[0][5]`…​
`Diamond()` | A diamond.
`Ellipse()` | An ellipse, but more than just `scale()circle()`.
`EquilateralTriangle()` | An equilateral triangle.
`Grooved()` | A grooved surface.
`InsideRadius()` | A fillet-like shape.
`NGon()` | A multi-edged regular shape, n-gon, nothing like `circle($fn=n)`.
`OutsideRadius()` | The reverse of a fillet ;-)
`OvalRing()` | An oval ring.
`RadiusedRectangle()` | A rectangle with radiused corners.
`RectangularProfile()` | Like a box profile, a 'rectangular ring'.
`RightTriangle()` | A right triangle.
`Ring()` | A ring, not oval, not square, and no, not `difference(){circle()circle()}`.
`Sector()` | A sector, like a wedge out of a circle.
`Square()` | No, don’t even `square()`.
`Star()` | A star shape.

### Visualisers

things to make otherwise unseen things seen.

`ShowCurve()` | Show a curve with cylinders and spheres.
`ShowFx()` | Graph a function.
`ShowSlice()` | Show a slice through a complex object.
`ShowVertex()` | Show (highlight) a vertex.
`ShowVertices()` | Show (highlight) multiple vertices.

### Words

Anything to do with words and letters and their manipulation or creation.

#### Echos

For the console…​

`Alert()` | Alert the user to something.
`Debug()` | Debugging output.
`Echo()` | `echo()`, but more.
`ErrorOnFalse()` | Throw an error upon a 'false' result.
`ErrorOnTrue()` | Throw an error upon a 'true' result.
`FallBack()` | Fallback value with alert.
`Print()` | `echo()`, but (much) more.
`Stop()` | Halt execution with output.

#### Strings

`AsciiMapString()` | Map a string to its ASCII values (in an array).
`IsNullOrEmptyString()` | Check for empty strings.
`IsString()` | Check if value is a string.
`LeftString()` | Left part of a string.
`MapString()` | Map a string to other values.
`RightString()` | Right part of a string.
`SetDecimals()` | Crop a number to n decimals for output purposes.
`StringToTuple()` | Convert a string to a tuple.
`SubString()` | Part of a string.
`TupleToString()` | Convert a tuple of strings and numbers to a single string.

#### Text

Generation of text objects.

`SimpleBarrelText()` | Put text on a 'barrel', i.e., a cylinder.
`SimpleCircleText()` | Put text in a circle.
`SimpleText()` | Simple text routine, yes, I know, `text()`.
`BrailleText()` | Convert text into Braille.

1. Functions that are completely useless to users, i.e., non-user functions, are not listed here. It wouldn’t make sense. They’re not for you…​
2. It’s ordered alphabetically, grouped by library.