class_docstr: A trait for a named tuple corresponding to a three.js Face3.
  
  Accepts named tuples with the field names:
  ('a', 'b', 'c', 'normal', 'color', 'materialIndex')
class_docstr_tok: ["A","trait","for","a","named","tuple","corresponding","to","a","three.js","Face3",".","Accepts","named","tuples","with","the","field","names",":","(","'","a","'",",","'","b","'",",","'","c","'",",","'normal","'",",","'color","'",",","'materialIndex","'",")"]
code: def __init__(self, **kwargs):
      super(Face3, self).__init__(
          CInt(),  # a - Vertex A index.
          CInt(),  # b - Vertex B index.
          CInt(),  # c - Vertex C index.
          Union(
              [  # normal - (optional) Face normal (Vector3) or array of 3 vertex normals.
                  Vector3(allow_none=True),
                  Tuple((Vector3(),) * 3),
              ]
          ),
          Union(
              [  # color - (optional) Face color or array of vertex colors.
                  Unicode(allow_none=True),
                  Tuple((Unicode(),) * 3),
              ]
          ),
          CInt(
              allow_none=True
          ),  # materialIndex - (optional) which index of an array of materials to associate with the face.
          default_value=(0, 0, 0, None, None, None),
      )
      self.metadata.setdefault("to_json", _face_to_json)
  
imports: from collections import namedtuple
  from collections.abc import Sequence
  import numbers
  import math
  import re
  import warnings
  from traitlets import Unicode, Int, CInt, Instance, Enum, List, Dict, Float, CFloat, Bool, Tuple, Undefined, TraitError, Union, TraitType, CaselessStrEnum
  from ipywidgets import widget_serialization
  from ipydatawidgets import DataUnion, NDArrayWidget, shape_constraints
  import numpy
label_desc: Use image node_id 1 to create a new Face3 object from inherited base classes: Tuple with example: obj = Face3()