add vcglib
This commit is contained in:
1 parent
6f6c0c8eb7
commit
af8100f851
1537 files changed
+634197
No files matched your search
@@ -0,0 +1,280 @@
|
||||
/****************************************************************************
|
||||
* VCGLib o o *
|
||||
* Visual and Computer Graphics Library o o *
|
||||
* _ O _ *
|
||||
* Copyright(C) 2004-2016 \/)\/ *
|
||||
* Visual Computing Lab /\/| *
|
||||
* ISTI - Italian National Research Council | *
|
||||
* \ *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* 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 (http://www.gnu.org/licenses/gpl.txt) *
|
||||
* for more details. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/****************************************************************************
|
||||
History
|
||||
|
||||
$Log: not supported by cvs2svn $
|
||||
Revision 1.4 2007/05/17 09:06:44 ganovelli
|
||||
gestione double click
|
||||
|
||||
Revision 1.3 2006/12/10 23:29:57 ganovelli
|
||||
added VFIterator (Pos is disabled in this version)
|
||||
|
||||
Revision 1.2 2006/12/10 22:17:18 ganovelli
|
||||
cvs problem during frist committ. repeated
|
||||
|
||||
*/
|
||||
|
||||
#include <QtGui>
|
||||
#include <GL/glew.h>
|
||||
#include <QtOpenGL>
|
||||
|
||||
#include <math.h>
|
||||
#include "glwidget.h"
|
||||
#include <wrap/io_trimesh/import_PLY.h>
|
||||
#include <wrap/gl/picking.h>
|
||||
#include <wrap/gl/space.h>
|
||||
#include <wrap/gl/pos.h>
|
||||
#include <vcg/complex/algorithms/update/bounding.h>
|
||||
#include <vcg/complex/algorithms/update/normal.h>
|
||||
#include <vcg/complex/algorithms/update/topology.h>
|
||||
|
||||
|
||||
GLWidget::GLWidget(QWidget *parent)
|
||||
: QGLWidget(parent)
|
||||
{
|
||||
object = 0;
|
||||
|
||||
trolltechGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
|
||||
trolltechPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);
|
||||
track.SetPosition(vcg::Point3f(0.0,0.0,0.0));
|
||||
track.SetIdentity();
|
||||
track.radius = 0.4;
|
||||
pos.f=NULL;
|
||||
vfite.f = NULL;
|
||||
doPickVfIte = false;
|
||||
doPickPos = false;
|
||||
}
|
||||
|
||||
GLWidget::~GLWidget()
|
||||
{
|
||||
makeCurrent();
|
||||
glDeleteLists(object, 1);
|
||||
}
|
||||
|
||||
QSize GLWidget::minimumSizeHint() const
|
||||
{
|
||||
return QSize(50, 50);
|
||||
}
|
||||
|
||||
QSize GLWidget::sizeHint() const
|
||||
{
|
||||
return QSize(400, 400);
|
||||
}
|
||||
|
||||
void GLWidget::LoadTriMesh(QString &namefile)
|
||||
{
|
||||
vcg::tri::io::ImporterPLY<MyStraightMesh>::Open(mesh,namefile.toAscii());
|
||||
vcg::tri::UpdateBounding<MyStraightMesh>::Box(mesh);
|
||||
vcg::tri::UpdateNormals<MyStraightMesh>::PerFace(mesh);
|
||||
vcg::tri::UpdateNormals<MyStraightMesh>::PerVertex(mesh);
|
||||
vcg::tri::UpdateTopology<MyStraightMesh>::FaceFace(mesh);
|
||||
vcg::tri::UpdateTopology<MyStraightMesh>::VertexFace(mesh);
|
||||
pos.f=0;
|
||||
vfite.f=NULL;
|
||||
}
|
||||
|
||||
void GLWidget::OpenFile(){
|
||||
QStringList filters;
|
||||
|
||||
|
||||
QString fileName = QFileDialog::getOpenFileName(this,tr("Open File"),".", filters.join("\n"));
|
||||
|
||||
if (fileName.isEmpty()) return;
|
||||
else
|
||||
LoadTriMesh( fileName );
|
||||
|
||||
}
|
||||
|
||||
void GLWidget::flipV( ){
|
||||
if(pos.f) pos.FlipV();
|
||||
repaint();
|
||||
}
|
||||
void GLWidget::flipE( ){
|
||||
if(pos.f) pos.FlipE();
|
||||
repaint();
|
||||
}
|
||||
void GLWidget::flipF( ){
|
||||
if(pos.f) pos.FlipF();
|
||||
repaint();
|
||||
}
|
||||
void GLWidget::nextE( ){
|
||||
if(pos.f) pos.NextE();
|
||||
repaint();
|
||||
}
|
||||
void GLWidget::nextB( ){
|
||||
if(pos.f) pos.NextB();
|
||||
repaint();
|
||||
}
|
||||
|
||||
void GLWidget::nextVfite( ){
|
||||
if(vfite.F()) ++vfite;
|
||||
repaint();
|
||||
}
|
||||
|
||||
void GLWidget::initializeGL()
|
||||
{
|
||||
qglClearColor(trolltechPurple.dark());
|
||||
glShadeModel(GL_FLAT);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_CULL_FACE);
|
||||
}
|
||||
|
||||
template <class VertexType>
|
||||
void drawVertex(VertexType & v){
|
||||
glPushAttrib(0xffffffff);
|
||||
glPointSize(2.0);
|
||||
glBegin(GL_POINTS);
|
||||
glVertex(v.P());
|
||||
glEnd();
|
||||
glPopAttrib();
|
||||
}
|
||||
|
||||
void GLWidget::paintGL()
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
gluLookAt(0,0,2, 0,0,0, 0,1,0);
|
||||
|
||||
track.GetView();
|
||||
track.Apply();
|
||||
|
||||
|
||||
glScalef(1/glWrap.m->bbox.Diag(),1/glWrap.m->bbox.Diag(),1/glWrap.m->bbox.Diag());
|
||||
glTranslate(-glWrap.m->bbox.Center());
|
||||
|
||||
// to do some picking
|
||||
MyStraightMesh::FaceType* fp=NULL;
|
||||
MyStraightMesh::VertexType* vp=NULL;
|
||||
if(doPickPos)
|
||||
{
|
||||
std::vector<MyStraightMesh::FaceType*> res;
|
||||
int yes = vcg::Pick<MyStraightMesh::FaceContainer>(pic_x,ScreenH-pic_y+1,mesh.face,res,vcg::glTriangle3<MyStraightMesh::FaceType>,1,1);
|
||||
if(yes)
|
||||
{fp = res[0];
|
||||
pos.Set(fp,0,fp->V(0));
|
||||
}
|
||||
doPickPos=false;
|
||||
}else
|
||||
if(doPickVfIte)
|
||||
{
|
||||
std::vector<MyStraightMesh::VertexType*> res;
|
||||
int yes = vcg::Pick<MyStraightMesh::VertContainer>(pic_x,ScreenH-pic_y+1,mesh.vert,res,drawVertex<MyStraightMesh::VertexType>,3,3);
|
||||
if(yes)
|
||||
{vp = res[0];
|
||||
MyStraightMesh::FaceType* g = vp->VFp();
|
||||
vfite=vcg::face::VFIterator<MyStraightMesh::FaceType>(vp);
|
||||
}
|
||||
|
||||
doPickVfIte = false;
|
||||
}
|
||||
|
||||
glWrap.Draw<vcg::GLW::DMFlatWire,vcg::GLW::CMNone,vcg::GLW::TMNone> ();
|
||||
|
||||
if(pos.f!=NULL) {
|
||||
glPushAttrib(0xffffffff);
|
||||
glDisable(GL_LIGHTING);
|
||||
glColor3f(0.0,1.0,0.0);
|
||||
glDepthRange(0.0,0.999);
|
||||
vcg::GlPos<vcg::face::Pos<MyStraightMesh::FaceType> >::Draw(pos);
|
||||
glPopAttrib();
|
||||
}
|
||||
if(vfite.F()!=NULL) {
|
||||
glPushAttrib(0xffffffff);
|
||||
glDisable(GL_LIGHTING);
|
||||
glColor3f(0.0,1.0,0.0);
|
||||
glDepthRange(0.0,0.99);
|
||||
vcg::GlVfIterator<vcg::face::VFIterator<MyStraightMesh::FaceType> >::Draw(vfite);
|
||||
glPopAttrib();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void GLWidget::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
track.MouseMove(e->x(),ScreenH-e->y()+1);
|
||||
repaint();
|
||||
|
||||
//if (event->buttons() & Qt::LeftButton) {
|
||||
// setXRotation(xRot + 8 * dy);
|
||||
//} else if (event->buttons() & Qt::RightButton) {
|
||||
// setXRotation(xRot + 8 * dy);
|
||||
//}
|
||||
// lastPos = event->pos();
|
||||
}
|
||||
void GLWidget::keyPressEvent ( QKeyEvent * e ) {
|
||||
if((keypress == Qt::Key_Control)&&(e->key()==Qt::Key_Control))
|
||||
keypress = -1;
|
||||
else
|
||||
keypress = e->key();
|
||||
}
|
||||
void GLWidget::mouseDoubleClickEvent(QMouseEvent *e){
|
||||
if(e->button() == Qt::RightButton)
|
||||
doPickPos=true;
|
||||
|
||||
}
|
||||
void GLWidget:: mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
if( (keypress==Qt::Key_Control) && (e->button() == Qt::LeftButton) )
|
||||
track.MouseDown(e->x(),ScreenH-e->y()+1,vcg::Trackball::KEY_CTRL|vcg::Trackball::BUTTON_LEFT );
|
||||
else
|
||||
if(e->button() == Qt::LeftButton )
|
||||
track.MouseDown(e->x(),ScreenH-e->y()+1,vcg::Trackball::BUTTON_LEFT);
|
||||
else
|
||||
if(e->button() == Qt::RightButton)
|
||||
{
|
||||
doPickVfIte=true;
|
||||
pic_x = e->x();
|
||||
pic_y = e->y();
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
void GLWidget::mouseReleaseEvent ( QMouseEvent * e ){
|
||||
|
||||
if( (keypress==Qt::Key_Control) && (e->button() == Qt::LeftButton) )
|
||||
track.MouseUp(e->x(),ScreenH-e->y()+1,vcg::Trackball::KEY_CTRL );
|
||||
else
|
||||
if(e->button() == Qt::LeftButton )
|
||||
track.MouseUp(e->x(),ScreenH-e->y()+1,vcg::Trackball::BUTTON_LEFT);
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
void GLWidget::resizeGL(int w,int h){
|
||||
ScreenW=w; ScreenH=h;
|
||||
glViewport(0,0,w,h);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45,ScreenW/(float)ScreenH,0.01,5);
|
||||
}
|
||||
void GLWidget::wheelEvent ( QWheelEvent * e ){
|
||||
int v = e->delta()/(float) 120;
|
||||
track.MouseWheel(v);
|
||||
repaint();
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/****************************************************************************
|
||||
* VCGLib o o *
|
||||
* Visual and Computer Graphics Library o o *
|
||||
* _ O _ *
|
||||
* Copyright(C) 2004-2016 \/)\/ *
|
||||
* Visual Computing Lab /\/| *
|
||||
* ISTI - Italian National Research Council | *
|
||||
* \ *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* 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 (http://www.gnu.org/licenses/gpl.txt) *
|
||||
* for more details. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/****************************************************************************
|
||||
History
|
||||
|
||||
$Log: not supported by cvs2svn $
|
||||
Revision 1.4 2007/05/17 09:06:44 ganovelli
|
||||
gestione double click
|
||||
|
||||
Revision 1.3 2006/12/10 23:29:57 ganovelli
|
||||
added VFIterator (Pos is disabled in this version)
|
||||
|
||||
Revision 1.2 2006/12/10 22:17:18 ganovelli
|
||||
cvs problem during frist committ. repeated
|
||||
|
||||
*/
|
||||
#ifndef GLWIDGET_H_POS_DEMO
|
||||
#define GLWIDGET_H_POS_DEMO
|
||||
|
||||
#include <GL/glew.h>
|
||||
#include <QGLWidget>
|
||||
#include "mesh_type.h"
|
||||
#include <wrap/gui/trackball.h>
|
||||
#include <wrap/gl/trimesh.h>
|
||||
#include <vcg/simplex/face/pos.h>
|
||||
#include <vcg/simplex/face/topology.h>
|
||||
|
||||
class GLWidget : public QGLWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
GLWidget(QWidget *parent = 0);
|
||||
~GLWidget();
|
||||
|
||||
QSize minimumSizeHint() const;
|
||||
QSize sizeHint() const;
|
||||
int xRotation() const { return xRot; }
|
||||
MyStraightMesh mesh;
|
||||
vcg::GlTrimesh<MyStraightMesh> glWrap;
|
||||
vcg::Trackball track;
|
||||
int ScreenH,ScreenW,pic_x,pic_y,keypress;
|
||||
bool doPickPos,doPickVfIte;
|
||||
vcg::face::Pos< MyStraightMesh::FaceType> pos;
|
||||
vcg::face::VFIterator< MyStraightMesh::FaceType> vfite;
|
||||
|
||||
public slots:
|
||||
void flipV( );
|
||||
void flipE( );
|
||||
void flipF( );
|
||||
void nextE( );
|
||||
void nextB( );
|
||||
void nextVfite( );
|
||||
|
||||
void LoadTriMesh(QString& namefile);
|
||||
void OpenFile();
|
||||
|
||||
protected:
|
||||
void initializeGL();
|
||||
void paintGL();
|
||||
void resizeGL(int width, int height);
|
||||
void mouseDoubleClickEvent(QMouseEvent *event);
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
void wheelEvent ( QWheelEvent * e );
|
||||
void keyPressEvent ( QKeyEvent * e );
|
||||
|
||||
private:
|
||||
GLuint makeObject();
|
||||
void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
|
||||
GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);
|
||||
void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
|
||||
void normalizeAngle(int *angle);
|
||||
|
||||
GLuint object;
|
||||
int xRot;
|
||||
QPoint lastPos;
|
||||
QColor trolltechGreen;
|
||||
QColor trolltechPurple;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
#include <QApplication>
|
||||
#include "window.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
Window wdw;
|
||||
wdw.show();
|
||||
return app.exec();
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/****************************************************************************
|
||||
* VCGLib o o *
|
||||
* Visual and Computer Graphics Library o o *
|
||||
* _ O _ *
|
||||
* Copyright(C) 2004-2016 \/)\/ *
|
||||
* Visual Computing Lab /\/| *
|
||||
* ISTI - Italian National Research Council | *
|
||||
* \ *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* 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 (http://www.gnu.org/licenses/gpl.txt) *
|
||||
* for more details. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/****************************************************************************
|
||||
History
|
||||
|
||||
$Log: not supported by cvs2svn $
|
||||
Revision 1.1 2006/12/10 19:55:09 ganovelli
|
||||
first draft. Working but ugly interface. right mouse of the button to place a pos, then prss buttons.
|
||||
|
||||
*/
|
||||
#pragma once
|
||||
/** the definition of vertex */
|
||||
#include<vcg/simplex/vertex/base.h>
|
||||
/** the definition of face */
|
||||
#include<vcg/simplex/face/base.h>
|
||||
/** definition of triangle mesh */
|
||||
#include<vcg/complex/complex.h>
|
||||
|
||||
/** allocation vertices and faces of triangle mesh */
|
||||
#include<wrap/io_trimesh/import_PLY.h>
|
||||
|
||||
|
||||
class DummyEdge;
|
||||
class StraightFace;
|
||||
|
||||
/**************************************************************************************************************************/
|
||||
/* DEFINITION OF A VERY STRAIGHT MESH. No optional atributes, just normals in the vertices and flags in vertices and faces*/
|
||||
|
||||
/** definition of a very simple vertex type. Just coordinates and normal as attributes*/
|
||||
class StraightVertex: public vcg::VertexSimp2< StraightVertex, DummyEdge, StraightFace, vcg::vert::Coord3f,vcg::vert::VFAdj,vcg::vert::Normal3f,vcg::vert::BitFlags>{};
|
||||
|
||||
/** definition of a very simple face type. Just color and reference to vertices as attribute*/
|
||||
class StraightFace: public vcg::FaceSimp2< StraightVertex, DummyEdge, StraightFace, vcg:: face::VertexRef, vcg:: face::FFAdj, vcg:: face::VFAdj,vcg:: face::Normal3f,vcg::face::BitFlags > {};
|
||||
|
||||
/** definition of a very simple mesh*/
|
||||
class MyStraightMesh: public vcg::tri::TriMesh< std::vector<StraightVertex>,std::vector<StraightFace> >{};
|
||||
|
||||
/****************************************************************************************************************************/
|
||||
@@ -0,0 +1,56 @@
|
||||
#include <vector>
|
||||
|
||||
#include <vcg/simplex/vertex/base.h>
|
||||
#include <vcg/simplex/vertex/component.h>
|
||||
#include <vcg/simplex/face/base.h>
|
||||
#include <vcg/simplex/face/component.h>
|
||||
|
||||
#include <vcg/complex/complex.h>
|
||||
#include<vcg/complex/algorithms/create/platonic.h>
|
||||
|
||||
#include<vcg/complex/algorithms/update/topology.h>
|
||||
|
||||
#include <vcg/simplex/face/pos.h>
|
||||
|
||||
class MyEdge;
|
||||
class MyFace;
|
||||
|
||||
class MyVertex: public vcg::VertexSimp2<MyVertex,MyEdge,MyFace, vcg::vert::Coord3d, vcg::vert::Normal3f>{};
|
||||
class MyFace: public vcg::FaceSimp2<MyVertex,MyEdge,MyFace, vcg::face::VertexRef,vcg::face::FFAdj>{};
|
||||
|
||||
class MyMesh: public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};
|
||||
|
||||
void OneRingNeighborhood( MyFace * f)
|
||||
{
|
||||
MyVertex * v = f->V(0);
|
||||
MyFace* start = f;
|
||||
vcg::face::Pos<MyFace> p(f,0,v);// constructor that takes face, edge and vertex
|
||||
do
|
||||
{
|
||||
p.FlipF();
|
||||
p.FlipE();
|
||||
}while(p.f!=start);
|
||||
}
|
||||
|
||||
#include <vcg/simplex/face/jumping_pos.h> // include the definition of jumping pos
|
||||
|
||||
void OneRingNeighborhoodJP( MyFace * f)
|
||||
{
|
||||
MyVertex * v = f->V(0);
|
||||
MyFace* start = f;
|
||||
vcg::face::JumpingPos<MyFace> p(f,0,v);// constructor that takes face, edge and vertex
|
||||
do
|
||||
{
|
||||
p.NextFE();
|
||||
}while(p.f!=start);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
MyMesh m;
|
||||
vcg::tri::Tetrahedron(m);
|
||||
vcg::tri::UpdateTopology<MyVCGMesh>::FaceFace(m);
|
||||
OneRingNeighborhood(&(*m.face.begin()));
|
||||
OneRingNeighborhoodJP(&(*m.face.begin()));
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
INCLUDEPATH += . ../../.. ../../../../code/lib ../../../../code/lib/glew/include
|
||||
HEADERS = glwidget.h \
|
||||
window.h \
|
||||
mesh_type.h
|
||||
SOURCES = glwidget.cpp \
|
||||
main.cpp \
|
||||
window.cpp\
|
||||
../../../../code/lib/glew/src/glew.c \
|
||||
../../../wrap/ply/plylib.cpp\
|
||||
../../../wrap/gui/trackmode.cpp\
|
||||
../../../wrap/gui/trackball.cpp
|
||||
QT += opengl
|
||||
|
||||
# install
|
||||
target.path = $$./debug
|
||||
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS trimesh_pos_demo.pro
|
||||
sources.path = ./
|
||||
INSTALLS += target sources
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#include <vector>
|
||||
|
||||
#include <vcg/simplex/vertex/base.h>
|
||||
#include <vcg/simplex/vertex/component.h>
|
||||
#include <vcg/simplex/face/base.h>
|
||||
#include <vcg/simplex/face/component.h>
|
||||
|
||||
#include <vcg/complex/complex.h>
|
||||
#include<vcg/complex/algorithms/create/platonic.h>
|
||||
|
||||
#include<vcg/complex/algorithms/update/topology.h>
|
||||
|
||||
#include <vcg/simplex/face/pos.h>
|
||||
|
||||
class MyEdge;
|
||||
class MyFace;
|
||||
|
||||
class MyVertex: public vcg::VertexSimp2<MyVertex,MyEdge,MyFace, vcg::vert::Coord3d, vcg::vert::Normal3f,vcg::vert::VFAdj>{};
|
||||
class MyFace: public vcg::FaceSimp2<MyVertex,MyEdge,MyFace, vcg::face::VertexRef,vcg::face::VFAdj>{};
|
||||
class MyMesh: public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};
|
||||
|
||||
void OneRingNeighborhoodVF( MyVertex * v)
|
||||
{
|
||||
vcg::face::VFIterator<MyFace> vfi(v); //initialize the iterator tohe first face
|
||||
for(;!vfi.End();++vfi)
|
||||
{
|
||||
MyFace* f = vfi.F();
|
||||
// ...do something with face f
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
MyMesh m;
|
||||
vcg::tri::Tetrahedron(m);
|
||||
vcg::tri::UpdateTopology<MyVCGMesh>::VertexFace(m);
|
||||
OneRingNeighborhoodVF(&(*m.vert.begin()));
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/****************************************************************************
|
||||
* VCGLib o o *
|
||||
* Visual and Computer Graphics Library o o *
|
||||
* _ O _ *
|
||||
* Copyright(C) 2004-2016 \/)\/ *
|
||||
* Visual Computing Lab /\/| *
|
||||
* ISTI - Italian National Research Council | *
|
||||
* \ *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* 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 (http://www.gnu.org/licenses/gpl.txt) *
|
||||
* for more details. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/****************************************************************************
|
||||
History
|
||||
|
||||
$Log: not supported by cvs2svn $
|
||||
Revision 1.2 2006/12/10 22:17:18 ganovelli
|
||||
cvs problem during frist committ. repeated
|
||||
|
||||
*/
|
||||
#include <QtGui>
|
||||
|
||||
#include "glwidget.h"
|
||||
#include "window.h"
|
||||
#include "mesh_type.h"
|
||||
|
||||
|
||||
Window::Window()
|
||||
{
|
||||
glWidget = new GLWidget;
|
||||
|
||||
fvButton = createButton("FlipV()",SLOT(flipV( )));
|
||||
feButton = createButton("FlipE()",SLOT(flipE( )));
|
||||
ffButton = createButton("FlipF()",SLOT(flipF( )));
|
||||
neButton = createButton("NextE() {FlipE() + FlipF() }",SLOT(nextE( )));
|
||||
nbButton = createButton("NextB() ",SLOT(nextB( )));
|
||||
ldButton = createButton("Load TriMesh",SLOT(OpenFile( )));
|
||||
vfButton = createButton("++()",SLOT(nextVfite()));
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||
mainLayout->addWidget(glWidget);
|
||||
mainLayout->addWidget(fvButton);
|
||||
mainLayout->addWidget(feButton);
|
||||
mainLayout->addWidget(ffButton);
|
||||
mainLayout->addWidget(neButton);
|
||||
mainLayout->addWidget(nbButton);
|
||||
mainLayout->addWidget(vfButton);
|
||||
mainLayout->addWidget(ldButton);
|
||||
setLayout(mainLayout);
|
||||
|
||||
glWidget->glWrap.m = &glWidget->mesh;
|
||||
|
||||
setWindowTitle(tr("TriMesh Pos Demo"));
|
||||
}
|
||||
|
||||
|
||||
QPushButton *Window::createButton(const char *text, const char *setterSlot)
|
||||
{
|
||||
QPushButton *button = new QPushButton( text,0);
|
||||
button-> resize ( 50, 20 );
|
||||
|
||||
if(!connect(button, SIGNAL(clicked()), glWidget, setterSlot))
|
||||
exit(0);
|
||||
return button;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/****************************************************************************
|
||||
* VCGLib o o *
|
||||
* Visual and Computer Graphics Library o o *
|
||||
* _ O _ *
|
||||
* Copyright(C) 2004-2016 \/)\/ *
|
||||
* Visual Computing Lab /\/| *
|
||||
* ISTI - Italian National Research Council | *
|
||||
* \ *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* 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 (http://www.gnu.org/licenses/gpl.txt) *
|
||||
* for more details. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/****************************************************************************
|
||||
History
|
||||
|
||||
$Log: not supported by cvs2svn $
|
||||
Revision 1.2 2006/12/10 22:17:18 ganovelli
|
||||
cvs problem during frist committ. repeated
|
||||
|
||||
*/
|
||||
#ifndef WINDOW_H_POS_DEMO
|
||||
#define WINDOW_H_POS_DEMO
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPushButton>
|
||||
|
||||
class QSlider;
|
||||
class GLWidget;
|
||||
|
||||
class Window : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Window();
|
||||
|
||||
private:
|
||||
QPushButton *createButton(const char *changedSignal, const char *setterSlot);
|
||||
|
||||
GLWidget *glWidget;
|
||||
QPushButton * fvButton,*feButton,*ffButton,*neButton,*ldButton,*nbButton,*vfButton;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user