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 namespace sc {
00035
00036 class RenderedPolygons: public RenderedObject {
00037 public:
00038 enum Coloring { None, Vertex };
00039 private:
00040 RenderedPolygons::Coloring coloring_;
00041 int nvertex_;
00042 int nface_;
00043 double** vertices_;
00044 double** vertex_rgb_;
00045 int** faces_;
00046 int* nvertex_in_face_;
00047 protected:
00048 void render(const Ref<Render>&);
00049 public:
00050 RenderedPolygons();
00051 RenderedPolygons(const Ref<KeyVal>&);
00052 ~RenderedPolygons();
00053
00054 void initialize(int nvertex, int nface,
00055 RenderedPolygons::Coloring c = RenderedPolygons::None);
00056 void set_vertex(int, double x, double y, double z);
00057 void set_vertex_rgb(int, double r, double g, double b);
00058 void set_vertex_color(int i, const Color&c) {
00059 set_vertex_rgb(i, c.red(), c.green(), c.blue());
00060 }
00061 void set_face(int iface, int v1, int v2, int v3);
00062 void set_face(int iface, int v1, int v2, int v3, int v4);
00063
00064 int nvertex() const { return nvertex_; }
00065 int nface() const { return nface_; }
00066 int nvertex_in_face(int iface) const { return nvertex_in_face_[iface]; }
00067 const double *vertex(int i) const { return vertices_[i]; }
00068 double vertex(int i, int j) const { return vertices_[i][j]; }
00069 int face(int i,int j) const { return faces_[i][j]; }
00070 double vertex_rgb(int i, int j) const { return vertex_rgb_[i][j]; }
00071 int have_vertex_rgb() const { return coloring_ == Vertex; }
00072 };
00073
00074 }
00075
00076 #endif
00077
00078
00079
00080
00081