00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #ifndef MATERIAL_LIST_H__
00022 #define MATERIAL_LIST_H__
00023 
00024 #include "NameList.h"
00025 #include "ResizeArray.h"
00026 
00027 class Displayable;
00028 
00030 struct Material {
00031   float ambient;
00032   float specular;
00033   float diffuse;
00034   float shininess;
00035   float mirror;
00036   float opacity;
00037   float outline;
00038   float outlinewidth;
00039   float transmode;
00040   int ind;
00041 };
00042 
00043 
00045 enum MaterialProperty { 
00046   MAT_AMBIENT, MAT_SPECULAR, MAT_DIFFUSE, MAT_SHININESS, MAT_MIRROR,
00047   MAT_OPACITY, MAT_OUTLINE, MAT_OUTLINEWIDTH, MAT_TRANSMODE
00048 };
00049                         
00050 
00052 class MaterialList {
00053 protected:
00054   
00055   NameList<Material *> *mlist;
00056  
00057   
00058   
00059   Displayable *root;
00060 
00061   
00062   void notify(int);
00063 
00064   
00065   int matcounter;
00066 
00067 public:
00068   
00069   MaterialList(Displayable *);
00070   ~MaterialList();
00071 
00072   
00073   
00074   
00075   int num() const { return mlist->num(); }
00076   const char *material_name(int i) const { return mlist->name(i); }
00077   const Material *material(int i) const  { return mlist->data(i); }
00078 
00079   
00080   
00081   int material_index(const char *nm) const { return mlist->typecode(nm); }
00082 
00083   
00084   void set_name(int, const char *);
00085   void set_ambient(int, float); 
00086   void set_specular(int, float); 
00087   void set_diffuse(int, float); 
00088   void set_shininess(int, float); 
00089   void set_mirror(int, float); 
00090   void set_opacity(int, float); 
00091   void set_outline(int, float); 
00092   void set_outlinewidth(int, float); 
00093   void set_transmode(int, float); 
00094 
00095   
00096   float get_ambient(int); 
00097   float get_specular(int); 
00098   float get_diffuse(int); 
00099   float get_shininess(int); 
00100   float get_mirror(int); 
00101   float get_opacity(int); 
00102   float get_outline(int); 
00103   float get_outlinewidth(int); 
00104   float get_transmode(int); 
00105   
00106   
00107   
00108   
00109   
00110   const char *add_material(const char *name, const char *copyfrom); 
00111 
00112   
00113   int delete_material(int);
00114 
00115   
00116   int restore_default(int);
00117 };
00118 
00119 #endif
00120