00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _util_render_polygons_h
00029 #define _util_render_polygons_h
00030
00031 #include <util/keyval/keyval.h>
00032 #include <util/render/object.h>
00033
00034 class RenderedPolygons: public RenderedObject {
00035 public:
00036 enum Coloring { None, Vertex };
00037 private:
00038 RenderedPolygons::Coloring coloring_;
00039 int nvertex_;
00040 int nface_;
00041 double** vertices_;
00042 double** vertex_rgb_;
00043 int** faces_;
00044 int* nvertex_in_face_;
00045 protected:
00046 void render(const Ref<Render>&);
00047 public:
00048 RenderedPolygons();
00049 RenderedPolygons(const Ref<KeyVal>&);
00050 ~RenderedPolygons();
00051
00052 void initialize(int nvertex, int nface,
00053 RenderedPolygons::Coloring c = RenderedPolygons::None);
00054 void set_vertex(int, double x, double y, double z);
00055 void set_vertex_rgb(int, double r, double g, double b);
00056 void set_vertex_color(int i, const Color&c) {
00057 set_vertex_rgb(i, c.red(), c.green(), c.blue());
00058 }
00059 void set_face(int iface, int v1, int v2, int v3);
00060 void set_face(int iface, int v1, int v2, int v3, int v4);
00061
00062 int nvertex() const { return nvertex_; }
00063 int nface() const { return nface_; }
00064 int nvertex_in_face(int iface) const { return nvertex_in_face_[iface]; }
00065 const double *vertex(int i) const { return vertices_[i]; }
00066 double vertex(int i, int j) const { return vertices_[i][j]; }
00067 int face(int i,int j) const { return faces_[i][j]; }
00068 double vertex_rgb(int i, int j) const { return vertex_rgb_[i][j]; }
00069 int have_vertex_rgb() const { return coloring_ == Vertex; }
00070 };
00071
00072
00073 #endif
00074
00075
00076
00077
00078