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