igeo

## Class IMeshGeo

- java.lang.Object
- - igeo.IParameterObject
  - - igeo.IMeshGeo

- All Implemented Interfaces:
    IMeshI, ISubobject, ITransformable

      public class IMeshGeo
      extends IParameterObject
      implements IMeshI

  Geometry of polygon mesh containing lists of vertices, edges and faces.
  Author:
    Satoru Sugihara

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `boolean` | `closed` just setting boolean value to closed.
    `java.util.ArrayList<IEdge>` | `edges`
    `java.util.ArrayList<IFace>` | `faces`
    `java.util.ArrayList<IVertex>` | `vertices`

    - ### Fields inherited from class igeo.IParameterObject

      `parent`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `IMeshGeo()`
    `IMeshGeo(java.util.ArrayList<IVertex> v, java.util.ArrayList<IEdge> e, java.util.ArrayList<IFace> f)`
    `IMeshGeo(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)`
    `IMeshGeo(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4)`
    `IMeshGeo(ICurveI[] lines)`
    `IMeshGeo(ICurveI[] lines, IMeshType creator)`
    `IMeshGeo(IFace[] fcs)`
    `IMeshGeo(IMeshGeo m)`
    `IMeshGeo(ISurfaceI[] faces)` takes surfaces as face with 3 or 4 points face.
    `IMeshGeo(ISurfaceI[] faces, IMeshType creator)` takes surfaces as face with 3 or 4 points face.
    `IMeshGeo(IVec[] vert)`
    `IMeshGeo(IVec[][] matrix)`
    `IMeshGeo(IVec[][] matrix, boolean triangulateDir)`
    `IMeshGeo(IVec[][] matrix, boolean triangulateDir, IMeshType creator)`
    `IMeshGeo(IVec[][] matrix, int unum, int vnum, boolean triangulateDir)`
    `IMeshGeo(IVec[][] matrix, int unum, int vnum, boolean triangulateDir, IMeshType creator)`
    `IMeshGeo(IVecI v1, IVecI v2, IVecI v3)`
    `IMeshGeo(IVecI v1, IVecI v2, IVecI v3, IVecI v4)`
    `IMeshGeo(IVertex[] vert)`
    `IMeshGeo(IVertex[] vtx, IEdge[] edg, IFace[] fcs)`
    `IMeshGeo(IVertex v1, IVertex v2, IVertex v3)`
    `IMeshGeo(IVertex v1, IVertex v2, IVertex v3, IVertex v4)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `IMeshGeo` | `add(double x, double y, double z)` ITransformable methods
    `IMeshGeo` | `add(double f, IVecI v)` scale add alias
    `IMeshGeo` | `add(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IMeshGeo` | `add(IDoubleI f, IVecI v)` scale add alias
    `IMeshGeo` | `add(IVecI v)`
    `IMeshGeo` | `add(IVecI v, double f)` scale add
    `IMeshGeo` | `add(IVecI v, IDoubleI f)` scale add
    `void` | `addFace(IFace f)`
    `void` | `addFace(IFace f, boolean checkVertexExisting, boolean checkEdgeExisting, boolean checkFaceExisting)`
    `void` | `addPolygon(IVec[] v)`
    `void` | `addPolygon(IVertex[] v)`
    `void` | `addQuads(IVec[] v)`
    `void` | `addQuads(IVertex[] v)`
    `void` | `addQuadStrip(IVec[] v)`
    `void` | `addQuadStrip(IVertex[] v)`
    `void` | `addTriangleFan(IVec[] v)`
    `void` | `addTriangleFan(IVertex[] v)`
    `void` | `addTriangles(IVec[] v)`
    `void` | `addTriangles(IVertex[] v)`
    `void` | `addTriangleStrip(IVec[] v)`
    `void` | `addTriangleStrip(IVertex[] v)`
    `void` | `addVertex(IVertex v)` add a vertex to a mesh and set index number to the vertex
    `IVec` | `center()` center of mesh, calculated by average of all vertices
    `IMeshGeo` | `close()` just setting boolean value to closed.
    `static IMeshGeo` | `connectVertex(IMeshGeo mesh1, IMeshGeo mesh2)` connect closest vertex
    `static IMeshGeo` | `connectVertex(IMeshGeo mesh1, IVertex v1, IMeshGeo mesh2, IVertex v2)`
    `IMeshGeo` | `cp()` cp() is alias of dup()
    `IMeshGeo` | `cp(double x, double y, double z)` cp() is alias of dup().add()
    `IMeshGeo` | `cp(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IMeshGeo` | `cp(IVecI v)`
    `static IMeshGeo` | `createMeshWithEdges(java.util.ArrayList<IEdge> edges, IMeshType creator)`
    `static IMeshGeo` | `createPolyhedron(IVertex[] vtx)` create polyhedron mesh by delaunay triangulation around a center
    `static IMeshGeo` | `createPolyhedron(IVertex[] vtx, double threshold)` create polyhedron mesh by delaunay triangulation around a center with maximum length of triangle edge by threshold
    `IMeshGeo` | `deleteEdge(IEdge e)`
    `IMeshGeo` | `deleteEdge(IIntegerI i)`
    `IMeshGeo` | `deleteEdge(int i)`
    `IMeshGeo` | `deleteFace(IFace f)`
    `IMeshGeo` | `deleteFace(IIntegerI i)`
    `IMeshGeo` | `deleteFace(int i)`
    `void` | `deleteUnlinked()`
    `IMeshGeo` | `deleteVertex(IIntegerI i)`
    `IMeshGeo` | `deleteVertex(int i)`
    `IMeshGeo` | `deleteVertex(IVertex v)`
    `IMeshGeo` | `div(double v)`
    `IMeshGeo` | `div(IDoubleI v)`
    `IEdge[]` | `divideEdge(IEdge e, double[] ratios, IMeshType creator)` divide by multiple ratios.
    `void` | `divideEdge(IEdge e, double ratio, IMeshType creator)`
    `IMeshGeo` | `divideFace(IFace f, IEdge e1, IVertex nv1, IEdge e2, IVertex nv2, IMeshType creator)`
    `IMeshGeo` | `dup()` duplicate the instance
    `IEdge` | `edge(IIntegerI i)`
    `IEdge` | `edge(int i)`
    `int` | `edgeIndex(IEdge e)`
    `int` | `edgeNum()`
    `int` | `edgeNum(ISwitchE e)`
    `IInteger` | `edgeNum(ISwitchR r)`
    `java.util.ArrayList<IEdge>` | `edges()` return all edges
    `IFace` | `face(IIntegerI i)`
    `IFace` | `face(int i)`
    `IEdge[]` | `faceEdges(IEdge e, IEdge[] edges)`
    `int` | `faceNum()`
    `int` | `faceNum(ISwitchE e)`
    `IInteger` | `faceNum(ISwitchR r)`
    `java.util.ArrayList<IFace>` | `faces()` return all faces
    `java.util.ArrayList<java.util.ArrayList<IEdge>>` | `findLoop(java.util.ArrayList<IEdge> edges)`
    `IMeshGeo` | `flip()` alias of neg
    `IMeshGeo` | `flipNml()`
    `IMeshGeo` | `flipNormal()`
    `IMeshGeo` | `get()`
    `IVec[]` | `getBoundingBox()`
    `int` | `getIndex(IEdge e)`
    `int` | `getIndex(IFace f)`
    `int` | `getIndex(IVertex v)`
    `void` | `initWithClosedLines(ICurveI[] lines, IMeshType creator)`
    `void` | `initWithClosedLines(IVecI[][] linePts, IMeshType creator)`
    `void` | `initWithEdges(java.util.ArrayList<IEdge> edges, IMeshType creator)`
    `void` | `initWithLines(ICurveI[] lines, IMeshType creator)`
    `void` | `initWithPointMatrix(IVec[][] matrix, int unum, int vnum, boolean triangulateDir, IMeshType creator)`
    `void` | `initWithSurfaces(ISurfaceI[] faces, IMeshType creator)`
    `IVertex` | `insertVertex(IFace f, IVertex v, IMeshType creator)`
    `boolean` | `isClosed()` just setting boolean value to closed.
    `boolean` | `isValid()`
    `IFace` | `iterateFace(IFace f, boolean[] checkedFaces)`
    `IMeshGeo` | `join(IMeshGeo[] meshes)` join other meshes into the current one and remove duplicated edges and vertices
    `IMeshGeo` | `join(IMeshGeo[] meshes, double tolerance)` join other meshes into the current one and remove duplicated edges and vertices
    `static IMeshGeo` | `joinMesh(IMeshGeo[] meshes)`
    `IMeshGeo` | `loopSubD()` Loop-subdivision
    `IMeshGeo` | `loopSubD(IVec[] fixedEdges)` Loop-subdivision
    `IMeshGeo` | `loopSubdivide()` Loop-subdivision
    `IMeshGeo` | `loopSubdivide(IVec[] fixedEdges)` Loop-subdivision
    `IMeshGeo` | `mirror(IVecI planeDir)` mirror is alias of ref
    `IMeshGeo` | `mirror(IVecI center, IVecI planeDir)`
    `IMeshGeo` | `mul(double v)`
    `IMeshGeo` | `mul(IDoubleI v)`
    `IMeshGeo` | `mv(double x, double y, double z)` mv() is alias of add()
    `IMeshGeo` | `mv(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IMeshGeo` | `mv(IVecI v)`
    `IEdge[]` | `nakedEdges()` returns naked edges excluding duplicated edges on the same place.
    `java.util.ArrayList<IEdge>` | `nakedEdges(boolean checkDuplicatedEdge)`
    `IMeshGeo` | `neg()`
    `IMeshGeo` | `offset(double offsetDist)` offset each vertex towards vertex normal and return the mesh.
    `IMeshGeo` | `offset(double[] offsetList)` offset each vertex towards vertex normal and return the mesh.
    `static IMeshGeo` | `polyhedron(IVertex[] vtx)` alias of createPolyhedron
    `static IMeshGeo` | `polyhedron(IVertex[] vtx, double threshold)` alias of createPolyhedron with maximum threshold for edge length
    `IMeshGeo` | `ref(IVecI planeDir)` reflect(mirror) 3 dimensionally to the other side of the plane
    `IMeshGeo` | `ref(IVecI center, IVecI planeDir)`
    `IMeshGeo` | `removeDuplicatedEdge()` remove duplicated edge
    `IMeshGeo` | `removeDuplicates()` remove duplicated vertices and edges
    `IMeshGeo` | `removeDuplicates(double tolerance)` remove duplicated vertices and edges
    `protected void` | `replaceEdge(IEdge origEdge, IEdge newEdge)` For use in copy constructor
    `void` | `replaceEdge(IFace f, IEdge oldEdge, IEdge newEdge1, IEdge newEdge2, IVertex vertexOnEdge, IMeshType creator)`
    `protected void` | `replaceFace(IFace origFace, IFace newFace)` For use in copy constructor
    `protected void` | `replaceVertex(IVertex origVertex, IVertex newVertex)` For use in copy constructor
    `IMeshGeo` | `rev()` alias of neg
    `IMeshGeo` | `rot(double angle)`
    `IMeshGeo` | `rot(IDoubleI angle)` rotation around z-axis and origin
    `IMeshGeo` | `rot(IVecI axis, double angle)`
    `IMeshGeo` | `rot(IVecI axis, IDoubleI angle)` rotation around axis vector
    `IMeshGeo` | `rot(IVecI axis, IVecI destDir)` rotate to destination direction vector
    `IMeshGeo` | `rot(IVecI center, IVecI axis, double angle)`
    `IMeshGeo` | `rot(IVecI center, IVecI axis, IDoubleI angle)` rotation around axis vector and center
    `IMeshGeo` | `rot(IVecI center, IVecI axis, IVecI destPt)` rotate to destination point location
    `IMeshGeo` | `rot2(double angle)` rotation on xy-plane around origin; same with rot(double)
    `IMeshGeo` | `rot2(IDoubleI angle)` rotation on xy-plane around origin; same with rot(IDoubleI)
    `IMeshGeo` | `rot2(IVecI destDir)` rotation on xy-plane to destination direction vector
    `IMeshGeo` | `rot2(IVecI center, double angle)`
    `IMeshGeo` | `rot2(IVecI center, IDoubleI angle)` rotation on xy-plane around center
    `IMeshGeo` | `rot2(IVecI center, IVecI destPt)` rotation on xy-plane to destination point location
    `IMeshGeo` | `scale(double f)`
    `IMeshGeo` | `scale(IDoubleI f)` alias of mul
    `IMeshGeo` | `scale(IVecI center, double f)`
    `IMeshGeo` | `scale(IVecI center, IDoubleI f)`
    `IMeshGeo` | `scale1d(IVecI axis, double f)` scale only in 1 direction
    `IMeshGeo` | `scale1d(IVecI axis, IDoubleI f)`
    `IMeshGeo` | `scale1d(IVecI center, IVecI axis, double f)`
    `IMeshGeo` | `scale1d(IVecI center, IVecI axis, IDoubleI f)`
    `IMeshGeo` | `shear(double sxy, double syx, double syz, double szy, double szx, double sxz)` shear operation
    `IMeshGeo` | `shear(IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `IMeshGeo` | `shear(IVecI center, double sxy, double syx, double syz, double szy, double szx, double sxz)`
    `IMeshGeo` | `shear(IVecI center, IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)`
    `IMeshGeo` | `shearXY(double sxy, double syx)`
    `IMeshGeo` | `shearXY(IDoubleI sxy, IDoubleI syx)`
    `IMeshGeo` | `shearXY(IVecI center, double sxy, double syx)`
    `IMeshGeo` | `shearXY(IVecI center, IDoubleI sxy, IDoubleI syx)`
    `IMeshGeo` | `shearYZ(double syz, double szy)`
    `IMeshGeo` | `shearYZ(IDoubleI syz, IDoubleI szy)`
    `IMeshGeo` | `shearYZ(IVecI center, double syz, double szy)`
    `IMeshGeo` | `shearYZ(IVecI center, IDoubleI syz, IDoubleI szy)`
    `IMeshGeo` | `shearZX(double szx, double sxz)`
    `IMeshGeo` | `shearZX(IDoubleI szx, IDoubleI sxz)`
    `IMeshGeo` | `shearZX(IVecI center, double szx, double sxz)`
    `IMeshGeo` | `shearZX(IVecI center, IDoubleI szx, IDoubleI sxz)`
    `IMeshGeo` | `sub(double x, double y, double z)`
    `IMeshGeo` | `sub(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IMeshGeo` | `sub(IVecI v)`
    `IMeshGeo` | `subD()` subdivide all triangle faces into 4 triangles each divided at each mid point of edges.
    `IMeshGeo` | `subdivide()` subdivide all triangle faces into 4 triangles each divided at each mid point of edges.
    `void` | `subdivideNakedEdges(java.util.ArrayList<IEdge> loop, int recursionNum, IMeshType creator)`
    `void` | `subdivideNakedEdges(int recursionNum, IMeshType creator)`
    `IMeshGeo` | `transform(IMatrix3I mat)`
    `IMeshGeo` | `transform(IMatrix4I mat)`
    `IMeshGeo` | `transform(IVecI xvec, IVecI yvec, IVecI zvec)`
    `IMeshGeo` | `transform(IVecI xvec, IVecI yvec, IVecI zvec, IVecI translate)`
    `IMeshGeo` | `translate(double x, double y, double z)` translate() is alias of add()
    `IMeshGeo` | `translate(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IMeshGeo` | `translate(IVecI v)`
    `IMeshGeo` | `triangulate()`
    `IMeshGeo` | `triangulate(boolean triangulateDirection)`
    `IMeshGeo` | `triangulate(boolean triangulateDirection, IMeshType creator)`
    `IMeshGeo` | `triangulate(IFace f, boolean triangulateDirection, IMeshType creator)`
    `IMeshGeo` | `triangulateAll(boolean triangulateDirection, IMeshType creator)` alias of triangulate; fow downward compatibility
    `IMeshGeo` | `triangulateAtCenter()`
    `IMeshGeo` | `triangulateAtCenter(IMeshType creator)`
    `IMeshGeo` | `unifyNml()`
    `IMeshGeo` | `unifyNml(int faceIdx)`
    `IMeshGeo` | `unifyNormal()`
    `IVertex` | `vertex(IIntegerI i)`
    `IVertex` | `vertex(int i)`
    `int` | `vertexIndex(IVertex v)`
    `int` | `vertexNum()`
    `int` | `vertexNum(ISwitchE e)`
    `IInteger` | `vertexNum(ISwitchR r)`
    `java.util.ArrayList<IVertex>` | `vertices()` return all vertices

    - ### 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

    - #### vertices

          public java.util.ArrayList<IVertex> vertices

    - #### edges

          public java.util.ArrayList<IEdge> edges

    - #### faces

          public java.util.ArrayList<IFace> faces

    - #### closed

          public boolean closed

      just setting boolean value to closed. checking no connection of mesh. used to set closed flag in saving

  - ### Constructor Detail

    - #### IMeshGeo

          public IMeshGeo(ICurveI[] lines)

    - #### IMeshGeo

          public IMeshGeo(ICurveI[] lines,
                  IMeshType creator)

    - #### IMeshGeo

          public IMeshGeo(ISurfaceI[] faces)

      takes surfaces as face with 3 or 4 points face. trim is ignored

    - #### IMeshGeo

          public IMeshGeo(ISurfaceI[] faces,
                  IMeshType creator)

      takes surfaces as face with 3 or 4 points face. trim is ignored

    - #### IMeshGeo

          public IMeshGeo(IVec[][] matrix)

    - #### IMeshGeo

          public IMeshGeo(IVec[][] matrix,
                  boolean triangulateDir)

    - #### IMeshGeo

          public IMeshGeo(IVec[][] matrix,
                  boolean triangulateDir,
                  IMeshType creator)

    - #### IMeshGeo

          public IMeshGeo(IVec[][] matrix,
                  int unum,
                  int vnum,
                  boolean triangulateDir)

    - #### IMeshGeo

          public IMeshGeo(IVec[][] matrix,
                  int unum,
                  int vnum,
                  boolean triangulateDir,
                  IMeshType creator)

    - #### IMeshGeo

          public IMeshGeo()

    - #### IMeshGeo

          public IMeshGeo(java.util.ArrayList<IVertex> v,
                  java.util.ArrayList<IEdge> e,
                  java.util.ArrayList<IFace> f)

    - #### IMeshGeo

          public IMeshGeo(IVertex[] vtx,
                  IEdge[] edg,
                  IFace[] fcs)

    - #### IMeshGeo

          public IMeshGeo(IVec[] vert)

    - #### IMeshGeo

          public IMeshGeo(IVertex[] vert)

    - #### IMeshGeo

          public IMeshGeo(IVertex v1,
                  IVertex v2,
                  IVertex v3)

    - #### IMeshGeo

          public IMeshGeo(IVertex v1,
                  IVertex v2,
                  IVertex v3,
                  IVertex v4)

    - #### IMeshGeo

          public IMeshGeo(IVecI v1,
                  IVecI v2,
                  IVecI v3)

    - #### IMeshGeo

          public IMeshGeo(IVecI v1,
                  IVecI v2,
                  IVecI v3,
                  IVecI v4)

    - #### IMeshGeo

          public IMeshGeo(double x1,
                  double y1,
                  double z1,
                  double x2,
                  double y2,
                  double z2,
                  double x3,
                  double y3,
                  double z3)

    - #### IMeshGeo

          public IMeshGeo(double x1,
                  double y1,
                  double z1,
                  double x2,
                  double y2,
                  double z2,
                  double x3,
                  double y3,
                  double z3,
                  double x4,
                  double y4,
                  double z4)

    - #### IMeshGeo

          public IMeshGeo(IFace[] fcs)

    - #### IMeshGeo

          public IMeshGeo(IMeshGeo m)

  - ### Method Detail

    - #### initWithLines

          public void initWithLines(ICurveI[] lines,
                           IMeshType creator)

    - #### initWithClosedLines

          public void initWithClosedLines(ICurveI[] lines,
                                 IMeshType creator)

    - #### initWithClosedLines

          public void initWithClosedLines(IVecI[][] linePts,
                                 IMeshType creator)

    - #### initWithSurfaces

          public void initWithSurfaces(ISurfaceI[] faces,
                              IMeshType creator)

    - #### get

          public IMeshGeo get()

      Specified by:
        `get` in interface `IMeshI`

    - #### dup

          public IMeshGeo dup()

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

    - #### isValid

          public boolean isValid()

      Specified by:
        `isValid` in interface `IMeshI`

    - #### addVertex

          public void addVertex(IVertex v)

      add a vertex to a mesh and set index number to the vertex

    - #### replaceVertex

          protected void replaceVertex(IVertex origVertex,
                           IVertex newVertex)

      For use in copy constructor

    - #### replaceEdge

          protected void replaceEdge(IEdge origEdge,
                         IEdge newEdge)

      For use in copy constructor

    - #### replaceFace

          protected void replaceFace(IFace origFace,
                         IFace newFace)

      For use in copy constructor

    - #### createMeshWithEdges

          public static IMeshGeo createMeshWithEdges(java.util.ArrayList<IEdge> edges,
                                     IMeshType creator)

    - #### createPolyhedron

          public static IMeshGeo createPolyhedron(IVertex[] vtx)

      create polyhedron mesh by delaunay triangulation around a center

    - #### createPolyhedron

          public static IMeshGeo createPolyhedron(IVertex[] vtx,
                                  double threshold)

      create polyhedron mesh by delaunay triangulation around a center with maximum length of triangle edge by threshold

    - #### polyhedron

          public static IMeshGeo polyhedron(IVertex[] vtx)

      alias of createPolyhedron

    - #### polyhedron

          public static IMeshGeo polyhedron(IVertex[] vtx,
                            double threshold)

      alias of createPolyhedron with maximum threshold for edge length

    - #### connectVertex

          public static IMeshGeo connectVertex(IMeshGeo mesh1,
                               IMeshGeo mesh2)

      connect closest vertex

    - #### connectVertex

          public static IMeshGeo connectVertex(IMeshGeo mesh1,
                               IVertex v1,
                               IMeshGeo mesh2,
                               IVertex v2)

    - #### initWithEdges

          public void initWithEdges(java.util.ArrayList<IEdge> edges,
                           IMeshType creator)

    - #### initWithPointMatrix

          public void initWithPointMatrix(IVec[][] matrix,
                                 int unum,
                                 int vnum,
                                 boolean triangulateDir,
                                 IMeshType creator)

    - #### vertexNum

          public int vertexNum()

      Specified by:
        `vertexNum` in interface `IMeshI`

    - #### edgeNum

          public int edgeNum()

      Specified by:
        `edgeNum` in interface `IMeshI`

    - #### faceNum

          public int faceNum()

      Specified by:
        `faceNum` in interface `IMeshI`

    - #### vertexNum

          public int vertexNum(ISwitchE e)

      Specified by:
        `vertexNum` in interface `IMeshI`

    - #### edgeNum

          public int edgeNum(ISwitchE e)

      Specified by:
        `edgeNum` in interface `IMeshI`

    - #### faceNum

          public int faceNum(ISwitchE e)

      Specified by:
        `faceNum` in interface `IMeshI`

    - #### vertexNum

          public IInteger vertexNum(ISwitchR r)

      Specified by:
        `vertexNum` in interface `IMeshI`

    - #### edgeNum

          public IInteger edgeNum(ISwitchR r)

      Specified by:
        `edgeNum` in interface `IMeshI`

    - #### faceNum

          public IInteger faceNum(ISwitchR r)

      Specified by:
        `faceNum` in interface `IMeshI`

    - #### vertex

          public IVertex vertex(int i)

      Specified by:
        `vertex` in interface `IMeshI`

    - #### edge

          public IEdge edge(int i)

      Specified by:
        `edge` in interface `IMeshI`

    - #### face

          public IFace face(int i)

      Specified by:
        `face` in interface `IMeshI`

    - #### vertex

          public IVertex vertex(IIntegerI i)

      Specified by:
        `vertex` in interface `IMeshI`

    - #### edge

          public IEdge edge(IIntegerI i)

      Specified by:
        `edge` in interface `IMeshI`

    - #### face

          public IFace face(IIntegerI i)

      Specified by:
        `face` in interface `IMeshI`

    - #### vertices

          public java.util.ArrayList<IVertex> vertices()

      return all vertices
      Specified by:
        `vertices` in interface `IMeshI`

    - #### edges

          public java.util.ArrayList<IEdge> edges()

      return all edges
      Specified by:
        `edges` in interface `IMeshI`

    - #### faces

          public java.util.ArrayList<IFace> faces()

      return all faces
      Specified by:
        `faces` in interface `IMeshI`

    - #### center

          public IVec center()

      center of mesh, calculated by average of all vertices
      Specified by:
        `center` in interface `IMeshI`

    - #### deleteUnlinked

          public void deleteUnlinked()

    - #### deleteVertex

          public IMeshGeo deleteVertex(IVertex v)

      Specified by:
        `deleteVertex` in interface `IMeshI`

    - #### deleteEdge

          public IMeshGeo deleteEdge(IEdge e)

      Specified by:
        `deleteEdge` in interface `IMeshI`

    - #### deleteFace

          public IMeshGeo deleteFace(IFace f)

      Specified by:
        `deleteFace` in interface `IMeshI`

    - #### deleteVertex

          public IMeshGeo deleteVertex(int i)

      Specified by:
        `deleteVertex` in interface `IMeshI`

    - #### deleteEdge

          public IMeshGeo deleteEdge(int i)

      Specified by:
        `deleteEdge` in interface `IMeshI`

    - #### deleteFace

          public IMeshGeo deleteFace(int i)

      Specified by:
        `deleteFace` in interface `IMeshI`

    - #### deleteVertex

          public IMeshGeo deleteVertex(IIntegerI i)

      Specified by:
        `deleteVertex` in interface `IMeshI`

    - #### deleteEdge

          public IMeshGeo deleteEdge(IIntegerI i)

      Specified by:
        `deleteEdge` in interface `IMeshI`

    - #### deleteFace

          public IMeshGeo deleteFace(IIntegerI i)

      Specified by:
        `deleteFace` in interface `IMeshI`

    - #### getIndex

          public int getIndex(IVertex v)

    - #### getIndex

          public int getIndex(IEdge e)

    - #### getIndex

          public int getIndex(IFace f)

    - #### addFace

          public void addFace(IFace f)

    - #### addFace

          public void addFace(IFace f,
                     boolean checkVertexExisting,
                     boolean checkEdgeExisting,
                     boolean checkFaceExisting)

    - #### addTriangles

          public void addTriangles(IVertex[] v)

    - #### addTriangles

          public void addTriangles(IVec[] v)

    - #### addQuads

          public void addQuads(IVertex[] v)

    - #### addQuads

          public void addQuads(IVec[] v)

    - #### addPolygon

          public void addPolygon(IVertex[] v)

    - #### addPolygon

          public void addPolygon(IVec[] v)

    - #### addTriangleStrip

          public void addTriangleStrip(IVertex[] v)

    - #### addTriangleStrip

          public void addTriangleStrip(IVec[] v)

    - #### addQuadStrip

          public void addQuadStrip(IVertex[] v)

    - #### addQuadStrip

          public void addQuadStrip(IVec[] v)

    - #### addTriangleFan

          public void addTriangleFan(IVertex[] v)

    - #### addTriangleFan

          public void addTriangleFan(IVec[] v)

    - #### insertVertex

          public IVertex insertVertex(IFace f,
                             IVertex v,
                             IMeshType creator)

    - #### replaceEdge

          public void replaceEdge(IFace f,
                         IEdge oldEdge,
                         IEdge newEdge1,
                         IEdge newEdge2,
                         IVertex vertexOnEdge,
                         IMeshType creator)

    - #### divideEdge

          public void divideEdge(IEdge e,
                        double ratio,
                        IMeshType creator)

    - #### divideEdge

          public IEdge[] divideEdge(IEdge e,
                           double[] ratios,
                           IMeshType creator)

      divide by multiple ratios. ratios need to be orderd from smaller to larger
      Parameters:
        `ratios` - [0-1]: 0 -> e.vertices[0], 1->e.vertices[1]
      Returns:
        divided edges.

    - #### divideFace

          public IMeshGeo divideFace(IFace f,
                            IEdge e1,
                            IVertex nv1,
                            IEdge e2,
                            IVertex nv2,
                            IMeshType creator)

    - #### triangulate

          public IMeshGeo triangulate(IFace f,
                             boolean triangulateDirection,
                             IMeshType creator)

    - #### triangulate

          public IMeshGeo triangulate()

    - #### triangulate

          public IMeshGeo triangulate(boolean triangulateDirection)

    - #### triangulateAll

          public IMeshGeo triangulateAll(boolean triangulateDirection,
                                IMeshType creator)

      alias of triangulate; fow downward compatibility

    - #### triangulate

          public IMeshGeo triangulate(boolean triangulateDirection,
                             IMeshType creator)

    - #### triangulateAtCenter

          public IMeshGeo triangulateAtCenter()

    - #### triangulateAtCenter

          public IMeshGeo triangulateAtCenter(IMeshType creator)

    - #### removeDuplicatedEdge

          public IMeshGeo removeDuplicatedEdge()

      remove duplicated edge

    - #### nakedEdges

          public IEdge[] nakedEdges()

      returns naked edges excluding duplicated edges on the same place. Note nakedEdges returns array and nakedEdges returns ArrayList. This is because nakedEdge(boolean) is inteded for internal uses and nakedEdge() is for external.
      Returns:
        array of naked edge

    - #### nakedEdges

          public java.util.ArrayList<IEdge> nakedEdges(boolean checkDuplicatedEdge)

      Parameters:
        `checkDuplicatedEdge` - This boolean switch make it assume duplicated edges at the same location exist and they are supposed to be connected

    - #### subD

          public IMeshGeo subD()

      subdivide all triangle faces into 4 triangles each divided at each mid point of edges.

    - #### subdivide

          public IMeshGeo subdivide()

      subdivide all triangle faces into 4 triangles each divided at each mid point of edges.

    - #### subdivideNakedEdges

          public void subdivideNakedEdges(int recursionNum,
                                 IMeshType creator)

    - #### subdivideNakedEdges

          public void subdivideNakedEdges(java.util.ArrayList<IEdge> loop,
                                 int recursionNum,
                                 IMeshType creator)

    - #### findLoop

          public java.util.ArrayList<java.util.ArrayList<IEdge>> findLoop(java.util.ArrayList<IEdge> edges)

    - #### getBoundingBox

          public IVec[] getBoundingBox()

    - #### close

          public IMeshGeo close()

      just setting boolean value to closed. checking no connection of mesh. used to set closed flag in saving
      Specified by:
        `close` in interface `IMeshI`

    - #### isClosed

          public boolean isClosed()

      just setting boolean value to closed. checking no connection of mesh. used to set closed flag in saving
      Specified by:
        `isClosed` in interface `IMeshI`

    - #### joinMesh

          public static IMeshGeo joinMesh(IMeshGeo[] meshes)

    - #### join

          public IMeshGeo join(IMeshGeo[] meshes)

      join other meshes into the current one and remove duplicated edges and vertices

    - #### join

          public IMeshGeo join(IMeshGeo[] meshes,
                      double tolerance)

      join other meshes into the current one and remove duplicated edges and vertices

    - #### removeDuplicates

          public IMeshGeo removeDuplicates()

      remove duplicated vertices and edges

    - #### removeDuplicates

          public IMeshGeo removeDuplicates(double tolerance)

      remove duplicated vertices and edges

    - #### loopSubD

          public IMeshGeo loopSubD()

      Loop-subdivision

    - #### loopSubdivide

          public IMeshGeo loopSubdivide()

      Loop-subdivision

    - #### loopSubD

          public IMeshGeo loopSubD(IVec[] fixedEdges)

      Loop-subdivision

    - #### loopSubdivide

          public IMeshGeo loopSubdivide(IVec[] fixedEdges)

      Loop-subdivision

    - #### faceEdges

          public IEdge[] faceEdges(IEdge e,
                          IEdge[] edges)

    - #### edgeIndex

          public int edgeIndex(IEdge e)

    - #### vertexIndex

          public int vertexIndex(IVertex v)

    - #### offset

          public IMeshGeo offset(double[] offsetList)

      offset each vertex towards vertex normal and return the mesh. It modifies the exisiting mesh instead of creating new one.
      Parameters:
        `offsetList` - An array of offset distance of each vertex. Size and order of the array needs to match with vertex size and order. If the array size is smaller than vertex size, the last member is applied to the remaining.

    - #### offset

          public IMeshGeo offset(double offsetDist)

      offset each vertex towards vertex normal and return the mesh. It modifies the exisiting mesh instead of creating new one.
      Parameters:
        `offsetDist` - offset distance.

    - #### flipNormal

          public IMeshGeo flipNormal()

    - #### flipNml

          public IMeshGeo flipNml()

    - #### unifyNormal

          public IMeshGeo unifyNormal()

    - #### unifyNml

          public IMeshGeo unifyNml()

    - #### unifyNml

          public IMeshGeo unifyNml(int faceIdx)

    - #### iterateFace

          public IFace iterateFace(IFace f,
                          boolean[] checkedFaces)

    - #### add

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

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

    - #### add

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

      Specified by:
        `add` in interface `ITransformable`

    - #### add

          public IMeshGeo add(IVecI v)

      Specified by:
        `add` in interface `ITransformable`

    - #### sub

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

      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

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

      Specified by:
        `sub` in interface `ITransformable`

    - #### sub

          public IMeshGeo sub(IVecI v)

      Specified by:
        `sub` in interface `ITransformable`

    - #### mul

          public IMeshGeo mul(IDoubleI v)

      Specified by:
        `mul` in interface `ITransformable`

    - #### mul

          public IMeshGeo mul(double v)

      Specified by:
        `mul` in interface `ITransformable`

    - #### div

          public IMeshGeo div(IDoubleI v)

      Specified by:
        `div` in interface `ITransformable`

    - #### div

          public IMeshGeo div(double v)

      Specified by:
        `div` in interface `ITransformable`

    - #### neg

          public IMeshGeo neg()

      Specified by:
        `neg` in interface `ITransformable`

    - #### rev

          public IMeshGeo rev()

      alias of neg

    - #### flip

          public IMeshGeo flip()

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

    - #### add

          public IMeshGeo add(IVecI v,
                     double f)

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

    - #### add

          public IMeshGeo add(IVecI v,
                     IDoubleI f)

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

    - #### add

          public IMeshGeo add(double f,
                     IVecI v)

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

    - #### add

          public IMeshGeo add(IDoubleI f,
                     IVecI v)

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

    - #### rot

          public IMeshGeo rot(IDoubleI angle)

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

    - #### rot

          public IMeshGeo rot(double angle)

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public IMeshGeo rot(IVecI axis,
                     IDoubleI angle)

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

    - #### rot

          public IMeshGeo rot(IVecI axis,
                     double angle)

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

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

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

    - #### rot

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

      Specified by:
        `rot` in interface `ITransformable`

    - #### rot

          public IMeshGeo rot(IVecI axis,
                     IVecI destDir)

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

    - #### rot

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

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

    - #### rot2

          public IMeshGeo rot2(IDoubleI angle)

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

    - #### rot2

          public IMeshGeo rot2(double angle)

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

    - #### rot2

          public IMeshGeo rot2(IVecI center,
                      IDoubleI angle)

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

    - #### rot2

          public IMeshGeo rot2(IVecI center,
                      double angle)

      Specified by:
        `rot2` in interface `ITransformable`

    - #### rot2

          public IMeshGeo rot2(IVecI destDir)

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

    - #### rot2

          public IMeshGeo rot2(IVecI center,
                      IVecI destPt)

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

    - #### scale

          public IMeshGeo scale(IDoubleI f)

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

    - #### scale

          public IMeshGeo scale(double f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          public IMeshGeo scale(IVecI center,
                       IDoubleI f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale

          public IMeshGeo scale(IVecI center,
                       double f)

      Specified by:
        `scale` in interface `ITransformable`

    - #### scale1d

          public IMeshGeo scale1d(IVecI axis,
                         double f)

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

    - #### scale1d

          public IMeshGeo scale1d(IVecI axis,
                         IDoubleI f)

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

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

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### scale1d

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

      Specified by:
        `scale1d` in interface `ITransformable`

    - #### ref

          public IMeshGeo ref(IVecI planeDir)

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

    - #### ref

          public IMeshGeo ref(IVecI center,
                     IVecI planeDir)

      Specified by:
        `ref` in interface `ITransformable`

    - #### mirror

          public IMeshGeo mirror(IVecI planeDir)

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

    - #### mirror

          public IMeshGeo mirror(IVecI center,
                        IVecI planeDir)

      Specified by:
        `mirror` in interface `ITransformable`

    - #### shear

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

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

    - #### shear

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

      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

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

      Specified by:
        `shear` in interface `ITransformable`

    - #### shear

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

      Specified by:
        `shear` in interface `ITransformable`

    - #### shearXY

          public IMeshGeo shearXY(double sxy,
                         double syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

          public IMeshGeo shearXY(IDoubleI sxy,
                         IDoubleI syx)

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

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

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearXY

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

      Specified by:
        `shearXY` in interface `ITransformable`

    - #### shearYZ

          public IMeshGeo shearYZ(double syz,
                         double szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

          public IMeshGeo shearYZ(IDoubleI syz,
                         IDoubleI szy)

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

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

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearYZ

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

      Specified by:
        `shearYZ` in interface `ITransformable`

    - #### shearZX

          public IMeshGeo shearZX(double szx,
                         double sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

          public IMeshGeo shearZX(IDoubleI szx,
                         IDoubleI sxz)

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

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

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### shearZX

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

      Specified by:
        `shearZX` in interface `ITransformable`

    - #### mv

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

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

    - #### mv

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

      Specified by:
        `mv` in interface `ITransformable`

    - #### mv

          public IMeshGeo mv(IVecI v)

      Specified by:
        `mv` in interface `ITransformable`

    - #### cp

          public IMeshGeo cp()

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

    - #### cp

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

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

    - #### cp

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

      Specified by:
        `cp` in interface `IMeshI`
      Specified by:
        `cp` in interface `ITransformable`

    - #### cp

          public IMeshGeo cp(IVecI v)

      Specified by:
        `cp` in interface `IMeshI`
      Specified by:
        `cp` in interface `ITransformable`

    - #### translate

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

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

    - #### translate

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

      Specified by:
        `translate` in interface `ITransformable`

    - #### translate

          public IMeshGeo translate(IVecI v)

      Specified by:
        `translate` in interface `ITransformable`

    - #### transform

          public IMeshGeo transform(IMatrix3I mat)

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

          public IMeshGeo transform(IMatrix4I mat)

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

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

      Specified by:
        `transform` in interface `ITransformable`

    - #### transform

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

      Specified by:
        `transform` in interface `ITransformable`