igeo

## Class ICurveGeo

- java.lang.Object
- - igeo.IParameterObject
  - - igeo.INurbsGeo
    - - igeo.ICurveGeo

- All Implemented Interfaces:
    ICurveI, ICurveOp, IEntityParameter, IParameter, ISubobject, ITransformable, IVal
  Direct Known Subclasses:
    IArcGeo, ICircleGeo, ITrimCurve

      public class ICurveGeo
      extends INurbsGeo
      implements ICurveI, IEntityParameter

  Geometry of NURBS curve.
  Author:
    Satoru Sugihara

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `IBSplineBasisFunction` | `basisFunction` bernstein basis function
    `IVecI[]` | `controlPoints` control points
    `boolean[]` | `defaultWeights` flag to determine to use default weight value (1.0)
    `int` | `degree` degree of NURBS curve
    `IBSplineBasisFunction` | `derivativeFunction` derivative of bernstein basis function
    `double[]` | `knots` normalized knot vector (start value in knot vector is 0, end value is 1)
    `double` | `uend` ustart and uend are not normalized, keeping original value in input files
    `ICurveCache` | `uSearchCache`
    `double` | `ustart` ustart and uend are not normalized, keeping original value in input files

    - ### Fields inherited from class igeo.IParameterObject

      `parent`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ICurveGeo()`
    `ICurveGeo(double[][] xyzValues)`
    `ICurveGeo(double[][] xyzValues, boolean close)`
    `ICurveGeo(double[][] xyzValues, int degree)`
    `ICurveGeo(double[][] xyzValues, int degree, boolean close)`
    `ICurveGeo(double x1, double y1, double z1, double x2, double y2, double z2)`
    `ICurveGeo(ICurveGeo crv)`
    `ICurveGeo(IEdge edge)`
    `ICurveGeo(IVecI pt)`
    `ICurveGeo(IVecI[] cpts)`
    `ICurveGeo(IVecI[] cpts, boolean close)`
    `ICurveGeo(IVecI[] cpts, int degree)`
    `ICurveGeo(IVecI[] cpts, int degree, boolean close)`
    `ICurveGeo(IVecI[] cpts, int degree, double[] knots)`
    `ICurveGeo(IVecI[] cpts, int degree, double[] knots, double ustart, double uend)`
    `ICurveGeo(IVecI pt1, IVecI pt2)`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ICurveGeo` | `add(double x, double y, double z)` transformation methods
    `ICurveGeo` | `add(double f, IVecI v)` scale add alias
    `ICurveGeo` | `add(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveGeo` | `add(IDoubleI f, IVecI v)` scale add alias
    `ICurveGeo` | `add(IVecI v)`
    `ICurveGeo` | `add(IVecI v, double f)` scale add
    `ICurveGeo` | `add(IVecI v, IDoubleI f)` scale add
    `ICurveGeo` | `addCP(int index, IVecI pt)` add control point at i and rebuild the curve.
    `ICurveGeo` | `addCP(int index, IVecI[] pts)` add control points at i and rebuild the curve.
    `ICurveGeo` | `addCP(int index, IVecI[] pts, int newDegree)` add control point at i and rebuild the curve and change degree.
    `ICurveGeo` | `addCP(int index, IVecI pt, int newDegree)` add control point at i and rebuild the curve and change degree.
    `ICurveGeo` | `addCP(IVecI pt)` add control point at the end and rebuild the curve.
    `ICurveGeo` | `addCP(IVecI[] pts)` add control points at the end and rebuild the curve.
    `ICurveGeo` | `addCP(IVecI[] pts, int newDegree)` add control point at i and rebuild the curve and change degree.
    `ICurveGeo` | `addCP(IVecI pt, int newDegree)` add control point at the end and rebuild the curve and change degree if possible.
    `IVec` | `center()` Returns center of geometry object.
    `static void` | `checkDuplicatedCP(IVecI[] cpts)`
    `static void` | `checkDuplicatedCP(IVecI[] origCPs, IVecI newCP)`
    `static void` | `checkDuplicatedCP(IVecI[] origCPs, IVecI[] newCPs)`
    `static void` | `checkDuplicatedCPOnEdge(IVecI[] cpts)`
    `IVec` | `closePt(IVec2I pt)` find approximately closest point on a curve on 2D
    `IVec` | `closePt(IVecI pt)` find approximately closest point on a curve
    `ICurveGeo` | `cp()` cp() is alias of dup()
    `ICurveGeo` | `cp(double x, double y, double z)` cp() is alias of dup().add()
    `ICurveGeo` | `cp(IDoubleI x, IDoubleI y, IDoubleI z)` cp() is alias of dup().add()
    `IVecI` | `cp(IIntegerI i)` getting i-th control point
    `IVecI` | `cp(int i)` getting i-th control point
    `ICurveGeo` | `cp(IVecI v)` cp() is alias of dup().add()
    `int` | `cpNum()`
    `int` | `cpNum(ISwitchE e)`
    `IInteger` | `cpNum(ISwitchR r)`
    `IVecI[]` | `cps()` all control points
    `int` | `deg()`
    `int` | `deg(ISwitchE e)`
    `IInteger` | `deg(ISwitchR r)`
    `double` | `dist(IVec2I pt)` distance to the closest point on a curve on 2D
    `double` | `dist(IVecI pt)` distance to the closest point on a curve
    `ICurveGeo` | `div(double v)`
    `ICurveGeo` | `div(IDoubleI v)`
    `ICurveGeo` | `dup()` duplicate the instance
    `IVec` | `end()`
    `IVec` | `endCP()`
    `IVec` | `ep(IIntegerI i)`
    `IVec` | `ep(int i)` close curve with the current control points.
    `int` | `epNum()`
    `int` | `epNum(ISwitchE e)`
    `IInteger` | `epNum(ISwitchR r)`
    `ICurveGeo` | `flip()` alias of neg
    `ICurveGeo` | `flipU()` alias of rev()
    `ICurveGeo` | `get()`
    `static IVec[]` | `getPointsFromArray(double[][] xyzvalues)`
    `void` | `init(IVecI[] cpts)`
    `void` | `init(IVecI[] cpts, boolean close)`
    `void` | `init(IVecI[] cpts, int degree)`
    `void` | `init(IVecI[] cpts, int degree, boolean close)`
    `void` | `init(IVecI[] cpts, int degree, double[] knots)`
    `ICurveGeo` | `insertCP(int i, IVecI pt)` alias of addCP(int,IVecI)
    `ICurveGeo` | `insertCP(int i, IVecI[] pts)` alias of addCP(int,IVecI[])
    `IVec[]` | `intersectPlane(IVecI planeDir, IVecI planePt)` intersection of curve and plane.
    `IVec[]` | `intersectPlane(IVecI planeDir, IVecI planePt, int segmentResolution)` intersection of curve and plane.
    `boolean` | `isClosed()`
    `boolean` | `isClosed(ISwitchE e)`
    `IBool` | `isClosed(ISwitchR r)`
    `boolean` | `isInside2d(IVecI pt)` check if the input point is inside a closed curve.
    `boolean` | `isInside2d(IVecI pt, IVecI projectionDir)` check if the input point is inside a closed curve.
    `boolean` | `isRational()`
    `boolean` | `isRational(ISwitchE e)`
    `IBool` | `isRational(ISwitchR r)`
    `boolean` | `isValid()`
    `static boolean` | `isValidCP(IVecI[] cpts)`
    `static boolean` | `isValidCP(IVecI[] cpts, int deg, double[] knots)`
    `IDouble` | `knot(IIntegerI i)`
    `double` | `knot(int i)` close curve with the current control points.
    `int` | `knotNum()`
    `int` | `knotNum(ISwitchE e)`
    `IInteger` | `knotNum(ISwitchR r)`
    `double[]` | `knots()` all knot values
    `double[]` | `knots(ISwitchE e)`
    `IDouble[]` | `knots(ISwitchR r)`
    `double` | `len()`
    `double` | `len(double resolutionPerEP)`
    `double` | `len(ISwitchE e)`
    `IDouble` | `len(ISwitchR r)`
    `IVec` | `mid()` parametrically mid point of a curve
    `ICurveGeo` | `mirror(IVecI planeDir)` mirror is alias of ref
    `ICurveGeo` | `mirror(IVecI center, IVecI planeDir)`
    `ICurveGeo` | `mul(double v)`
    `ICurveGeo` | `mul(IDoubleI v)`
    `ICurveGeo` | `mv(double x, double y, double z)` mv() is alias of add()
    `ICurveGeo` | `mv(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveGeo` | `mv(IVecI v)`
    `ICurveGeo` | `neg()`
    `int` | `num()` change degree.
    `int` | `num(ISwitchE e)`
    `IInteger` | `num(ISwitchR r)`
    `int` | `overlapCPNum()` number of overlapping control points at the end and the beginning when the curve is closed.
    `IVec` | `pt(double u)`
    `void` | `pt(double u, IVec retval)`
    `IVec` | `pt(IDoubleI u)`
    `ICurveGeo` | `ref(IVecI planeDir)` reflect(mirror) 3 dimensionally to the other side of the plane
    `ICurveGeo` | `ref(IVecI center, IVecI planeDir)`
    `ICurveGeo` | `removeCP()` removing control point at the end and rebuild the curve.
    `ICurveGeo` | `removeCP(int index)` removing control point at i and rebuild the curve note that a knots is rebuilt with default equal interval and destroy original knot intervals if variable, like circle.
    `ICurveGeo` | `removeCP(int indexFrom, int indexTo)` removing control point from indexFrom to indexTo-1 and rebuild the curve.
    `ICurveGeo` | `rev()` reverse U coordintates direction of curve, without creating a new object
    `ICurveGeo` | `revU()` alias of rev()
    `ICurveGeo` | `rot(double angle)`
    `ICurveGeo` | `rot(IDoubleI angle)` rotation around z-axis and origin
    `ICurveGeo` | `rot(IVecI axis, double angle)`
    `ICurveGeo` | `rot(IVecI axis, IDoubleI angle)` rotation around axis vector
    `ICurveGeo` | `rot(IVecI axis, IVecI destDir)` rotate to destination direction vector
    `ICurveGeo` | `rot(IVecI center, IVecI axis, double angle)`
    `ICurveGeo` | `rot(IVecI center, IVecI axis, IDoubleI angle)` rotation around axis vector and center
    `ICurveGeo` | `rot(IVecI center, IVecI axis, IVecI destPt)` rotate to destination point location
    `ICurveGeo` | `rot2(double angle)` rotation on xy-plane around origin; same with rot(double)
    `ICurveGeo` | `rot2(IDoubleI angle)` rotation on xy-plane around origin; same with rot(IDoubleI)
    `ICurveGeo` | `rot2(IVecI destDir)` rotation on xy-plane to destination direction vector
    `ICurveGeo` | `rot2(IVecI center, double angle)`
    `ICurveGeo` | `rot2(IVecI center, IDoubleI angle)` rotation on xy-plane around center
    `ICurveGeo` | `rot2(IVecI center, IVecI destPt)` rotation on xy-plane to destination point location
    `ICurveGeo` | `scale(double f)`
    `ICurveGeo` | `scale(IDoubleI f)` alias of mul
    `ICurveGeo` | `scale(IVecI center, double f)`
    `ICurveGeo` | `scale(IVecI center, IDoubleI f)`
    `ICurveGeo` | `scale1d(IVecI axis, double f)` scale only in 1 direction
    `ICurveGeo` | `scale1d(IVecI axis, IDoubleI f)`
    `ICurveGeo` | `scale1d(IVecI center, IVecI axis, double f)`
    `ICurveGeo` | `scale1d(IVecI center, IVecI axis, IDoubleI f)`
    `ICurveGeo` | `shear(double sxy, double syx, double syz, double szy, double szx, double sxz)` shear operation
    `ICurveGeo` | `shear(IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `ICurveGeo` | `shear(IVecI center, double sxy, double syx, double syz, double szy, double szx, double sxz)`
    `ICurveGeo` | `shear(IVecI center, IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `ICurveGeo` | `shearXY(double sxy, double syx)`
    `ICurveGeo` | `shearXY(IDoubleI sxy, IDoubleI syx)`
    `ICurveGeo` | `shearXY(IVecI center, double sxy, double syx)`
    `ICurveGeo` | `shearXY(IVecI center, IDoubleI sxy, IDoubleI syx)`
    `ICurveGeo` | `shearYZ(double syz, double szy)`
    `ICurveGeo` | `shearYZ(IDoubleI syz, IDoubleI szy)`
    `ICurveGeo` | `shearYZ(IVecI center, double syz, double szy)`
    `ICurveGeo` | `shearYZ(IVecI center, IDoubleI syz, IDoubleI szy)`
    `ICurveGeo` | `shearZX(double szx, double sxz)`
    `ICurveGeo` | `shearZX(IDoubleI szx, IDoubleI sxz)`
    `ICurveGeo` | `shearZX(IVecI center, double szx, double sxz)`
    `ICurveGeo` | `shearZX(IVecI center, IDoubleI szx, IDoubleI sxz)`
    `IVec` | `start()`
    `IVec` | `startCP()`
    `ICurveGeo` | `sub(double x, double y, double z)`
    `ICurveGeo` | `sub(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveGeo` | `sub(IVecI v)`
    `IVec` | `tan(double u)`
    `void` | `tan(double u, IVec retval)`
    `IVec` | `tan(IDoubleI u)`
    `ICurveGeo` | `transform(IMatrix3I mat)`
    `ICurveGeo` | `transform(IMatrix4I mat)`
    `ICurveGeo` | `transform(IVecI xvec, IVecI yvec, IVecI zvec)`
    `ICurveGeo` | `transform(IVecI xvec, IVecI yvec, IVecI zvec, IVecI translate)`
    `ICurveGeo` | `translate(double x, double y, double z)` translate is alias of add()
    `ICurveGeo` | `translate(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveGeo` | `translate(IVecI v)`
    `IDouble` | `u(IInteger epIdx, IDouble epFraction)`
    `double` | `u(int epIdx, double epFraction)`
    `double` | `u(ISwitchE r, IVec2I pt)`
    `double` | `u(ISwitchE r, IVecI pt)`
    `IDouble` | `u(ISwitchR r, IVec2I pt)`
    `IDouble` | `u(ISwitchR r, IVecI pt)`
    `double` | `u(IVec2I pt)` approximate invert projection from 2D location to interanl parameter U
    `double` | `u(IVecI pt)` approximate invert projection from 3D location to interanl parameter U (closest point on curve)
    `double` | `uend()`
    `double` | `uend(ISwitchE e)`
    `IDouble` | `uend(ISwitchR r)`
    `ICurveGeo` | `updateCache()`
    `double` | `ustart()`
    `double` | `ustart(ISwitchE e)`
    `IDouble` | `ustart(ISwitchR r)`

    - ### Methods inherited from class igeo.INurbsGeo

      `createClosedCP, createClosedCPInU, createClosedCPInV, createClosedKnots, createKnots, createKnots, invertKnots, isValidKnots, normalizeKnots`

    - ### Methods inherited from class igeo.IParameterObject

      `createObject, parent, parent`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### controlPoints

          public IVecI[] controlPoints

      control points

    - #### degree

          public int degree

      degree of NURBS curve

    - #### knots

          public double[] knots

      normalized knot vector (start value in knot vector is 0, end value is 1)

    - #### ustart

          public double ustart

      ustart and uend are not normalized, keeping original value in input files

    - #### uend

          public double uend

      ustart and uend are not normalized, keeping original value in input files

    - #### defaultWeights

          public boolean[] defaultWeights

      flag to determine to use default weight value (1.0)

    - #### basisFunction

          public IBSplineBasisFunction basisFunction

      bernstein basis function

    - #### derivativeFunction

          public IBSplineBasisFunction derivativeFunction

      derivative of bernstein basis function

    - #### uSearchCache

          public ICurveCache uSearchCache

  - ### Constructor Detail

    - #### ICurveGeo

          public ICurveGeo()

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts,
                           int degree,
                           double[] knots,
                           double ustart,
                           double uend)

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts,
                           int degree,
                           double[] knots)

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts,
                           int degree)

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts)

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts,
                           int degree,
                           boolean close)

    - #### ICurveGeo

          public ICurveGeo(IVecI[] cpts,
                           boolean close)

    - #### ICurveGeo

          public ICurveGeo(IVecI pt1,
                           IVecI pt2)

    - #### ICurveGeo

          public ICurveGeo(IVecI pt)

    - #### ICurveGeo

          public ICurveGeo(double x1,
                           double y1,
                           double z1,
                           double x2,
                           double y2,
                           double z2)

    - #### ICurveGeo

          public ICurveGeo(double[][] xyzValues)

    - #### ICurveGeo

          public ICurveGeo(double[][] xyzValues,
                           int degree)

    - #### ICurveGeo

          public ICurveGeo(double[][] xyzValues,
                           boolean close)

    - #### ICurveGeo

          public ICurveGeo(double[][] xyzValues,
                           int degree,
                           boolean close)

    - #### ICurveGeo

          public ICurveGeo(IEdge edge)

    - #### ICurveGeo

          public ICurveGeo(ICurveGeo crv)

  - ### Method Detail

    - #### init

          public void init(IVecI[] cpts)

    - #### init

          public void init(IVecI[] cpts,
                           int degree)

    - #### init

          public void init(IVecI[] cpts,
                           boolean close)

    - #### init

          public void init(IVecI[] cpts,
                           int degree,
                           boolean close)

    - #### init

          public void init(IVecI[] cpts,
                           int degree,
                           double[] knots)

    - #### isValid

          public boolean isValid()

      Specified by:
        `isValid` in interface `ICurveI`

    - #### isValidCP

          public static boolean isValidCP(IVecI[] cpts,
                                          int deg,
                                          double[] knots)

    - #### isValidCP

          public static boolean isValidCP(IVecI[] cpts)

    - #### checkDuplicatedCP

          public static void checkDuplicatedCP(IVecI[] cpts)

    - #### checkDuplicatedCP

          public static void checkDuplicatedCP(IVecI[] origCPs,
                                               IVecI newCP)

    - #### checkDuplicatedCP

          public static void checkDuplicatedCP(IVecI[] origCPs,
                                               IVecI[] newCPs)

    - #### checkDuplicatedCPOnEdge

          public static void checkDuplicatedCPOnEdge(IVecI[] cpts)

    - #### getPointsFromArray

          public static IVec[] getPointsFromArray(double[][] xyzvalues)

    - #### get

          public ICurveGeo get()

      Specified by:
        `get` in interface `ICurveI`
      Specified by:
        `get` in interface `ICurveOp`
      Specified by:
        `get` in interface `IParameter`
      Returns:
        fixed value but in wrapper class

    - #### dup

          public ICurveGeo dup()

      Description copied from interface: `ITransformable`
      duplicate the instance
      Specified by:
        `dup` in interface `ICurveI`
      Specified by:
        `dup` in interface `ITransformable`
      Returns:
        duplicated instance

    - #### pt

          public IVec pt(IDoubleI u)

      Specified by:
        `pt` in interface `ICurveI`

    - #### pt

          public IVec pt(double u)

      Specified by:
        `pt` in interface `ICurveI`

    - #### pt

          public void pt(double u,
                         IVec retval)

    - #### tan

          public IVec tan(IDoubleI u)

      Specified by:
        `tan` in interface `ICurveI`

    - #### tan

          public IVec tan(double u)

      Specified by:
        `tan` in interface `ICurveI`

    - #### tan

          public void tan(double u,
                          IVec retval)

    - #### cp

          public IVecI cp(int i)

      getting i-th control point
      Specified by:
        `cp` in interface `ICurveI`

    - #### cp

          public IVecI cp(IIntegerI i)

      getting i-th control point
      Specified by:
        `cp` in interface `ICurveI`

    - #### cps

          public IVecI[] cps()

      Description copied from interface: `ICurveI`
      all control points
      Specified by:
        `cps` in interface `ICurveI`

    - #### addCP

          public ICurveGeo addCP(IVecI pt,
                                 int newDegree)

      add control point at the end and rebuild the curve and change degree if possible. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(IVecI pt)

      add control point at the end and rebuild the curve. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(int index,
                                 IVecI pt,
                                 int newDegree)

      add control point at i and rebuild the curve and change degree. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(int index,
                                 IVecI pt)

      add control point at i and rebuild the curve. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(IVecI[] pts,
                                 int newDegree)

      add control point at i and rebuild the curve and change degree. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(IVecI[] pts)

      add control points at the end and rebuild the curve. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(int index,
                                 IVecI[] pts,
                                 int newDegree)

      add control point at i and rebuild the curve and change degree. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### addCP

          public ICurveGeo addCP(int index,
                                 IVecI[] pts)

      add control points at i and rebuild the curve. note that a knots is rebuilt with default equal intervals and destroy original knot intervals if variable, like circle.

    - #### insertCP

          public ICurveGeo insertCP(int i,
                                    IVecI pt)

      alias of addCP(int,IVecI)

    - #### insertCP

          public ICurveGeo insertCP(int i,
                                    IVecI[] pts)

      alias of addCP(int,IVecI[])

    - #### removeCP

          public ICurveGeo removeCP()

      removing control point at the end and rebuild the curve. note that a knots is rebuilt with default equal interval and destroy original knot intervals if variable, like circle.

    - #### removeCP

          public ICurveGeo removeCP(int index)

      removing control point at i and rebuild the curve note that a knots is rebuilt with default equal interval and destroy original knot intervals if variable, like circle.

    - #### removeCP

          public ICurveGeo removeCP(int indexFrom,
                                    int indexTo)

      removing control point from indexFrom to indexTo-1 and rebuild the curve. note taht point at indexTo is not removed. note that a knots is rebuilt with default equal interval and destroy original knot intervals if variable, like circle.

    - #### ep

          public IVec ep(int i)

      close curve with the current control points. it changes total number of control points and knot vector dependng on the degree. new knot vector has equal default intervals destroying original variable intervals.
      Specified by:
        `ep` in interface `ICurveI`

    - #### ep

          public IVec ep(IIntegerI i)

      Specified by:
        `ep` in interface `ICurveI`

    - #### start

          public IVec start()

      Specified by:
        `start` in interface `ICurveI`

    - #### end

          public IVec end()

      Specified by:
        `end` in interface `ICurveI`

    - #### startCP

          public IVec startCP()

      Specified by:
        `startCP` in interface `ICurveI`

    - #### endCP

          public IVec endCP()

      Specified by:
        `endCP` in interface `ICurveI`

    - #### mid

          public IVec mid()

      parametrically mid point of a curve
      Specified by:
        `mid` in interface `ICurveI`

    - #### center

          public IVec center()

      Returns center of geometry object. This is approximation calculated only by control points
      Specified by:
        `center` in interface `ICurveI`

    - #### u

          public double u(IVecI pt)

      approximate invert projection from 3D location to interanl parameter U (closest point on curve)
      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public double u(ISwitchE r,
                          IVecI pt)

      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public IDouble u(ISwitchR r,
                           IVecI pt)

      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public double u(IVec2I pt)

      approximate invert projection from 2D location to interanl parameter U
      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public double u(ISwitchE r,
                          IVec2I pt)

      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public IDouble u(ISwitchR r,
                           IVec2I pt)

      Specified by:
        `u` in interface `ICurveI`

    - #### closePt

          public IVec closePt(IVecI pt)

      find approximately closest point on a curve
      Specified by:
        `closePt` in interface `ICurveI`

    - #### closePt

          public IVec closePt(IVec2I pt)

      find approximately closest point on a curve on 2D
      Specified by:
        `closePt` in interface `ICurveI`

    - #### dist

          public double dist(IVecI pt)

      distance to the closest point on a curve
      Specified by:
        `dist` in interface `ICurveI`

    - #### dist

          public double dist(IVec2I pt)

      distance to the closest point on a curve on 2D
      Specified by:
        `dist` in interface `ICurveI`

    - #### knot

          public double knot(int i)

      Description copied from interface: `ICurveI`
      close curve with the current control points. it changes total number of control points and knot vector dependng on the degree. new knot vector has equal default intervals destroying original variable intervals.
      Specified by:
        `knot` in interface `ICurveI`

    - #### knot

          public IDouble knot(IIntegerI i)

      Specified by:
        `knot` in interface `ICurveI`

    - #### knots

          public double[] knots()

      Description copied from interface: `ICurveI`
      all knot values
      Specified by:
        `knots` in interface `ICurveI`

    - #### knots

          public double[] knots(ISwitchE e)

      Specified by:
        `knots` in interface `ICurveI`

    - #### knots

          public IDouble[] knots(ISwitchR r)

      Specified by:
        `knots` in interface `ICurveI`

    - #### knotNum

          public int knotNum()

      Specified by:
        `knotNum` in interface `ICurveI`

    - #### knotNum

          public int knotNum(ISwitchE e)

      Specified by:
        `knotNum` in interface `ICurveI`

    - #### knotNum

          public IInteger knotNum(ISwitchR r)

      Specified by:
        `knotNum` in interface `ICurveI`

    - #### deg

          public int deg()

      Specified by:
        `deg` in interface `ICurveI`

    - #### deg

          public int deg(ISwitchE e)

      Specified by:
        `deg` in interface `ICurveI`

    - #### deg

          public IInteger deg(ISwitchR r)

      Specified by:
        `deg` in interface `ICurveI`

    - #### num

          public int num()

      Description copied from interface: `ICurveI`
      change degree. this operation is costly because it needs to rebuild the whole knots and basisFunction
      Specified by:
        `num` in interface `ICurveI`

    - #### num

          public int num(ISwitchE e)

      Specified by:
        `num` in interface `ICurveI`

    - #### num

          public IInteger num(ISwitchR r)

      Specified by:
        `num` in interface `ICurveI`

    - #### cpNum

          public int cpNum()

      Specified by:
        `cpNum` in interface `ICurveI`

    - #### cpNum

          public int cpNum(ISwitchE e)

      Specified by:
        `cpNum` in interface `ICurveI`

    - #### cpNum

          public IInteger cpNum(ISwitchR r)

      Specified by:
        `cpNum` in interface `ICurveI`

    - #### epNum

          public int epNum()

      Specified by:
        `epNum` in interface `ICurveI`

    - #### epNum

          public int epNum(ISwitchE e)

      Specified by:
        `epNum` in interface `ICurveI`

    - #### epNum

          public IInteger epNum(ISwitchR r)

      Specified by:
        `epNum` in interface `ICurveI`

    - #### isRational

          public boolean isRational()

      Specified by:
        `isRational` in interface `ICurveI`
      Returns:
        returns true if any of control point has non-default(1.0) weight otherwise false.

    - #### isRational

          public boolean isRational(ISwitchE e)

      Specified by:
        `isRational` in interface `ICurveI`

    - #### isRational

          public IBool isRational(ISwitchR r)

      Specified by:
        `isRational` in interface `ICurveI`

    - #### len

          public double len(double resolutionPerEP)

    - #### len

          public double len()

      Specified by:
        `len` in interface `ICurveI`

    - #### len

          public double len(ISwitchE e)

      Specified by:
        `len` in interface `ICurveI`

    - #### len

          public IDouble len(ISwitchR r)

      Specified by:
        `len` in interface `ICurveI`

    - #### u

          public double u(int epIdx,
                          double epFraction)

      Specified by:
        `u` in interface `ICurveI`

    - #### u

          public IDouble u(IInteger epIdx,
                           IDouble epFraction)

      Specified by:
        `u` in interface `ICurveI`

    - #### ustart

          public double ustart()

      Specified by:
        `ustart` in interface `ICurveI`

    - #### uend

          public double uend()

      Specified by:
        `uend` in interface `ICurveI`

    - #### ustart

          public double ustart(ISwitchE e)

      Specified by:
        `ustart` in interface `ICurveI`

    - #### uend

          public double uend(ISwitchE e)

      Specified by:
        `uend` in interface `ICurveI`

    - #### ustart

          public IDouble ustart(ISwitchR r)

      Specified by:
        `ustart` in interface `ICurveI`

    - #### uend

          public IDouble uend(ISwitchR r)

      Specified by:
        `uend` in interface `ICurveI`

    - #### isClosed

          public boolean isClosed()

      Specified by:
        `isClosed` in interface `ICurveI`

    - #### isClosed

          public boolean isClosed(ISwitchE e)

      Specified by:
        `isClosed` in interface `ICurveI`

    - #### isClosed

          public IBool isClosed(ISwitchR r)

      Specified by:
        `isClosed` in interface `ICurveI`

    - #### rev

          public ICurveGeo rev()

      Description copied from interface: `ICurveI`
      reverse U coordintates direction of curve, without creating a new object
      Specified by:
        `rev` in interface `ICurveI`

    - #### revU

          public ICurveGeo revU()

      alias of rev()
      Specified by:
        `revU` in interface `ICurveI`

    - #### flipU

          public ICurveGeo flipU()

      alias of rev()
      Specified by:
        `flipU` in interface `ICurveI`

    - #### overlapCPNum

          public int overlapCPNum()

      number of overlapping control points at the end and the beginning when the curve is closed. this should be used after checking curve is closed. if it's open it checks all the control points.

    - #### isInside2d

          public boolean isInside2d(IVecI pt,
                                    IVecI projectionDir)

      check if the input point is inside a closed curve. if not closed, it supposes closed by connecting the start and end point

    - #### isInside2d

          public boolean isInside2d(IVecI pt)

      check if the input point is inside a closed curve. if not closed, it supposes closed by connecting the start and end point

    - #### updateCache

          public ICurveGeo updateCache()

    - #### intersectPlane

          public IVec[] intersectPlane(IVecI planeDir,
                                       IVecI planePt,
                                       int segmentResolution)

      intersection of curve and plane.
      Parameters:
        `segmentResolution` - segmentation resolution per EP count in degree >= 1 curve.

    - #### intersectPlane

          public IVec[] intersectPlane(IVecI planeDir,
                                       IVecI planePt)

      intersection of curve and plane.

    - #### add

          public ICurveGeo add(double x,
                               double y,
                               double z)

      transformation methods
      Specified by:
        `add` in interface `ICurveI`
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public ICurveGeo add(IDoubleI x,
                               IDoubleI y,
                               IDoubleI z)

      Specified by:
        `add` in interface `ICurveI`
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public ICurveGeo add(IVecI v)

      Specified by:
        `add` in interface `ICurveI`
      Specified by:
        `add` in interface `ITransformable`

    - #### sub

          public ICurveGeo sub(double x,
                               double y,
                               double z)

      Specified by:
        `sub` in interface `ICurveI`
      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

          public ICurveGeo sub(IDoubleI x,
                               IDoubleI y,
                               IDoubleI z)

      Specified by:
        `sub` in interface `ICurveI`
      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

          public ICurveGeo sub(IVecI v)

      Specified by:
        `sub` in interface `ICurveI`
      Specified by:
        `sub` in interface `ITransformable`

    - #### mul

          public ICurveGeo mul(IDoubleI v)

      Specified by:
        `mul` in interface `ICurveI`
      Specified by:
        `mul` in interface `ITransformable`

    - #### mul

          public ICurveGeo mul(double v)

      Specified by:
        `mul` in interface `ICurveI`
      Specified by:
        `mul` in interface `ITransformable`

    - #### div

          public ICurveGeo div(IDoubleI v)

      Specified by:
        `div` in interface `ICurveI`
      Specified by:
        `div` in interface `ITransformable`

    - #### div

          public ICurveGeo div(double v)

      Specified by:
        `div` in interface `ICurveI`
      Specified by:
        `div` in interface `ITransformable`

    - #### neg

          public ICurveGeo neg()

      Specified by:
        `neg` in interface `ICurveI`
      Specified by:
        `neg` in interface `ITransformable`

    - #### flip

          public ICurveGeo flip()

      alias of neg
      Specified by:
        `flip` in interface `ICurveI`
      Specified by:
        `flip` in interface `ITransformable`

    - #### add

          public ICurveGeo add(IVecI v,
                               double f)

      scale add
      Specified by:
        `add` in interface `ICurveI`
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public ICurveGeo add(IVecI v,
                               IDoubleI f)

      Description copied from interface: `ITransformable`
      scale add
      Specified by:
        `add` in interface `ICurveI`
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public ICurveGeo add(double f,
                               IVecI v)

      scale add alias
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public ICurveGeo add(IDoubleI f,
                               IVecI v)

      Description copied from interface: `ITransformable`
      scale add alias
      Specified by:
        `add` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IDoubleI angle)

      Description copied from interface: `ITransformable`
      rotation around z-axis and origin
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(double angle)

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI axis,
                               IDoubleI angle)

      Description copied from interface: `ITransformable`
      rotation around axis vector
      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI axis,
                               double angle)

      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI center,
                               IVecI axis,
                               IDoubleI angle)

      Description copied from interface: `ITransformable`
      rotation around axis vector and center
      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI center,
                               IVecI axis,
                               double angle)

      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI axis,
                               IVecI destDir)

      rotate to destination direction vector
      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public ICurveGeo rot(IVecI center,
                               IVecI axis,
                               IVecI destPt)

      rotate to destination point location
      Specified by:
        `rot` in interface `ICurveI`
      Specified by:
        `rot` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(IDoubleI angle)

      Description copied from interface: `ITransformable`
      rotation on xy-plane around origin; same with rot(IDoubleI)
      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(double angle)

      Description copied from interface: `ITransformable`
      rotation on xy-plane around origin; same with rot(double)
      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(IVecI center,
                                IDoubleI angle)

      Description copied from interface: `ITransformable`
      rotation on xy-plane around center
      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(IVecI center,
                                double angle)

      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(IVecI destDir)

      rotation on xy-plane to destination direction vector
      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public ICurveGeo rot2(IVecI center,
                                IVecI destPt)

      rotation on xy-plane to destination point location
      Specified by:
        `rot2` in interface `ITransformable`

    - #### scale

          public ICurveGeo scale(IDoubleI f)

      alias of mul
      Specified by:
        `scale` in interface `ICurveI`
      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          public ICurveGeo scale(double f)

      Specified by:
        `scale` in interface `ICurveI`
      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          public ICurveGeo scale(IVecI center,
                                 IDoubleI f)

      Specified by:
        `scale` in interface `ICurveI`
      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          public ICurveGeo scale(IVecI center,
                                 double f)

      Specified by:
        `scale` in interface `ICurveI`
      Specified by:
        `scale` in interface `ITransformable`

    - #### scale1d

          public ICurveGeo scale1d(IVecI axis,
                                   double f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `ICurveI`
      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

          public ICurveGeo scale1d(IVecI axis,
                                   IDoubleI f)

      Specified by:
        `scale1d` in interface `ICurveI`
      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

          public ICurveGeo scale1d(IVecI center,
                                   IVecI axis,
                                   double f)

      Specified by:
        `scale1d` in interface `ICurveI`
      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

          public ICurveGeo scale1d(IVecI center,
                                   IVecI axis,
                                   IDoubleI f)

      Specified by:
        `scale1d` in interface `ICurveI`
      Specified by:
        `scale1d` in interface `ITransformable`

    - #### ref

          public ICurveGeo ref(IVecI planeDir)

      reflect(mirror) 3 dimensionally to the other side of the plane
      Specified by:
        `ref` in interface `ICurveI`
      Specified by:
        `ref` in interface `ITransformable`

    - #### ref

          public ICurveGeo ref(IVecI center,
                               IVecI planeDir)

      Specified by:
        `ref` in interface `ICurveI`
      Specified by:
        `ref` in interface `ITransformable`

    - #### mirror

          public ICurveGeo mirror(IVecI planeDir)

      mirror is alias of ref
      Specified by:
        `mirror` in interface `ICurveI`
      Specified by:
        `mirror` in interface `ITransformable`

    - #### mirror

          public ICurveGeo mirror(IVecI center,
                                  IVecI planeDir)

      Specified by:
        `mirror` in interface `ICurveI`
      Specified by:
        `mirror` in interface `ITransformable`

    - #### shear

          public ICurveGeo shear(double sxy,
                                 double syx,
                                 double syz,
                                 double szy,
                                 double szx,
                                 double sxz)

      shear operation
      Specified by:
        `shear` in interface `ICurveI`
      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

          public ICurveGeo shear(IDoubleI sxy,
                                 IDoubleI syx,
                                 IDoubleI syz,
                                 IDoubleI szy,
                                 IDoubleI szx,
                                 IDoubleI sxz)

      Specified by:
        `shear` in interface `ICurveI`
      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

          public ICurveGeo shear(IVecI center,
                                 double sxy,
                                 double syx,
                                 double syz,
                                 double szy,
                                 double szx,
                                 double sxz)

      Specified by:
        `shear` in interface `ICurveI`
      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

          public ICurveGeo shear(IVecI center,
                                 IDoubleI sxy,
                                 IDoubleI syx,
                                 IDoubleI syz,
                                 IDoubleI szy,
                                 IDoubleI szx,
                                 IDoubleI sxz)

      Specified by:
        `shear` in interface `ICurveI`
      Specified by:
        `shear` in interface `ITransformable`

    - #### shearXY

          public ICurveGeo shearXY(double sxy,
                                   double syx)

      Specified by:
        `shearXY` in interface `ICurveI`
      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          public ICurveGeo shearXY(IDoubleI sxy,
                                   IDoubleI syx)

      Specified by:
        `shearXY` in interface `ICurveI`
      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          public ICurveGeo shearXY(IVecI center,
                                   double sxy,
                                   double syx)

      Specified by:
        `shearXY` in interface `ICurveI`
      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          public ICurveGeo shearXY(IVecI center,
                                   IDoubleI sxy,
                                   IDoubleI syx)

      Specified by:
        `shearXY` in interface `ICurveI`
      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearYZ

          public ICurveGeo shearYZ(double syz,
                                   double szy)

      Specified by:
        `shearYZ` in interface `ICurveI`
      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          public ICurveGeo shearYZ(IDoubleI syz,
                                   IDoubleI szy)

      Specified by:
        `shearYZ` in interface `ICurveI`
      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          public ICurveGeo shearYZ(IVecI center,
                                   double syz,
                                   double szy)

      Specified by:
        `shearYZ` in interface `ICurveI`
      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          public ICurveGeo shearYZ(IVecI center,
                                   IDoubleI syz,
                                   IDoubleI szy)

      Specified by:
        `shearYZ` in interface `ICurveI`
      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearZX

          public ICurveGeo shearZX(double szx,
                                   double sxz)

      Specified by:
        `shearZX` in interface `ICurveI`
      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          public ICurveGeo shearZX(IDoubleI szx,
                                   IDoubleI sxz)

      Specified by:
        `shearZX` in interface `ICurveI`
      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          public ICurveGeo shearZX(IVecI center,
                                   double szx,
                                   double sxz)

      Specified by:
        `shearZX` in interface `ICurveI`
      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          public ICurveGeo shearZX(IVecI center,
                                   IDoubleI szx,
                                   IDoubleI sxz)

      Specified by:
        `shearZX` in interface `ICurveI`
      Specified by:
        `shearZX` in interface `ITransformable`

    - #### translate

          public ICurveGeo translate(double x,
                                     double y,
                                     double z)

      translate is alias of add()
      Specified by:
        `translate` in interface `ICurveI`
      Specified by:
        `translate` in interface `ITransformable`

    - #### translate

          public ICurveGeo translate(IDoubleI x,
                                     IDoubleI y,
                                     IDoubleI z)

      Specified by:
        `translate` in interface `ICurveI`
      Specified by:
        `translate` in interface `ITransformable`

    - #### translate

          public ICurveGeo translate(IVecI v)

      Specified by:
        `translate` in interface `ICurveI`
      Specified by:
        `translate` in interface `ITransformable`

    - #### transform

          public ICurveGeo transform(IMatrix3I mat)

      Specified by:
        `transform` in interface `ICurveI`
      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          public ICurveGeo transform(IMatrix4I mat)

      Specified by:
        `transform` in interface `ICurveI`
      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          public ICurveGeo transform(IVecI xvec,
                                     IVecI yvec,
                                     IVecI zvec)

      Specified by:
        `transform` in interface `ICurveI`
      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          public ICurveGeo transform(IVecI xvec,
                                     IVecI yvec,
                                     IVecI zvec,
                                     IVecI translate)

      Specified by:
        `transform` in interface `ICurveI`
      Specified by:
        `transform` in interface `ITransformable`

    - #### mv

          public ICurveGeo mv(double x,
                              double y,
                              double z)

      mv() is alias of add()
      Specified by:
        `mv` in interface `ICurveI`
      Specified by:
        `mv` in interface `ITransformable`

    - #### mv

          public ICurveGeo mv(IDoubleI x,
                              IDoubleI y,
                              IDoubleI z)

      Specified by:
        `mv` in interface `ICurveI`
      Specified by:
        `mv` in interface `ITransformable`

    - #### mv

          public ICurveGeo mv(IVecI v)

      Specified by:
        `mv` in interface `ICurveI`
      Specified by:
        `mv` in interface `ITransformable`

    - #### cp

          public ICurveGeo cp()

      cp() is alias of dup()
      Specified by:
        `cp` in interface `ICurveI`
      Specified by:
        `cp` in interface `ITransformable`

    - #### cp

          public ICurveGeo cp(double x,
                              double y,
                              double z)

      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ICurveI`
      Specified by:
        `cp` in interface `ITransformable`

    - #### cp

          public ICurveGeo cp(IDoubleI x,
                              IDoubleI y,
                              IDoubleI z)

      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ICurveI`
      Specified by:
        `cp` in interface `ITransformable`

    - #### cp

          public ICurveGeo cp(IVecI v)

      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ICurveI`
      Specified by:
        `cp` in interface `ITransformable`