class_docstr: Class for storing and operating on 3D mesh data. May contain:
  
    - list of vertex locations
    - list of edges
    - list of triangles
    - colors per vertex, edge, or tri
    - normals per vertex or tri
  
  This class handles conversion between the standard [list of vertexes, list of faces]
  format (suitable for use with glDrawElements) and 'indexed' [list of vertexes] format
  (suitable for use with glDrawArrays). It will automatically compute face normal
  vectors as well as averaged vertex normal vectors. 
  
  The class attempts to be as efficient as possible in caching conversion results and
  avoiding unnecessary conversions.
class_docstr_tok: ["Class","for","storing","and","operating","on","3D","mesh","data",".","May","contain",":","-","list","of","vertex","locations","-","list","of","edges","-","list","of","triangles","-","colors","per","vertex",",","edge",",","or","tri","-","normals","per","vertex","or","tri","This","class","handles","conversion","between","the","standard","[","list","of","vertexes",",","list","of","faces","]","format","(","suitable","for","use","with","glDrawElements",")","and","'indexed","'","[","list","of","vertexes","]","format","(","suitable","for","use","with","glDrawArrays",")",".","It","will","automatically","compute","face","normal","vectors","as","well","as","averaged","vertex","normal","vectors",".","The","class","attempts","to","be","as","efficient","as","possible","in","caching","conversion","results","and","avoiding","unnecessary","conversions","."]
docstr: ==============  =====================================================
  **Arguments:**
  vertexes        (Nv, 3) array of vertex coordinates.
                  If faces is not specified, then this will instead be
                  interpreted as (Nf, 3, 3) array of coordinates.
  faces           (Nf, 3) array of indexes into the vertex array.
  edges           [not available yet]
  vertexColors    (Nv, 4) array of vertex colors.
                  If faces is not specified, then this will instead be
                  interpreted as (Nf, 3, 4) array of colors.
  faceColors      (Nf, 4) array of face colors.
  ==============  =====================================================
  
  All arguments are optional.
docstr_tok: ["==============","=====================================================","*","*","Arguments",":","*","*","vertexes","(","Nv",",","3",")","array","of","vertex","coordinates",".","If","faces","is","not","specified",",","then","this","will","instead","be","interpreted","as","(","Nf",",","3",",","3",")","array","of","coordinates",".","faces","(","Nf",",","3",")","array","of","indexes","into","the","vertex","array",".","edges","[","not","available","yet","]","vertexColors","(","Nv",",","4",")","array","of","vertex","colors",".","If","faces","is","not","specified",",","then","this","will","instead","be","interpreted","as","(","Nf",",","3",",","4",")","array","of","colors",".","faceColors","(","Nf",",","4",")","array","of","face","colors",".","==============","=====================================================","All","arguments","are","optional","."]
code: def __init__(
      self,
      vertexes=None,
      faces=None,
      edges=None,
      vertexColors=None,
      faceColors=None,
  ):
      """
      ==============  =====================================================
      **Arguments:**
      vertexes        (Nv, 3) array of vertex coordinates.
                      If faces is not specified, then this will instead be
                      interpreted as (Nf, 3, 3) array of coordinates.
      faces           (Nf, 3) array of indexes into the vertex array.
      edges           [not available yet]
      vertexColors    (Nv, 4) array of vertex colors.
                      If faces is not specified, then this will instead be
                      interpreted as (Nf, 3, 4) array of colors.
      faceColors      (Nf, 4) array of face colors.
      ==============  =====================================================
  
      All arguments are optional.
      """
      self._vertexes = None  # (Nv,3) array of vertex coordinates
      self._vertexesIndexedByFaces = (
          None  #  (Nf, 3, 3) array of vertex coordinates
      )
      self._vertexesIndexedByEdges = (
          None  #  (Ne, 2, 3) array of vertex coordinates
      )
  
      ## mappings between vertexes, faces, and edges
      self._faces = None  # Nx3 array of indexes into self._vertexes specifying three vertexes for each face
      self._edges = None  # Nx2 array of indexes into self._vertexes specifying two vertexes per edge
      self._vertexFaces = None  ## maps vertex ID to a list of face IDs (inverse mapping of _faces)
      self._vertexEdges = None  ## maps vertex ID to a list of edge IDs (inverse mapping of _edges)
  
      ## Per-vertex data
      self._vertexNormals = (
          None  # (Nv, 3) array of normals, one per vertex
      )
      self._vertexNormalsIndexedByFaces = (
          None  # (Nf, 3, 3) array of normals
      )
      self._vertexColors = None  # (Nv, 3) array of colors
      self._vertexColorsIndexedByFaces = (
          None  # (Nf, 3, 4) array of colors
      )
      self._vertexColorsIndexedByEdges = (
          None  # (Nf, 2, 4) array of colors
      )
  
      ## Per-face data
      self._faceNormals = None  # (Nf, 3) array of face normals
      self._faceNormalsIndexedByFaces = (
          None  # (Nf, 3, 3) array of face normals
      )
      self._faceColors = None  # (Nf, 4) array of face colors
      self._faceColorsIndexedByFaces = (
          None  # (Nf, 3, 4) array of face colors
      )
      self._faceColorsIndexedByEdges = (
          None  # (Ne, 2, 4) array of face colors
      )
  
      ## Per-edge data
      self._edgeColors = None  # (Ne, 4) array of edge colors
      self._edgeColorsIndexedByEdges = (
          None  # (Ne, 2, 4) array of edge colors
      )
      # self._meshColor = (1, 1, 1, 0.1)  # default color to use if no face/edge/vertex colors are given
  
      if vertexes is not None:
          if faces is None:
              self.setVertexes(vertexes, indexed="faces")
              if vertexColors is not None:
                  self.setVertexColors(vertexColors, indexed="faces")
              if faceColors is not None:
                  self.setFaceColors(faceColors, indexed="faces")
          else:
              self.setVertexes(vertexes)
              self.setFaces(faces)
              if vertexColors is not None:
                  self.setVertexColors(vertexColors)
              if faceColors is not None:
                  self.setFaceColors(faceColors)
  
imports: import numpy
  from ..Qt import QtGui
label_desc: Use image node_id 1 to create a new MeshData object from inherited base classes: object with example: obj = MeshData(vertexes, faces, edges, vertexColors, faceColors)