Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

MaterialList.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *cr
00003  *cr            (C) Copyright 1995-2011 The Board of Trustees of the
00004  *cr                        University of Illinois
00005  *cr                         All Rights Reserved
00006  *cr
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  * RCS INFORMATION:
00011  *
00012  *      $RCSfile: MaterialList.h,v $
00013  *      $Author: johns $        $Locker:  $             $State: Exp $
00014  *      $Revision: 1.25 $      $Date: 2010/12/16 04:08:22 $
00015  *
00016  ***************************************************************************
00017  * DESCRIPTION:
00018  *   Material properties list structure, master list of all materials
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 opacity;
00036   float outline;
00037   float outlinewidth;
00038   float transmode;
00039   int ind;
00040 };
00041 
00042 
00044 enum MaterialProperty { 
00045   MAT_AMBIENT, MAT_SPECULAR, MAT_DIFFUSE, MAT_SHININESS, MAT_OPACITY, 
00046   MAT_OUTLINE, MAT_OUTLINEWIDTH, MAT_TRANSMODE
00047 };
00048                         
00049 
00051 class MaterialList {
00052 protected:
00053   // list of materials 
00054   NameList<Material *> *mlist;
00055  
00056   // root displayable, used to propogate changes in material settings down
00057   // to all the displayables.
00058   Displayable *root;
00059 
00060   // tell users that settings have changed 
00061   void notify(int);
00062 
00063   // counter used to create unique material names
00064   int matcounter;
00065 
00066 public:
00067   // constructor: root of displayable tree
00068   MaterialList(Displayable *);
00069   ~MaterialList();
00070 
00071   // query raw material properties
00072   // The renderers would access the material properties from the
00073   // index in the DispCmd.
00074   int num() const { return mlist->num(); }
00075   const char *material_name(int i) const { return mlist->name(i); }
00076   const Material *material(int i) const  { return mlist->data(i); }
00077 
00078   // Displayables get the index for a material here.  If the name is no longer
00079   // valid, index 0 (opaque) is returned. 
00080   int material_index(const char *nm) const { return mlist->typecode(nm); }
00081 
00082   // modify material properties - the raw values may be scaled internally
00083   void set_name(int, const char *);
00084   void set_ambient(int, float); 
00085   void set_specular(int, float); 
00086   void set_diffuse(int, float); 
00087   void set_shininess(int, float); 
00088   void set_opacity(int, float); 
00089   void set_outline(int, float); 
00090   void set_outlinewidth(int, float); 
00091   void set_transmode(int, float); 
00092 
00093   // query material properties, with values scaled from 0 to 1
00094   float get_ambient(int); 
00095   float get_specular(int); 
00096   float get_diffuse(int); 
00097   float get_shininess(int); 
00098   float get_opacity(int); 
00099   float get_outline(int); 
00100   float get_outlinewidth(int); 
00101   float get_transmode(int); 
00102   
00103   // Add material with given name, or use new unique name if NULL.  
00104   // Copy settings from material with given name, or use material 0 
00105   // if copyfrom is NULL.  Return name of new material, or NULL on
00106   // error.
00107   const char *add_material(const char *name, const char *copyfrom); 
00108 
00109   // delete material; return success.
00110   int delete_material(int);
00111 
00112   // restore the default value of the given material.  Return success.
00113   int restore_default(int);
00114 };
00115 
00116 #endif
00117 

Generated on Thu May 23 01:47:35 2013 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002