addNextSegment method

void addNextSegment(
  1. Coordinate p,
  2. bool addStartPoint
)

Implementation

void addNextSegment(Coordinate p, bool addStartPoint) {
  // s0-s1-s2 are the coordinates of the previous segment and the current one
  s0 = s1;
  s1 = s2;
  s2 = p;
  seg0.setCoordinates(s0, s1);
  computeOffsetSegment(seg0, side, distance, offset0);
  seg1.setCoordinates(s1, s2);
  computeOffsetSegment(seg1, side, distance, offset1);

  // do nothing if points are equal
  if (s1.equals(s2)) return;

  int orientation = Orientation.index(s0, s1, s2);
  bool outsideTurn = (orientation == Orientation.CLOCKWISE &&
          side == Position.LEFT) ||
      (orientation == Orientation.COUNTERCLOCKWISE && side == Position.RIGHT);

  if (orientation == 0) {
    // lines are collinear
    addCollinear(addStartPoint);
  } else if (outsideTurn) {
    addOutsideTurn(orientation, addStartPoint);
  } else {
    // inside turn
    addInsideTurn(orientation, addStartPoint);
  }
}