The Centerpoint-Angle Method (CAM) is a gem-cutting technique used to create precise girdle outlines, especially for complex or asymmetrical shapes. CAM preform involves cutting initial shallow pavilion facets to a culet point, which then allows for a level girdle cut, defining the stone’s outline. Some designs retain the CAM culet, while others cut it away.

Hackagem can create all the steps for a variety of outlines, from rectangles to ovals.

Rectangle

The `createRectangle() function takes 2 parameters:

  1. The length to width ratio of the rectangle
  2. The angle for the widest preform face. Adjust as necessary.

To create a rectangle with a L/W ratio of 1.4 and using an angle of 50°, we can write:

setIndexGear(96)
createRectangle(1.4, 50.0)

This generates the following:

Tier Angle Index Instructions
PF1 40.41° 24-72 Cut to centerpoint
PF2 50.00° 00-48 "
G1 90.00° 24-72 Set stone size
G2 90.00° 00-48 Level girdle

Truncated Rectangle

The `createTruncatedRectangle() function takes 3 parameters:

  1. The length to width ratio of the rectangle
  2. The amount of truncation: 0.0 is no truncation, 1.0 is full truncation
  3. The angle for the widest preform face. Adjust as necessary.

So for instance with a L/W ratio of 1.6, a truncation amount of 0.3 and an angle of 45°, we can write:

setIndexGear(96)
createTruncatedRectangle(1.6, .3, 45.0)

This generates the following:

Tier Angle Index Instructions
PF1 32.01° 24-72 Cut to centerpoint
PF2 45.00° 00-48 "
PF3 31.59° 12-36-60-84 "
G1 90.00° 24-72 Set stone size
G3 90.00° 12-36-60-84 Level girdle
G2 90.00° 00-48 "

Truncated Square

This is like the truncated rectangle, just squared :)

setIndexGear(96)
createTruncatedSquare(.3, 45.0)

Truncated Triangle

The createTruncatedTriangle(c, angle) function takes 2 parameters:

  1. The amount of truncation: 0.0 is no truncation, 1.0 is full truncation (and will result in a hexagon)
  2. The angle for the widest preform face. Adjust as necessary.

Cushioned Truncated Square

The createCushionedTruncatedSquare(c, t, a) function takes 3 parameters:

  1. The amount of cushioning, a whole number by which the index is changed.
  2. The amount of truncation: 0.0 is no truncation, 1.0 is full truncation
  3. The angle for the widest preform face. Adjust as necessary.
setIndexGear(96)
createCushionedTruncatedSquare(2, 0.45, 33)

Generates the following:

Tier Angle Index Instructions
PF1 33.00° 02-22-26-46-50-70-74-94 Cut to centerpoint
PF2 29.73° 12-36-60-84 "
G1 90.00° 02-22-26-46-50-70-74-94 Set stone size
G2 90.00° 12-36-60-84 Level girdle

Cushioned Truncated Pentagon

The createCushionedTruncatedSquare(c, t, a) function takes 3 parameters:

  1. The amount of cushioning, a whole number (>0) by which the index is changed.
  2. The amount of truncation: 0.0 is no truncation, 1.0 is full truncation
  3. The angle for the widest preform face. Adjust as necessary.
setIndexGear(120)
createCushionedTruncatedPentagon(1, 0.1, 34);

Ellipse

The createEllipse function takes 4, 5 or 6 parameters:

function createEllipse(a:number, 
                       b:number, 
                       num_points:number, 
                       pointy:boolean, 
                       height?:number, 
                       adjust?:number)
  1. a is the longest radius (from center to the outer edge).
  2. b is the shortest radius. b must be smaller than a or else your computer explodes.
  3. num_points: The number of points on the ellipse. Note that this target number might differ from what actually gets used. This has to do with having a limited number of indices available.
  4. pointy: if true, the far ends are “pointy”.
  5. The height of the two centerpoints (this controls the angles). Default is 1.0
  6. An optional number to adjust the space between the two centerpoints. Can be negative, the default is 0.0
// Example ellipse
createEllipse(1.4, 1, 16, true, 1, -0.2)

The effect of pointy or non pointy for an ellipse with 16 points:

Pointy (n=16) non-Pointy (n=16)

Double-truncated Rectangle

A double-truncated rectangle starts as a rectangle with all four corners truncated, forming an octagon. This octagon is then truncated again at its corners, resulting in a 16-sided polygon with smoothed edges, featuring four original sides shortened by truncations and 12 additional edges created through the two stages of corner cuts.

Parameters:

  1. The length to width ratio of the rectangle
  2. The first round of truncation: 0.0 is no truncation, 1.0 is full truncation
  3. The second round of truncation: 0.0 is no truncation, 1.0 is full truncation
  4. The angle for the widest preform face. Adjust as necessary.
createDoubleTruncatedRectangle(1.4, 0.4, 0.3, 30) ;