131 lines
3.0 KiB
C++
131 lines
3.0 KiB
C++
#ifndef __GLWRAPBAR__
|
|
#define __GLWRAPBAR__
|
|
|
|
#include<GL/GL.h>
|
|
#include <vcg/space/color4.h>
|
|
#include <vcg/physics/methods/lem/lem.h>
|
|
#include <wrap/gl/space.h>
|
|
|
|
namespace vcg {
|
|
|
|
template < class STL_BAR_CONT >
|
|
class GLWrapBar{
|
|
public:
|
|
/// The bar container
|
|
typedef STL_BAR_CONT BarContainer;
|
|
/// The bar type
|
|
typedef typename STL_BAR_CONT::value_type BarType;
|
|
/// The type of bar iterator
|
|
typedef typename STL_BAR_CONT::iterator BarIterator;
|
|
///the type of coordinates
|
|
typedef typename BarType::CoordType CoordType;
|
|
///the type of scalar
|
|
typedef typename CoordType::ScalarType ScalarType;
|
|
|
|
/* typedef typename MESH_TYPE MeshType;
|
|
typedef typename MeshType::FaceType FaceType;
|
|
typedef typename MeshType::VertexType VertexType;
|
|
typedef typename MeshType::CoordType CoordType;
|
|
typedef typename MeshType::ScalarType ScalarType;
|
|
typedef typename vcg::LemSolver<MeshType,FaceType> LemSolver;
|
|
typedef typename LemSolver::BarType BarType;*/
|
|
|
|
GLWrapBar(BarContainer & _b):Bars(_b){}
|
|
|
|
BarContainer & Bars;
|
|
|
|
public:
|
|
|
|
|
|
void Draw()
|
|
{
|
|
|
|
BarIterator Bi;
|
|
glLineWidth(3.f);
|
|
glPushAttrib(GL_CURRENT_BIT|GL_ENABLE_BIT );
|
|
glDisable(GL_NORMALIZE);
|
|
glDisable(GL_LIGHTING);
|
|
|
|
|
|
for (Bi=Bars.begin();Bi<Bars.end();Bi++)
|
|
{
|
|
CoordType direction=CoordType(0,0,0);
|
|
ScalarType verse=1.f;
|
|
//invert verse of axis bar
|
|
if (Bi->D>2)
|
|
verse=-1.f;
|
|
|
|
direction.V(Bi->D%3)=verse;
|
|
|
|
if (Bi->D==0)
|
|
glColor3d(1,1,1);
|
|
else
|
|
if (Bi->D==1)
|
|
glColor3d(1,0,0);
|
|
else
|
|
if (Bi->D==2)
|
|
glColor3d(0,1,0);
|
|
else
|
|
if (Bi->D==3)
|
|
glColor3d(0,0,1);
|
|
else
|
|
if (Bi->D==4)
|
|
glColor3d(0,1,1);
|
|
else
|
|
glColor3d(1,0,1);
|
|
|
|
if (Bi->IsTouched())
|
|
glColor3d(0,0,0);
|
|
|
|
glBegin(GL_LINE_STRIP);
|
|
vcg::glVertex(Bi->P);
|
|
vcg::glVertex(Bi->P+(direction*Bi->L));
|
|
// vcg::glVertex(Bi->P+direction);
|
|
glEnd();
|
|
/*glBegin(GL_LINE_STRIP);
|
|
vcg::glVertex(Bi->V0->P());
|
|
vcg::glVertex(Bi->V1->P());
|
|
glEnd();*/
|
|
}
|
|
glPopAttrib();
|
|
}
|
|
|
|
template<class MESH_TYPE>
|
|
void DrawMesh(MESH_TYPE *m)
|
|
{
|
|
MESH_TYPE::FaceIterator Fi;
|
|
glPushAttrib(GL_COLOR_BUFFER_BIT);
|
|
|
|
glColor4d(0.8,0.8,0.8,0.9);
|
|
for (Fi=m->face.begin();Fi<m->face.end();Fi++)
|
|
{
|
|
if (!Fi->IsD())
|
|
{
|
|
glEnable(GL_BLEND);
|
|
glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA);
|
|
glEnable(GL_LIGHTING);
|
|
glEnable(GL_NORMALIZE);
|
|
glBegin(GL_TRIANGLES);
|
|
glNormal(Fi->NormalizedNormal());
|
|
glVertex(Fi->V(0)->P());
|
|
glVertex(Fi->V(1)->P());
|
|
glVertex(Fi->V(2)->P());
|
|
glEnd();
|
|
|
|
glDisable(GL_BLEND);
|
|
glDisable(GL_LIGHTING);
|
|
glDisable(GL_NORMALIZE);
|
|
glColor3d(0,0,0);
|
|
glBegin(GL_LINE_LOOP);
|
|
glVertex(Fi->V(0)->P());
|
|
glVertex(Fi->V(1)->P());
|
|
glVertex(Fi->V(2)->P());
|
|
glEnd();
|
|
}
|
|
}
|
|
glPopAttrib();
|
|
}
|
|
};
|
|
|
|
}
|
|
#endif |