soc-2008-mxcurioni: first version of lib3ds code. It does NOT work yet and has to...
[blender.git] / source / blender / freestyle / intern / scene_graph / TriangleRep.h
1 //
2 //  Filename         : TriangleRep.h
3 //  Author(s)        : Stephane Grabli
4 //  Purpose          : Class to define the represenation of a triangle
5 //  Date of creation : 16/12/2002
6 //
7 ///////////////////////////////////////////////////////////////////////////////
8
9
10 //
11 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
12 //   with this source distribution. 
13 //
14 //  This program is free software; you can redistribute it and/or
15 //  modify it under the terms of the GNU General Public License
16 //  as published by the Free Software Foundation; either version 2
17 //  of the License, or (at your option) any later version.
18 //
19 //  This program is distributed in the hope that it will be useful,
20 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
21 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 //  GNU General Public License for more details.
23 //
24 //  You should have received a copy of the GNU General Public License
25 //  along with this program; if not, write to the Free Software
26 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27 //
28 ///////////////////////////////////////////////////////////////////////////////
29
30 #ifndef  TRIANGLEREP_H
31 # define TRIANGLEREP_H
32
33 //! inherits from class Rep 
34 #include "Rep.h"
35
36 /*! Base class for all lines objects */
37 class LIB_SCENE_GRAPH_EXPORT TriangleRep : public Rep
38 {
39 public:
40   
41   /*! Line description style */
42   enum TRIANGLE_STYLE{FILL, LINES};
43 private:
44   TRIANGLE_STYLE _Style;
45   Vec3r _vertices[3];
46   Vec3r _colors[3];
47 public:
48   inline TriangleRep() : Rep() {_Style = FILL;}
49
50   /*! Builds a triangle from 3 vertices
51    *  v0
52    *    first vertex
53    *  v1
54    *    second vertex
55    *  v2
56    *    third vertex
57    */
58   inline TriangleRep(const Vec3r& v0, const Vec3r& v1, const Vec3r& v2)
59     : Rep()
60   {
61     _vertices[0] = v0;
62     _vertices[1] = v1;
63     _vertices[2] = v2;
64     _Style = FILL;
65   }
66   inline TriangleRep( const Vec3r& v0, const Vec3r& c0,
67                       const Vec3r& v1, const Vec3r& c1,
68                       const Vec3r& v2, const Vec3r& c2)
69     : Rep()
70   {
71     _vertices[0] = v0;
72     _vertices[1] = v1;
73     _vertices[2] = v2;
74     _colors[0] = c0;
75     _colors[1] = c1;
76     _colors[2] = c2;
77     _Style = FILL;
78   }
79
80   virtual ~TriangleRep() 
81   {} 
82
83   /*! accessors */
84   inline const TRIANGLE_STYLE style() const {return _Style;}
85   inline const Vec3r& vertex(int index) const {return _vertices[index];}
86   inline const Vec3r& color(int index) const {return _colors[index];}
87   /*! modifiers */
88   inline void setStyle(const TRIANGLE_STYLE iStyle) {_Style = iStyle;}
89   inline void setVertex(int index, const Vec3r& iVertex) {_vertices[index] = iVertex;}
90   inline void setColor(int index, const Vec3r& iColor) {_colors[index] = iColor;}
91   inline void setVertices(const Vec3r& v0, const Vec3r& v1, const Vec3r& v2) {_vertices[0] = v0; _vertices[1] = v1; _vertices[2] = v2;}
92   inline void setColors(const Vec3r& c0, const Vec3r& c1, const Vec3r& c2) {_colors[0] = c0; _colors[1] = c1; _colors[2] = c2;}
93
94   /*! Accept the corresponding visitor */
95   virtual void accept(SceneVisitor& v) {
96     Rep::accept(v);
97     v.visitTriangleRep(*this);
98   }
99
100   /*! Computes the triangle bounding box.*/
101   virtual void ComputeBBox();
102
103
104 };
105
106 #endif