Files
test2/source/blender/freestyle/intern/scene_graph/LineRep.h

131 lines
3.3 KiB
C++
Executable File

//
// Filename : LineRep.h
// Author(s) : Stephane Grabli
// Purpose : Class to define the representation of 3D Line.
// Date of creation : 26/03/2002
//
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) : Please refer to the COPYRIGHT file distributed
// with this source distribution.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef LINEREP_H
# define LINEREP_H
# include <vector>
# include <list>
# include "Rep.h"
# include "../system/FreestyleConfig.h"
using namespace std;
/*! Base class for all lines objects */
class LIB_SCENE_GRAPH_EXPORT LineRep : public Rep
{
public:
/*! Line description style */
enum LINES_STYLE{LINES, LINE_STRIP, LINE_LOOP};
inline LineRep() : Rep() {_width = 0.f;}
/*! Builds a single line from 2 vertices
* v1
* first vertex
* v2
* second vertex
*/
inline LineRep(const Vec3r& v1, const Vec3r& v2)
: Rep()
{
SetStyle(LINES);
AddVertex(v1);
AddVertex(v2);
_width = 0.f;
}
/*! Builds a line rep from a vertex chain */
inline LineRep(const vector<Vec3r>& vertices)
: Rep()
{
_vertices = vertices;
SetStyle(LINE_STRIP);
_width = 0.f;
}
/*! Builds a line rep from a vertex chain */
inline LineRep(const list<Vec3r>& vertices)
: Rep()
{
for(list<Vec3r>::const_iterator v=vertices.begin(), end=vertices.end();
v!=end;
v++)
{
_vertices.push_back(*v);
}
SetStyle(LINE_STRIP);
_width = 0.f;
}
virtual ~LineRep()
{
_vertices.clear();
}
/*! accessors */
inline const LINES_STYLE style() const {return _Style;}
inline const vector<Vec3r>& vertices() const {return _vertices;}
inline float width() const {return _width;}
/*! modifiers */
inline void SetStyle(const LINES_STYLE iStyle) {_Style = iStyle;}
inline void AddVertex(const Vec3r& iVertex) {_vertices.push_back(iVertex);}
inline void SetVertices(const vector<Vec3r>& iVertices)
{
if(0 != _vertices.size())
{
_vertices.clear();
}
for(vector<Vec3r>::const_iterator v=iVertices.begin(), end=iVertices.end();
v!=end;
v++)
{
_vertices.push_back(*v);
}
}
inline void SetWidth(float iWidth) {_width=iWidth;}
/*! Accept the corresponding visitor */
virtual void accept(SceneVisitor& v) {
Rep::accept(v);
v.visitLineRep(*this);
}
/*! Computes the line bounding box.*/
virtual void ComputeBBox();
private:
LINES_STYLE _Style;
vector<Vec3r> _vertices;
float _width;
};
#endif // LINEREP_H