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, specular, diffuse, shininess, opacity;
00032 int ind;
00033 };
00034
00035
00037 enum MaterialProperty {
00038 MAT_AMBIENT, MAT_SPECULAR, MAT_DIFFUSE, MAT_SHININESS, MAT_OPACITY
00039 };
00040
00041
00043 class MaterialList {
00044 protected:
00045
00046 NameList<Material *> *mlist;
00047
00048
00049
00050 Displayable *root;
00051
00052
00053 void notify(int);
00054
00055
00056 int matcounter;
00057
00058 public:
00059
00060 MaterialList(Displayable *);
00061 ~MaterialList();
00062
00063
00064
00065
00066 int num() const { return mlist->num(); }
00067 const char *material_name(int i) const { return mlist->name(i); }
00068 const Material *material(int i) const { return mlist->data(i); }
00069
00070
00071
00072 int material_index(const char *nm) const { return mlist->typecode(nm); }
00073
00074
00075 void set_name(int, const char *);
00076 void set_ambient(int, float);
00077 void set_specular(int, float);
00078 void set_diffuse(int, float);
00079 void set_shininess(int, float);
00080 void set_opacity(int, float);
00081
00082
00083 float get_ambient(int);
00084 float get_specular(int);
00085 float get_diffuse(int);
00086 float get_shininess(int);
00087 float get_opacity(int);
00088
00089
00090
00091
00092
00093 const char *add_material(const char *name, const char *copyfrom);
00094
00095
00096 int delete_material(int);
00097
00098
00099 int restore_default(int);
00100 };
00101
00102 #endif
00103