igeo

## Interface ICurveI

- All Superinterfaces:
    ICurveOp, IParameter, ITransformable, IVal
  All Known Subinterfaces:
    ITrimCurveI
  All Known Implementing Classes:
    IArc, IArcGeo, ICircle, ICircleGeo, ICurve, ICurveGeo, ICurveR, IPolycurveGeo, ISpringLine, IStickLine, IStraightenerCurve, IStringLine, ITensionLine, ITensionLineOnCurve, ITrimCurve

      public interface ICurveI
      extends ICurveOp, ITransformable

  Abstract interface of NURBS curve.
  Author:
    Satoru Sugihara

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ICurveI` | `add(double x, double y, double z)` transformation: API of ITransformable inteface
    `ICurveI` | `add(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveI` | `add(IVecI v)`
    `ICurveI` | `add(IVecI v, double f)` scale add
    `ICurveI` | `add(IVecI v, IDoubleI f)` scale add
    `IVecI` | `center()` returns center of geometry object
    `IVecI` | `closePt(IVec2I pt)` find approximately closest point on a curve on 2D
    `IVecI` | `closePt(IVecI pt)` find approximately closest point on a curve
    `ICurveI` | `cp()` cp() is alias of dup()
    `ICurveI` | `cp(double x, double y, double z)` cp() is alias of dup().add()
    `ICurveI` | `cp(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVecI` | `cp(IIntegerI i)`
    `IVecI` | `cp(int i)`
    `ICurveI` | `cp(IVecI v)`
    `int` | `cpNum()`
    `int` | `cpNum(ISwitchE e)`
    `IIntegerI` | `cpNum(ISwitchR r)`
    `IVecI[]` | `cps()` all control points
    `int` | `deg()`
    `int` | `deg(ISwitchE e)`
    `IIntegerI` | `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
    `ICurveI` | `div(double v)`
    `ICurveI` | `div(IDoubleI v)`
    `ICurveI` | `dup()` duplicate the instance
    `IVecI` | `end()`
    `IVecI` | `endCP()`
    `IVecI` | `ep(IIntegerI i)`
    `IVecI` | `ep(int i)`
    `int` | `epNum()`
    `int` | `epNum(ISwitchE e)`
    `IIntegerI` | `epNum(ISwitchR r)`
    `ICurveI` | `flip()` same with neg
    `ICurveI` | `flipU()` alias of rev()
    `ICurveGeo` | `get()`
    `boolean` | `isClosed()`
    `boolean` | `isClosed(ISwitchE e)`
    `IBoolI` | `isClosed(ISwitchR r)`
    `boolean` | `isRational()`
    `boolean` | `isRational(ISwitchE e)`
    `IBoolI` | `isRational(ISwitchR r)`
    `boolean` | `isValid()`
    `IDoubleI` | `knot(IIntegerI i)`
    `double` | `knot(int i)` close curve with the current control points.
    `int` | `knotNum()`
    `int` | `knotNum(ISwitchE e)`
    `IIntegerI` | `knotNum(ISwitchR r)`
    `double[]` | `knots()` all knot values
    `double[]` | `knots(ISwitchE e)`
    `IDoubleI[]` | `knots(ISwitchR r)`
    `double` | `len()`
    `double` | `len(ISwitchE e)`
    `IDouble` | `len(ISwitchR r)`
    `IVecI` | `mid()` parametrically mid point of a curve
    `ICurveI` | `mirror(IVecI planeDir)` mirror is alias of ref
    `ICurveI` | `mirror(IVecI center, IVecI planeDir)`
    `ICurveI` | `mul(double v)`
    `ICurveI` | `mul(IDoubleI v)`
    `ICurveI` | `mv(double x, double y, double z)` mv() is alias of add()
    `ICurveI` | `mv(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveI` | `mv(IVecI v)`
    `ICurveI` | `neg()`
    `int` | `num()` change degree.
    `int` | `num(ISwitchE e)`
    `IIntegerI` | `num(ISwitchR r)`
    `IVecI` | `pt(double u)`
    `IVecI` | `pt(IDoubleI u)`
    `ICurveI` | `ref(IVecI planeDir)` reflect(mirror) 3 dimensionally to the other side of the plane
    `ICurveI` | `ref(IVecI center, IVecI planeDir)`
    `ICurveI` | `rev()` reverse U coordintates direction of curve, without creating a new object
    `ICurveI` | `revU()` alias of rev()
    `ICurveI` | `rot(IVecI axis, double angle)`
    `ICurveI` | `rot(IVecI axis, IDoubleI angle)` rotation around axis vector
    `ICurveI` | `rot(IVecI axis, IVecI destDir)` rotate to destination direction vector
    `ICurveI` | `rot(IVecI center, IVecI axis, double angle)`
    `ICurveI` | `rot(IVecI center, IVecI axis, IDoubleI angle)` rotation around axis vector and center
    `ICurveI` | `rot(IVecI center, IVecI axis, IVecI destPt)` rotate to destination point location
    `ICurveI` | `scale(double f)`
    `ICurveI` | `scale(IDoubleI f)` alias of mul
    `ICurveI` | `scale(IVecI center, double f)`
    `ICurveI` | `scale(IVecI center, IDoubleI f)`
    `ICurveI` | `scale1d(IVecI axis, double f)` scale only in 1 direction
    `ICurveI` | `scale1d(IVecI axis, IDoubleI f)`
    `ICurveI` | `scale1d(IVecI center, IVecI axis, double f)`
    `ICurveI` | `scale1d(IVecI center, IVecI axis, IDoubleI f)`
    `ICurveI` | `shear(double sxy, double syx, double syz, double szy, double szx, double sxz)` shear operation
    `ICurveI` | `shear(IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `ICurveI` | `shear(IVecI center, double sxy, double syx, double syz, double szy, double szx, double sxz)`
    `ICurveI` | `shear(IVecI center, IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `ICurveI` | `shearXY(double sxy, double syx)`
    `ICurveI` | `shearXY(IDoubleI sxy, IDoubleI syx)`
    `ICurveI` | `shearXY(IVecI center, double sxy, double syx)`
    `ICurveI` | `shearXY(IVecI center, IDoubleI sxy, IDoubleI syx)`
    `ICurveI` | `shearYZ(double syz, double szy)`
    `ICurveI` | `shearYZ(IDoubleI syz, IDoubleI szy)`
    `ICurveI` | `shearYZ(IVecI center, double syz, double szy)`
    `ICurveI` | `shearYZ(IVecI center, IDoubleI syz, IDoubleI szy)`
    `ICurveI` | `shearZX(double szx, double sxz)`
    `ICurveI` | `shearZX(IDoubleI szx, IDoubleI sxz)`
    `ICurveI` | `shearZX(IVecI center, double szx, double sxz)`
    `ICurveI` | `shearZX(IVecI center, IDoubleI szx, IDoubleI sxz)`
    `IVecI` | `start()`
    `IVecI` | `startCP()`
    `ICurveI` | `sub(double x, double y, double z)`
    `ICurveI` | `sub(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveI` | `sub(IVecI v)`
    `IVecI` | `tan(double u)`
    `IVecI` | `tan(IDoubleI u)`
    `ICurveI` | `transform(IMatrix3I mat)`
    `ICurveI` | `transform(IMatrix4I mat)`
    `ICurveI` | `transform(IVecI xvec, IVecI yvec, IVecI zvec)`
    `ICurveI` | `transform(IVecI xvec, IVecI yvec, IVecI zvec, IVecI translate)`
    `ICurveI` | `translate(double x, double y, double z)` translate is alias of add()
    `ICurveI` | `translate(IDoubleI x, IDoubleI y, IDoubleI z)`
    `ICurveI` | `translate(IVecI v)`
    `IDoubleI` | `u(IInteger epIdx, IDouble epFraction)`
    `double` | `u(int epIdx, double epFraction)`
    `double` | `u(ISwitchE r, IVec2I pt)`
    `double` | `u(ISwitchE r, IVecI pt)`
    `IDoubleI` | `u(ISwitchR r, IVec2I pt)`
    `IDoubleI` | `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)`
    `IDoubleI` | `uend(ISwitchR r)`
    `double` | `ustart()`
    `double` | `ustart(ISwitchE e)`
    `IDoubleI` | `ustart(ISwitchR r)`

    - ### Methods inherited from interface igeo.ITransformable

      `add, add, rot, rot, rot2, rot2, rot2, rot2, rot2, rot2`

- - ### Method Detail

    - #### get

          ICurveGeo get()

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

    - #### dup

          ICurveI dup()

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

    - #### isValid

          boolean isValid()

    - #### pt

          IVecI pt(double u)

    - #### pt

          IVecI pt(IDoubleI u)

    - #### tan

          IVecI tan(double u)

    - #### tan

          IVecI tan(IDoubleI u)

    - #### cp

          IVecI cp(int i)

    - #### cp

          IVecI cp(IIntegerI i)

    - #### ep

          IVecI ep(int i)

    - #### ep

          IVecI ep(IIntegerI i)

    - #### cps

          IVecI[] cps()

      all control points

    - #### u

          double u(IVecI pt)

      approximate invert projection from 3D location to interanl parameter U (closest point on curve)

    - #### u

          double u(ISwitchE r,
                 IVecI pt)

    - #### u

          IDoubleI u(ISwitchR r,
                   IVecI pt)

    - #### u

          double u(IVec2I pt)

      approximate invert projection from 2D location to interanl parameter U

    - #### u

          double u(ISwitchE r,
                 IVec2I pt)

    - #### u

          IDoubleI u(ISwitchR r,
                   IVec2I pt)

    - #### closePt

          IVecI closePt(IVecI pt)

      find approximately closest point on a curve

    - #### closePt

          IVecI closePt(IVec2I pt)

      find approximately closest point on a curve on 2D

    - #### dist

          double dist(IVecI pt)

      distance to the closest point on a curve

    - #### dist

          double dist(IVec2I pt)

      distance to the closest point on a curve on 2D

    - #### knot

          double knot(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.

    - #### knot

          IDoubleI knot(IIntegerI i)

    - #### knots

          double[] knots()

      all knot values

    - #### knots

          double[] knots(ISwitchE e)

    - #### knots

          IDoubleI[] knots(ISwitchR r)

    - #### knotNum

          int knotNum()

    - #### knotNum

          int knotNum(ISwitchE e)

    - #### knotNum

          IIntegerI knotNum(ISwitchR r)

    - #### isRational

          boolean isRational()

      Returns:
        returns true if any of control point has non-default(1.0) weight otherwise false.

    - #### isRational

          boolean isRational(ISwitchE e)

    - #### isRational

          IBoolI isRational(ISwitchR r)

    - #### deg

          int deg()

    - #### deg

          int deg(ISwitchE e)

    - #### deg

          IIntegerI deg(ISwitchR r)

    - #### num

          int num()

      change degree. this operation is costly because it needs to rebuild the whole knots and basisFunction

    - #### num

          int num(ISwitchE e)

    - #### num

          IIntegerI num(ISwitchR r)

    - #### cpNum

          int cpNum()

    - #### cpNum

          int cpNum(ISwitchE e)

    - #### cpNum

          IIntegerI cpNum(ISwitchR r)

    - #### start

          IVecI start()

    - #### end

          IVecI end()

    - #### startCP

          IVecI startCP()

    - #### endCP

          IVecI endCP()

    - #### mid

          IVecI mid()

      parametrically mid point of a curve

    - #### center

          IVecI center()

      returns center of geometry object

    - #### epNum

          int epNum()

    - #### epNum

          int epNum(ISwitchE e)

    - #### epNum

          IIntegerI epNum(ISwitchR r)

    - #### len

          double len()

    - #### len

          double len(ISwitchE e)

    - #### len

          IDouble len(ISwitchR r)

    - #### u

          double u(int epIdx,
                 double epFraction)

    - #### u

          IDoubleI u(IInteger epIdx,
                   IDouble epFraction)

    - #### ustart

          double ustart()

    - #### uend

          double uend()

    - #### ustart

          double ustart(ISwitchE e)

    - #### uend

          double uend(ISwitchE e)

    - #### ustart

          IDoubleI ustart(ISwitchR r)

    - #### uend

          IDoubleI uend(ISwitchR r)

    - #### isClosed

          boolean isClosed()

    - #### isClosed

          boolean isClosed(ISwitchE e)

    - #### isClosed

          IBoolI isClosed(ISwitchR r)

    - #### rev

          ICurveI rev()

      reverse U coordintates direction of curve, without creating a new object

    - #### revU

          ICurveI revU()

      alias of rev()

    - #### flipU

          ICurveI flipU()

      alias of rev()

    - #### add

          ICurveI add(double x,
                    double y,
                    double z)

      transformation: API of ITransformable inteface
      Specified by:
        `add` in interface `ITransformable`

    - #### add

          ICurveI add(IDoubleI x,
                    IDoubleI y,
                    IDoubleI z)

      Specified by:
        `add` in interface `ITransformable`

    - #### add

          ICurveI add(IVecI v)

      Specified by:
        `add` in interface `ITransformable`

    - #### sub

          ICurveI sub(double x,
                    double y,
                    double z)

      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

          ICurveI sub(IDoubleI x,
                    IDoubleI y,
                    IDoubleI z)

      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

          ICurveI sub(IVecI v)

      Specified by:
        `sub` in interface `ITransformable`

    - #### mul

          ICurveI mul(IDoubleI v)

      Specified by:
        `mul` in interface `ITransformable`

    - #### mul

          ICurveI mul(double v)

      Specified by:
        `mul` in interface `ITransformable`

    - #### div

          ICurveI div(IDoubleI v)

      Specified by:
        `div` in interface `ITransformable`

    - #### div

          ICurveI div(double v)

      Specified by:
        `div` in interface `ITransformable`

    - #### neg

          ICurveI neg()

      Specified by:
        `neg` in interface `ITransformable`

    - #### flip

          ICurveI flip()

      same with neg
      Specified by:
        `flip` in interface `ITransformable`

    - #### add

          ICurveI add(IVecI v,
                    double f)

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

    - #### add

          ICurveI add(IVecI v,
                    IDoubleI f)

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

    - #### rot

          ICurveI rot(IVecI axis,
                    IDoubleI angle)

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

    - #### rot

          ICurveI rot(IVecI axis,
                    double angle)

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          ICurveI rot(IVecI center,
                    IVecI axis,
                    IDoubleI angle)

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

    - #### rot

          ICurveI rot(IVecI center,
                    IVecI axis,
                    double angle)

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          ICurveI rot(IVecI axis,
                    IVecI destDir)

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

    - #### rot

          ICurveI rot(IVecI center,
                    IVecI axis,
                    IVecI destPt)

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

    - #### scale

          ICurveI scale(IDoubleI f)

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

    - #### scale

          ICurveI scale(double f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          ICurveI scale(IVecI center,
                      IDoubleI f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          ICurveI scale(IVecI center,
                      double f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale1d

          ICurveI scale1d(IVecI axis,
                        double f)

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

    - #### scale1d

          ICurveI scale1d(IVecI axis,
                        IDoubleI f)

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

          ICurveI scale1d(IVecI center,
                        IVecI axis,
                        double f)

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

          ICurveI scale1d(IVecI center,
                        IVecI axis,
                        IDoubleI f)

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### ref

          ICurveI ref(IVecI planeDir)

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

    - #### ref

          ICurveI ref(IVecI center,
                    IVecI planeDir)

      Specified by:
        `ref` in interface `ITransformable`

    - #### mirror

          ICurveI mirror(IVecI planeDir)

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

    - #### mirror

          ICurveI mirror(IVecI center,
                       IVecI planeDir)

      Specified by:
        `mirror` in interface `ITransformable`

    - #### shear

          ICurveI shear(double sxy,
                      double syx,
                      double syz,
                      double szy,
                      double szx,
                      double sxz)

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

    - #### shear

          ICurveI shear(IDoubleI sxy,
                      IDoubleI syx,
                      IDoubleI syz,
                      IDoubleI szy,
                      IDoubleI szx,
                      IDoubleI sxz)

      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

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

      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

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

      Specified by:
        `shear` in interface `ITransformable`

    - #### shearXY

          ICurveI shearXY(double sxy,
                        double syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          ICurveI shearXY(IDoubleI sxy,
                        IDoubleI syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          ICurveI shearXY(IVecI center,
                        double sxy,
                        double syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          ICurveI shearXY(IVecI center,
                        IDoubleI sxy,
                        IDoubleI syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearYZ

          ICurveI shearYZ(double syz,
                        double szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          ICurveI shearYZ(IDoubleI syz,
                        IDoubleI szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          ICurveI shearYZ(IVecI center,
                        double syz,
                        double szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          ICurveI shearYZ(IVecI center,
                        IDoubleI syz,
                        IDoubleI szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearZX

          ICurveI shearZX(double szx,
                        double sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          ICurveI shearZX(IDoubleI szx,
                        IDoubleI sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          ICurveI shearZX(IVecI center,
                        double szx,
                        double sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          ICurveI shearZX(IVecI center,
                        IDoubleI szx,
                        IDoubleI sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### translate

          ICurveI translate(double x,
                          double y,
                          double z)

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

    - #### translate

          ICurveI translate(IDoubleI x,
                          IDoubleI y,
                          IDoubleI z)

      Specified by:
        `translate` in interface `ITransformable`

    - #### translate

          ICurveI translate(IVecI v)

      Specified by:
        `translate` in interface `ITransformable`

    - #### transform

          ICurveI transform(IMatrix3I mat)

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          ICurveI transform(IMatrix4I mat)

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          ICurveI transform(IVecI xvec,
                          IVecI yvec,
                          IVecI zvec)

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          ICurveI transform(IVecI xvec,
                          IVecI yvec,
                          IVecI zvec,
                          IVecI translate)

      Specified by:
        `transform` in interface `ITransformable`

    - #### mv

          ICurveI mv(double x,
                   double y,
                   double z)

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

    - #### mv

          ICurveI mv(IDoubleI x,
                   IDoubleI y,
                   IDoubleI z)

      Specified by:
        `mv` in interface `ITransformable`

    - #### mv

          ICurveI mv(IVecI v)

      Specified by:
        `mv` in interface `ITransformable`

    - #### cp

          ICurveI cp()

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

    - #### cp

          ICurveI cp(double x,
                   double y,
                   double z)

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

    - #### cp

          ICurveI cp(IDoubleI x,
                   IDoubleI y,
                   IDoubleI z)

      Specified by:
        `cp` in interface `ITransformable`

    - #### cp

          ICurveI cp(IVecI v)

      Specified by:
        `cp` in interface `ITransformable`