soc-2008-mxcurioni: first version of lib3ds code. It does NOT work yet and has to...
[blender.git] / source / blender / freestyle / intern / scene_graph / NodeShape.h
1 //
2 //  Filename         : NodeShape.h
3 //  Author(s)        : Stephane Grabli
4 //  Purpose          : Class to build a shape node. It contains a Rep, 
5 //                     which is the shape geometry
6 //  Date of creation : 25/01/2002
7 //
8 ///////////////////////////////////////////////////////////////////////////////
9
10
11 //
12 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
13 //   with this source distribution. 
14 //
15 //  This program is free software; you can redistribute it and/or
16 //  modify it under the terms of the GNU General Public License
17 //  as published by the Free Software Foundation; either version 2
18 //  of the License, or (at your option) any later version.
19 //
20 //  This program is distributed in the hope that it will be useful,
21 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
22 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 //  GNU General Public License for more details.
24 //
25 //  You should have received a copy of the GNU General Public License
26 //  along with this program; if not, write to the Free Software
27 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
28 //
29 ///////////////////////////////////////////////////////////////////////////////
30
31 #ifndef  NODESHAPE_H
32 # define NODESHAPE_H
33
34 # include <vector>
35 # include "../system/FreestyleConfig.h"
36 # include "Node.h"
37 # include "Rep.h"
38 # include "../geometry/BBox.h"
39 # include "../geometry/Geom.h"
40 # include "FrsMaterial.h"
41
42 using namespace std;
43 using namespace Geometry;
44
45 class LIB_SCENE_GRAPH_EXPORT NodeShape : public Node
46 {
47 public:
48   
49   inline NodeShape() : Node() {}
50   
51   virtual ~NodeShape();
52
53   /*! Adds a Rep to the _Shapes list
54    *  The delete of the rep is done 
55    *  when it is not used any more by 
56    *  the Scene Manager. So, it must not 
57    *  be deleted by the caller
58    */
59   virtual void AddRep(Rep *iRep)
60   {
61     if(NULL == iRep)
62       return;
63     _Shapes.push_back(iRep);
64     iRep->addRef();
65     
66     // updates bbox:
67     AddBBox(iRep->bbox());
68   }
69
70   /*! Accept the corresponding visitor */
71   virtual void accept(SceneVisitor& v);
72
73   /*! Sets the shape material */
74   inline void setFrsMaterial(const FrsMaterial& iMaterial) { _FrsMaterial = iMaterial; }
75
76   /*! accessors */
77   /*! returns the shape's material */
78   inline FrsMaterial& frs_material() { return _FrsMaterial; }
79   inline const vector<Rep*>& shapes() {return _Shapes;}
80
81 private:
82   /*! list of shapes */
83   vector<Rep*> _Shapes;
84
85   /*! Shape Material */
86   FrsMaterial _FrsMaterial;
87 };
88
89 #endif // NODESHAPE_H