Эх сурвалжийг харах

'fixed' cheburashka model and examples to use it, draw skeletons

Former-commit-id: eb0f26d833c1086f74713a5eafa9fdcd30ec835d
Alec Jacobson (jalec 11 жил өмнө
parent
commit
a1a6d6c946

+ 1 - 1
examples/ambient-occlusion-mex/example.m

@@ -1,4 +1,4 @@
-[V,F] = load_mesh('../shared/cheburashka.obj');
+[V,F] = load_mesh('../shared/cheburashka.off');
 N = per_vertex_normals(V,F);
 S = ambient_occlusion(V,F,V,N,1000);
 L = cotmatrix(V,F);

+ 1 - 1
examples/ambient-occlusion-mex/mexFunction.cpp

@@ -31,7 +31,7 @@ void mexFunction(int nlhs, mxArray *plhs[],
   // Prepare left-hand side
   nlhs = 1;
 
-  //read("../shared/cheburashka.obj",V,F);
+  //read("../shared/cheburashka.off",V,F);
   //P = V;
   //per_vertex_normals(V,F,N);
   ambient_occlusion(V,F,P,N,num_samples,S);

+ 2 - 2
examples/camera/example.cpp

@@ -11,7 +11,7 @@
 #include <igl/get_seconds.h>
 #include <igl/material_colors.h>
 #include <igl/draw_mesh.h>
-#include <igl/readOBJ.h>
+#include <igl/readOFF.h>
 #include <igl/per_face_normals.h>
 #include <igl/draw_floor.h>
 
@@ -633,7 +633,7 @@ int main(int argc, char * argv[])
   cout<<"[Shift+Command+Z]   Redo."<<endl;
   cout<<"[^C,ESC]            Exit."<<endl;
 
-  if(!readOBJ("../shared/cheburashka.obj",V,F))
+  if(!readOFF("../shared/cheburashka.off",V,F))
   {
     cerr<<"Failed to read in mesh..."<<endl;
     return 1;

+ 1 - 1
examples/quicklook-mesh/README

@@ -28,7 +28,7 @@ Then re-install GLU à la http://www.alecjacobson.com/weblog/?p=2827
 
 After installing you can test previews with:
 
-    /usr/bin/qlmanage -p ../shared/cheburashka.obj
+    /usr/bin/qlmanage -p ../shared/cheburashka.off
 
 and thumbnails with:
 

+ 1 - 1
examples/randomly-sample-mesh/example.cpp

@@ -486,7 +486,7 @@ int main(int argc, char * argv[])
   using namespace std;
   using namespace Eigen;
   using namespace igl;
-  string filename = "../shared/cheburashka.obj";
+  string filename = "../shared/cheburashka.off";
   if(argc < 2)
   {
     cerr<<"Usage:"<<endl<<"    ./example input.obj"<<endl;

+ 1 - 1
examples/rotate-widget/example.cpp

@@ -514,7 +514,7 @@ int main(int argc, char * argv[])
   using namespace std;
   using namespace Eigen;
   using namespace igl;
-  string filename = "../shared/cheburashka.obj";
+  string filename = "../shared/cheburashka.off";
   if(argc < 3)
   {
     cerr<<"Usage:"<<endl<<"    ./example input.obj"<<endl;

+ 1 - 1
examples/scene-rotation/example.cpp

@@ -569,7 +569,7 @@ int main(int argc, char * argv[])
   using namespace std;
   using namespace Eigen;
   using namespace igl;
-  string filename = "../shared/cheburashka.obj";
+  string filename = "../shared/cheburashka.off";
   if(argc < 2)
   {
     cerr<<"Usage:"<<endl<<"    ./example input.obj"<<endl;

+ 0 - 1
examples/shared/cheburashka.obj.REMOVED.git-id

@@ -1 +0,0 @@
-b8f4b722b5901bcb2a17dbc6f9b89eaa14bc8243

+ 1 - 0
examples/shared/cheburashka.off.REMOVED.git-id

@@ -0,0 +1 @@
+7e7666a89c45b2de12f43db62209b6fafa6cbd62

+ 1 - 1
examples/skeleton/Makefile

@@ -53,7 +53,7 @@ LIB=$(OPENGL_LIB) $(GLUT_LIB) $(ANTTWEAKBAR_LIB) $(LIBIGL_LIB) $(MATLAB_LIB) $(C
 CPP_FILES=$(wildcard ./*.cpp)
 OBJ_FILES=$(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o))) 
 
-CFLAGS+=-std=c++11 
+CFLAGS+=-std=c++11 -g
 
 example: obj $(OBJ_FILES)
 	g++ $(OPENMP) $(AFLAGS) $(CFLAGS) -o example $(OBJ_FILES) $(LIB)

+ 22 - 3
examples/skeleton/example.cpp

@@ -1,4 +1,5 @@
-#include "draw_skeleton.h"
+#include <igl/draw_skeleton_3d.h>
+#include <igl/draw_skeleton_vector_graphics.h>
 #include <igl/two_axis_valuator_fixed_up.h>
 #include <igl/readOBJ.h>
 #include <igl/readTGF.h>
@@ -40,6 +41,12 @@
 #include <stack>
 #include <iostream>
 
+enum SkelStyleType
+{
+  SKEL_STYLE_TYPE_3D = 0,
+  SKEL_STYLE_TYPE_VECTOR_GRAPHICS = 1,
+  NUM_SKEL_STYLE_TYPE = 2
+}skel_style;
 
 Eigen::MatrixXd V,N,C,W,M;
 Eigen::VectorXd Vmid,Vmin,Vmax;
@@ -274,7 +281,16 @@ void display()
     glDisable(GL_DEPTH_TEST);
   }
 
-  draw_skeleton(C,BE,T);
+  switch(skel_style)
+  {
+    default:
+    case SKEL_STYLE_TYPE_3D:
+      draw_skeleton_3d(C,BE,T);
+      break;
+    case SKEL_STYLE_TYPE_VECTOR_GRAPHICS:
+      draw_skeleton_vector_graphics(C,BE,T);
+      break;
+  }
 
   pop_object();
 
@@ -550,7 +566,7 @@ int main(int argc, char * argv[])
   using namespace std;
   using namespace Eigen;
   using namespace igl;
-  string filename = "../shared/cheburashka.obj";
+  string filename = "../shared/cheburashka.off";
   string skel_filename = "../shared/cheburashka.tgf";
   if(argc < 3)
   {
@@ -658,6 +674,9 @@ int main(int argc, char * argv[])
     set_rotation_type,get_rotation_type,NULL,"keyIncr=] keyDecr=[");
   rebar.TwAddVarRW("skeleton_on_top", TW_TYPE_BOOLCPP,&skeleton_on_top,"key=O");
   rebar.TwAddVarRW("wireframe", TW_TYPE_BOOLCPP,&wireframe,"key=l");
+  TwType SkelStyleTypeTW = ReTwDefineEnumFromString("SkelStyleType",
+    "3d,vector graphics");
+  rebar.TwAddVarRW("style",SkelStyleTypeTW,&skel_style,"key=s");
   rebar.load(REBAR_NAME);
 
   // Init antweakbar

+ 11 - 19
include/igl/RotateWidget.h

@@ -10,6 +10,7 @@
 #include <Eigen/Core>
 #include <Eigen/Geometry>
 #include <vector>
+#include <igl/material_colors.h>
 
 namespace igl
 {
@@ -323,15 +324,6 @@ inline void igl::RotateWidget::draw()
   using namespace std;
   using namespace igl;
 
-  const Vector4d 
-    MAYA_GREEN(128./255.,242./255.,0./255.,1.),
-    MAYA_YELLOW(255./255.,247./255.,50./255.,1.),
-    MAYA_RED(234./255.,63./255.,52./255.,1.),
-    MAYA_BLUE(0./255.,73./255.,252./255.,1.),
-    MAYA_PURPLE(180./255.,73./255.,200./255.,1.),
-    MAYA_GREY(0.5,0.5,0.5,1.0),
-    MAYA_CYAN(131./255.,219./255.,252./255.,1.);
-
   glDisable(GL_LIGHTING);
   glDisable(GL_DEPTH_TEST);
   glLineWidth(2.0);
@@ -365,7 +357,7 @@ inline void igl::RotateWidget::draw()
   // Draw outlines
   {
     glPushMatrix();
-    glColor4dv(MAYA_GREY.data());
+    glColor4fv(MAYA_GREY.data());
     Quaterniond q;
     q.setFromTwoVectors(Vector3d(0,0,1),view);
     glMultMatrixd(Affine3d(q).matrix().data());
@@ -373,10 +365,10 @@ inline void igl::RotateWidget::draw()
     glScaled(outer_over_inner,outer_over_inner,outer_over_inner);
     if(selected_type == DOWN_TYPE_OUTLINE)
     {
-      glColor4dv(MAYA_YELLOW.data());
+      glColor4fv(MAYA_YELLOW.data());
     }else
     {
-      glColor4dv(MAYA_CYAN.data());
+      glColor4fv(MAYA_CYAN.data());
     }
     draw_circle(false);
     glPopMatrix();
@@ -387,33 +379,33 @@ inline void igl::RotateWidget::draw()
     glMultMatrixd(Affine3d(rot).matrix().data());
     if(selected_type == DOWN_TYPE_Z)
     {
-      glColor4dv(MAYA_YELLOW.data());
+      glColor4fv(MAYA_YELLOW.data());
     }else
     {
-      glColor4dv(MAYA_BLUE.data());
+      glColor4fv(MAYA_BLUE.data());
     }
     draw_circle(true);
     if(selected_type == DOWN_TYPE_Y)
     {
-      glColor4dv(MAYA_YELLOW.data());
+      glColor4fv(MAYA_YELLOW.data());
     }else
     {
-      glColor4dv(MAYA_GREEN.data());
+      glColor4fv(MAYA_GREEN.data());
     }
     glRotated(90.0,1.0,0.0,0.0);
     draw_circle(true);
     if(selected_type == DOWN_TYPE_X)
     {
-      glColor4dv(MAYA_YELLOW.data());
+      glColor4fv(MAYA_YELLOW.data());
     }else
     {
-      glColor4dv(MAYA_RED.data());
+      glColor4fv(MAYA_RED.data());
     }
     glRotated(90.0,0.0,1.0,0.0);
     draw_circle(true);
     glPopMatrix();
   }
-  glColor3dv(MAYA_GREY.data());
+  glColor4fv(MAYA_GREY.data());
   draw_guide();
   glPopMatrix();
   glEnable(GL_DEPTH_TEST);

+ 22 - 24
examples/skeleton/draw_skeleton.h → include/igl/draw_skeleton_3d.cpp

@@ -1,26 +1,19 @@
-#include <Eigen/Core>
-// Draw a skeleton
-//
-// Inputs:
-//   C  #C by dim List of joint rest positions
-//   BE  #BE by 2 list of bone edge indices into C
-template <typename DerivedC, typename DerivedBE>
-void draw_skeleton(
-  const Eigen::PlainObjectBase<DerivedC> & C,
-  const Eigen::PlainObjectBase<DerivedBE> & BE);
-template <typename DerivedC, typename DerivedBE, typename DerivedT>
-void draw_skeleton(
-  const Eigen::PlainObjectBase<DerivedC> & C,
-  const Eigen::PlainObjectBase<DerivedBE> & BE,
-  const Eigen::PlainObjectBase<DerivedT> & T);
-
-// Implementation
-#include <igl/PI.h>
-#include <igl/OpenGL_convenience.h>
+// This file is part of libigl, a simple c++ geometry processing library.
+// 
+// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
+// 
+// This Source Code Form is subject to the terms of the Mozilla Public License 
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+// obtain one at http://mozilla.org/MPL/2.0/.
+#include "draw_skeleton_3d.h"
+#include "PI.h"
+#include "OpenGL_convenience.h"
+#include "material_colors.h"
 #include <Eigen/Geometry>
 #include <iostream>
+
 template <typename DerivedC, typename DerivedBE>
-void draw_skeleton(
+IGL_INLINE void igl::draw_skeleton_3d(
   const Eigen::PlainObjectBase<DerivedC> & C,
   const Eigen::PlainObjectBase<DerivedBE> & BE)
 {
@@ -28,11 +21,11 @@ void draw_skeleton(
   typedef Eigen::Matrix<typename DerivedC::Scalar,Dynamic,Dynamic> Mat;
   Mat I = Mat::Identity(C.cols()+1,C.cols());
   Mat T = I.replicate(BE.rows(),1);
-  return draw_skeleton(C,BE,T);
+  return draw_skeleton_3d(C,BE,T);
 }
 
 template <typename DerivedC, typename DerivedBE, typename DerivedT>
-void draw_skeleton(
+IGL_INLINE void igl::draw_skeleton_3d(
   const Eigen::PlainObjectBase<DerivedC> & C,
   const Eigen::PlainObjectBase<DerivedBE> & BE,
   const Eigen::PlainObjectBase<DerivedT> & T)
@@ -40,8 +33,8 @@ void draw_skeleton(
   using namespace Eigen;
   using namespace std;
   glDisable(GL_LIGHTING);
-  glColor3d(70./255.,252./255.,167./255.);
-  glLineWidth(2.0);
+  glColor4fv(MAYA_SEA_GREEN.data());
+  glLineWidth(1.0);
 
   auto draw_sphere = [](const double r)
   {
@@ -117,3 +110,8 @@ void draw_skeleton(
     glPopMatrix();
   }
 }
+
+#ifndef IGL_HEADER_ONLY
+// Explicit template instanciation
+template void igl::draw_skeleton_3d<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&);
+#endif

+ 34 - 0
include/igl/draw_skeleton_3d.h

@@ -0,0 +1,34 @@
+// This file is part of libigl, a simple c++ geometry processing library.
+// 
+// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
+// 
+// This Source Code Form is subject to the terms of the Mozilla Public License 
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+// obtain one at http://mozilla.org/MPL/2.0/.
+#ifndef IGL_DRAW_SKELETON_3D_H
+#define IGL_DRAW_SKELETON_3D_H
+#include "igl_inline.h"
+#include <Eigen/Core>
+namespace igl
+{
+  // Draw a skeleton
+  //
+  // Inputs:
+  //   C  #C by dim List of joint rest positions
+  //   BE  #BE by 2 list of bone edge indices into C
+  //   T  #BE*(dim+1) by dim  matrix of stacked transposed bone transformations
+  template <typename DerivedC, typename DerivedBE, typename DerivedT>
+  IGL_INLINE void draw_skeleton_3d(
+    const Eigen::PlainObjectBase<DerivedC> & C,
+    const Eigen::PlainObjectBase<DerivedBE> & BE,
+    const Eigen::PlainObjectBase<DerivedT> & T);
+  // Wrapper with each T = Identity
+  template <typename DerivedC, typename DerivedBE>
+  IGL_INLINE void draw_skeleton_3d(
+    const Eigen::PlainObjectBase<DerivedC> & C,
+    const Eigen::PlainObjectBase<DerivedBE> & BE);
+};
+#ifdef IGL_HEADER_ONLY
+#  include "draw_skeleton_3d.h"
+#endif
+#endif

+ 105 - 0
include/igl/draw_skeleton_vector_graphics.cpp

@@ -0,0 +1,105 @@
+// This file is part of libigl, a simple c++ geometry processing library.
+// 
+// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
+// 
+// This Source Code Form is subject to the terms of the Mozilla Public License 
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+// obtain one at http://mozilla.org/MPL/2.0/.
+#include "draw_skeleton_vector_graphics.h"
+#include "OpenGL_convenience.h"
+#include "draw_point.h"
+#include "material_colors.h"
+
+IGL_INLINE void igl::draw_skeleton_vector_graphics(
+  const Eigen::MatrixXd & C,
+  const Eigen::MatrixXi & BE)
+{
+  return draw_skeleton_vector_graphics(C,BE,BBW_POINT_COLOR,BBW_LINE_COLOR);
+}
+
+IGL_INLINE void igl::draw_skeleton_vector_graphics(
+  const Eigen::MatrixXd & C,
+  const Eigen::MatrixXi & BE,
+  const float * point_color,
+  const float * line_color)
+{
+  using namespace Eigen;
+  glLineWidth(10.0);
+
+  int cm;
+  glGetIntegerv(GL_COLOR_MATERIAL,&cm);
+  glDisable(GL_LIGHTING);
+  glDisable(GL_LINE_STIPPLE);
+  //glEnable(GL_POLYGON_OFFSET_FILL);
+  glEnable(GL_COLOR_MATERIAL);
+  glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
+  float mat_ambient[4] = {0.1,0.1,0.1,1.0};
+  float mat_specular[4] = {0.0,0.0,0.0,1.0};
+  float mat_shininess = 1;
+  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,  mat_ambient);
+  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,  mat_ambient);
+  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+  glMaterialf( GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+
+  for(int i = 0;i<3;i++)
+  {
+    switch(i)
+    {
+      case 0: glColor3fv(WHITE);      glLineWidth(10); break;
+      case 1: glColor3fv(BLACK);      glLineWidth( 6); break;
+      case 2: glColor3fv(line_color); glLineWidth( 4); break;
+    }
+    // Loop over bone edges
+    glBegin(GL_LINES);
+    for(int e = 0;e<BE.rows();e++)
+    {
+      RowVector3d tip = C.row(BE(e,0));
+      RowVector3d tail = C.row(BE(e,1));
+      glVertex3dv(tip.data());
+      glVertex3dv(tail.data());
+    }
+    glEnd();
+  }
+
+  glColor3fv(point_color);
+  for(int i = 0;i<C.rows();i++)
+  {
+    RowVector3d p = C.row(i);
+    draw_point(p(0),p(1),p(2));
+  }
+
+  (cm ? glEnable(GL_COLOR_MATERIAL):glDisable(GL_COLOR_MATERIAL));
+  //glDisable(GL_POLYGON_OFFSET_FILL);
+  glEnable(GL_LIGHTING);
+}
+
+template <typename DerivedC, typename DerivedBE, typename DerivedT>
+IGL_INLINE void igl::draw_skeleton_vector_graphics(
+  const Eigen::PlainObjectBase<DerivedC> & C,
+  const Eigen::PlainObjectBase<DerivedBE> & BE,
+  const Eigen::PlainObjectBase<DerivedT> & T)
+{
+  Eigen::PlainObjectBase<DerivedC> CT;
+  Eigen::PlainObjectBase<DerivedBE> BET;
+  const int dim = T.cols();
+  assert(dim == C.cols());
+  CT.resize(2*BE.rows(),C.cols());
+  BET.resize(BE.rows(),2);
+  for(int e = 0;e<BE.rows();e++)
+  {
+    BET(e,0) = 2*e; 
+    BET(e,1) = 2*e+1;
+    const auto & c0 = C.row(BE(e,0));
+    const auto & c1 = C.row(BE(e,1));
+    const auto & L = T.block(e*(dim+1),0,dim,dim);
+    const auto & t = T.block(e*(dim+1)+dim,0,1,dim);
+    CT.row(2*e) =   c0 * L + t;
+    CT.row(2*e+1) = c1 * L + t;
+  }
+  draw_skeleton_vector_graphics(CT,BET);
+}
+
+#ifndef IGL_HEADER_ONLY
+// Explicit template instanciation
+template void igl::draw_skeleton_vector_graphics<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&);
+#endif

+ 42 - 0
include/igl/draw_skeleton_vector_graphics.h

@@ -0,0 +1,42 @@
+// This file is part of libigl, a simple c++ geometry processing library.
+// 
+// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
+// 
+// This Source Code Form is subject to the terms of the Mozilla Public License 
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+// obtain one at http://mozilla.org/MPL/2.0/.
+#ifndef IGL_DRAW_SKELETON_VECTOR_GRAPHICS_H
+#define IGL_DRAW_SKELETON_VECTOR_GRAPHICS_H
+#include "igl_inline.h"
+#include <Eigen/Core>
+
+namespace igl
+{
+  // Draw a skeleton with a 2D vector graphcis style à la BBW, STBS, Monotonic,
+  // FAST papers.
+  //
+  // Inputs:
+  //   C  #C by dim list of joint positions
+  //   BE #BE by 2 list of bone edge indices into C
+  //  point_color  color of points
+  //  line_color  color of lines
+  IGL_INLINE void draw_skeleton_vector_graphics(
+    const Eigen::MatrixXd & C,
+    const Eigen::MatrixXi & BE,
+    const float * point_color,
+    const float * line_color);
+  // Use default colors (originally from BBW paper)
+  IGL_INLINE void draw_skeleton_vector_graphics(
+    const Eigen::MatrixXd & C,
+    const Eigen::MatrixXi & BE);
+  //   T  #BE*(dim+1) by dim  matrix of stacked transposed bone transformations
+  template <typename DerivedC, typename DerivedBE, typename DerivedT>
+  IGL_INLINE void draw_skeleton_vector_graphics(
+    const Eigen::PlainObjectBase<DerivedC> & C,
+    const Eigen::PlainObjectBase<DerivedBE> & BE,
+    const Eigen::PlainObjectBase<DerivedT> & T);
+}
+#ifdef IGL_HEADER_ONLY
+#  include "draw_skeleton_vector_graphics.h"
+#endif
+#endif 

+ 11 - 0
include/igl/material_colors.h

@@ -30,6 +30,8 @@ namespace igl
   const float FAST_BLUE_DIFFUSE[4]  = { 106.0f/255.0f, 106.0f/255.0f, 255.0f/255.0f, 1.0f};
   const float FAST_GRAY_DIFFUSE[4]  = { 150.0f/255.0f, 150.0f/255.0f, 150.0f/255.0f, 1.0f};
   // Basic colors
+  const float WHITE[4] =   { 255.0/255.0,255.0/255.0,255.0/255.0,1.0f };
+  const float BLACK[4] =   { 0.0/255.0,0.0/255.0,0.0/255.0,1.0f };
   const float WHITE_AMBIENT[4] =   { 255.0/255.0,255.0/255.0,255.0/255.0,1.0f };
   const float WHITE_DIFFUSE[4] =   { 255.0/255.0,255.0/255.0,255.0/255.0,1.0f };
   const float WHITE_SPECULAR[4] =  { 255.0/255.0,255.0/255.0,255.0/255.0,1.0f };
@@ -40,5 +42,14 @@ namespace igl
   const float EASTER_RED_DIFFUSE[4] = {0.603922,0.494118f,0.603922f,1.0f};
   const float WN_OPEN_BOUNDARY_COLOR[4] = {154./255.,0./255.,0./255.,1.0f};
   const float WN_NON_MANIFOLD_EDGE_COLOR[4] = {201./255., 51./255.,255./255.,1.0f};
+  const Eigen::Vector4f 
+    MAYA_GREEN(128./255.,242./255.,0./255.,1.),
+    MAYA_YELLOW(255./255.,247./255.,50./255.,1.),
+    MAYA_RED(234./255.,63./255.,52./255.,1.),
+    MAYA_BLUE(0./255.,73./255.,252./255.,1.),
+    MAYA_PURPLE(180./255.,73./255.,200./255.,1.),
+    MAYA_GREY(0.5,0.5,0.5,1.0),
+    MAYA_CYAN(131./255.,219./255.,252./255.,1.),
+    MAYA_SEA_GREEN(70./255.,252./255.,167./255.,1.);
 }
 #endif