From 6b7e9fb37d42b66752d3a5075d9675164afc35d7 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 11 May 2011 06:06:50 +0000 Subject: [PATCH] Added sample on edge mesh (intersection of a mesh with a plane --- apps/sample/trimesh_edge/trimesh_edge.cpp | 128 ++++++++++++++++++++++ apps/sample/trimesh_edge/trimesh_edge.pro | 13 +++ 2 files changed, 141 insertions(+) create mode 100644 apps/sample/trimesh_edge/trimesh_edge.cpp create mode 100644 apps/sample/trimesh_edge/trimesh_edge.pro diff --git a/apps/sample/trimesh_edge/trimesh_edge.cpp b/apps/sample/trimesh_edge/trimesh_edge.cpp new file mode 100644 index 00000000..21620343 --- /dev/null +++ b/apps/sample/trimesh_edge/trimesh_edge.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004-2009 \/)\/ * +* 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. * +* * +****************************************************************************/ + +#include +#include + +#include + +#include +#include + +#include +#include + +// input output +#include +#include + +// topology computation +#include + +// normals +#include +#include + +using namespace vcg; +using namespace std; + +class MyEdge; +class MyFace; +class MyVertex; +struct MyUsedTypes : public UsedTypes< Use ::AsVertexType, + Use ::AsEdgeType, + Use ::AsFaceType>{}; + +class MyVertex : public Vertex{}; +class MyFace : public Face< MyUsedTypes, face::FFAdj, face::VertexRef, face::BitFlags > {}; +class MyEdge : public Edge{}; +class MyMesh : public tri::TriMesh< vector, vector , vector > {}; + +int main( int argc, char **argv ) +{ + if(argc<2) + { + printf("Usage trimesh_base \n"); + return -1; + } + + MyMesh m,em; + + if(tri::io::ImporterPLY::Open(m,argv[1])!=0) + { + printf("Error reading file %s\n",argv[1]); + exit(0); + } + + tri::UpdateFlags::FaceBorderFromFF(m); + tri::UpdateNormals::PerVertexNormalized(m); + + printf("Input mesh vn:%i fn:%i\n",m.vn,m.fn); + printf( "Mesh has %i vert and %i faces\n", m.vn, m.fn ); + + Plane3f slicingPlane; + Point3f planeCenter = m.bbox.Center(); + slicingPlane.Init(planeCenter,Point3f(0,0,1)); + + vcg::IntersectionPlaneMesh(m, slicingPlane, em ); + tri::Clean::RemoveDuplicateVertex(em); + std::vector< std::vector > outlines; + std::vector outline; + vcg::tri::UpdateFlags::EdgeClearV(em); + int nv=0; + + tri::UpdateTopology::EdgeEdge(em); + + for(size_t i=0;iSetV(); + outline.push_back(curE->V(curI)->P()); + nextE=curE->EEp((curI+1)%2); + nextI=curE->EEi((curI+1)%2); + curE=nextE; + curI=nextI; + nv++; + } + while(curE != startE); + + outlines.push_back(outline); + printf("Found one outline of %i vertices\n\n",outline.size()); + + outline.clear(); + } + } + printf("Found %i outlines for a total of %i vertices",outlines.size(),nv); + + return 0; +} diff --git a/apps/sample/trimesh_edge/trimesh_edge.pro b/apps/sample/trimesh_edge/trimesh_edge.pro new file mode 100644 index 00000000..2c769917 --- /dev/null +++ b/apps/sample/trimesh_edge/trimesh_edge.pro @@ -0,0 +1,13 @@ +###################################################################### +# Automatically generated by qmake (2.00a) ven 24. giu 14:14:20 2005 +###################################################################### + +TARGET = trimesh_edge +DEPENDPATH += . +INCLUDEPATH += . ../../.. +CONFIG += console stl +TEMPLATE = app +SOURCES += trimesh_edge.cpp ../../../wrap/ply/plylib.cpp +HEADERS += ../../../vcg/complex/algorithms/update/topology.h +# Mac specific Config required to avoid to make application bundles +CONFIG -= app_bundle