general comment for metro files: modification to comply g++ compiler

This commit is contained in:
ganovelli 2004-05-11 14:39:17 +00:00
parent cfbe1314df
commit d6aec85fb0
4 changed files with 54 additions and 50 deletions

View File

@ -34,7 +34,7 @@
//#include <vcg/tools/plylib.h> //#include <vcg/tools/plylib.h>
#include <vcg/simplex/vertex/with/cmnq.h> #include <vcg/simplex/vertex/with/cmnq.h>
#include <vcg/simplex/face/with/rtfmfn.h> #include <vcg/simplex/face/with/rtfmfn.h>
#include <vcg/space/index/grid_static_obj.h> #include <vcg/space/index/grid_static_ptr.h>
#include <vcg/complex/trimesh/base.h> #include <vcg/complex/trimesh/base.h>
@ -46,9 +46,7 @@ using namespace std;
class MyEdge; class MyEdge;
class CFace; class CFace;
class CVertex : public VertexCMNQ< double,MyEdge,CFace > {}; class CVertex : public VertexCMNQ< double,MyEdge,CFace > {};
class CFace : public FaceRTFMFN< CVertex > {public: class CFace : public FaceRTFMFN< CVertex,MyEdge,CFace > {};
CFace*& F(const int j){ return (CFace*&) FaceRTFMFN<CVertex>::F(j);}
};
class CMesh : public tri::TriMesh< vector<CVertex>, vector<CFace> > {}; class CMesh : public tri::TriMesh< vector<CVertex>, vector<CFace> > {};
// ----------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------

View File

@ -36,7 +36,8 @@ bool SaveErrorAsColour = false;
inline char* GetExtension(char* filename) inline char* GetExtension(char* filename)
{ {
for(int i=strlen(filename)-1; i >= 0; i--) size_t i;
for( i=strlen(filename)-1; i >= 0; i--)
if(filename[i] == '.') if(filename[i] == '.')
break; break;
if(i > 0) if(i > 0)
@ -46,18 +47,18 @@ inline char* GetExtension(char* filename)
} }
void main(int argc, char**argv) int main(int argc, char**argv)
{ {
CMesh S1, S2; CMesh S1, S2;
double dist1_max, dist1_mean, dist1_RMS, volume_1; double dist1_max, dist1_mean, dist1_RMS, volume_1;
double dist2_max, dist2_mean, dist2_RMS, volume_2; double dist2_max, dist2_mean, dist2_RMS, volume_2;
double mesh_dist_max; double mesh_dist_max;
unsigned long n_samples_target, n_samples_output, elapsed_time; unsigned long n_samples_target, n_samples_output, elapsed_time;
double n_samples_per_area_unit; double n_samples_per_area_unit;
int flags, flags_fwd, flags_back, n_samples_area, n_samples_edge, n_samples_vertex, err; int flags, flags_fwd, flags_back, n_samples_area, n_samples_edge, n_samples_vertex, err;
char *fmt, *hist_filename, *new_mesh_filename, *new_mesh_filename_2; char *fmt, *hist_filename, *new_mesh_filename, *new_mesh_filename_2;
char fname_1[] = STR_NEW_MESH_FILENAME_DEFAULT, fname_2[] = STR_NEW_MESH_FILENAME_DEFAULT_2; char fname_1[] = STR_NEW_MESH_FILENAME_DEFAULT, fname_2[] = STR_NEW_MESH_FILENAME_DEFAULT_2;
FILE *fd; //FILE *fd;
// print program info // print program info
printf("-------------------------------\n" printf("-------------------------------\n"
@ -78,13 +79,13 @@ void main(int argc, char**argv)
printf(MSG_ERR_UNKNOWN_FORMAT, fmt); printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
exit(-1); exit(-1);
} }
if(!_stricmp(FILE_EXT_PLY, fmt)) if(!strcmp(FILE_EXT_PLY, fmt))
{ {
printf("reading the mesh `%s'...", argv[1]); printf("reading the mesh `%s'...", argv[1]);
err = tri::io::ImporterPLY<CMesh>::Open(S1,argv[1]); err = tri::io::ImporterPLY<CMesh>::Open(S1,argv[1]);
} }
/* else /* else
if(!_stricmp(FILE_EXT_SMF, fmt)) if(!strcmp(FILE_EXT_SMF, fmt))
{ {
printf("reading the mesh `%s'...", argv[1]); printf("reading the mesh `%s'...", argv[1]);
err = tri::io::ImporterSMF::Open(S1,argv[1]); err = tri::io::ImporterSMF::Open(S1,argv[1]);
@ -109,13 +110,13 @@ void main(int argc, char**argv)
printf(MSG_ERR_UNKNOWN_FORMAT, fmt); printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
exit(-1); exit(-1);
} }
if(!_stricmp(FILE_EXT_PLY, fmt)) if(!strcmp(FILE_EXT_PLY, fmt))
{ {
printf("reading the mesh `%s'...", argv[2]); printf("reading the mesh `%s'...", argv[2]);
err = tri::io::ImporterPLY<CMesh>::Open(S2,argv[2]); err = tri::io::ImporterPLY<CMesh>::Open(S2,argv[2]);
} }
/*else /*else
if(!_stricmp(FILE_EXT_SMF, fmt)) if(!strcmp(FILE_EXT_SMF, fmt))
{ {
printf("reading the mesh `%s'...", argv[2]); printf("reading the mesh `%s'...", argv[2]);
err = S2.Load_Smf(argv[2]); err = S2.Load_Smf(argv[2]);
@ -156,8 +157,8 @@ void main(int argc, char**argv)
exit(0); exit(0);
} }
break; break;
case CMD_LINE_ARG_N_SAMPLES : NumberOfSamples = true; n_samples_target = atoi(&(argv[i][2])); break; case CMD_LINE_ARG_N_SAMPLES : NumberOfSamples = true; n_samples_target = (unsigned long) atoi(&(argv[i][2])); break;
case CMD_LINE_ARG_SAMPLES_PER_AREA_UNIT : SamplesPerAreaUnit = true; n_samples_per_area_unit = (double) atof(&(argv[i][2])); break; case CMD_LINE_ARG_SAMPLES_PER_AREA_UNIT : SamplesPerAreaUnit = true; n_samples_per_area_unit = (unsigned long) atoi(&(argv[i][2])); break;
case CMD_LINE_ARG_SAVE_DISPLACEMENT : SaveErrorDisplacement = true; new_mesh_filename = &(argv[i][2]); case CMD_LINE_ARG_SAVE_DISPLACEMENT : SaveErrorDisplacement = true; new_mesh_filename = &(argv[i][2]);
if(new_mesh_filename[0] == '\0') if(new_mesh_filename[0] == '\0')
new_mesh_filename = fname_1; new_mesh_filename = fname_1;
@ -370,6 +371,7 @@ void main(int argc, char**argv)
//else //else
// if(flags_back & FLAG_SAVE_ERROR_AS_COLOUR) // if(flags_back & FLAG_SAVE_ERROR_AS_COLOUR)
// S2.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY)); // S2.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY));
return 0;
} }
// ----------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------

View File

@ -42,8 +42,12 @@
#include <math.h> #include <math.h>
#include <vcg/space/point3.h> #include <vcg/space/point3.h>
#include <vcg/space/box3.h>
#include <vcg/space/Point4.h> #include <vcg/space/Point4.h>
#include <vcg/math/base.h> #include <vcg/math/base.h>
#include <vcg/space/index/grid_static_ptr.h>
using namespace vcg; using namespace vcg;
@ -68,7 +72,7 @@ void MinDistPoint( MESH & mesh, const Point3<SCALAR> & p, GRID & gr, SCALAR & md
typedef Box3<SCALAR> Box3x; typedef Box3<SCALAR> Box3x;
if(!gr.bbox.IsIn(p)) return; if(!gr.bbox.IsIn(p)) return;
typedef GridStaticObj<typename MESH::FaceContainer>::Link A2UGridLink; typedef typename GridStaticPtr<typename MESH::FaceContainer>::Link A2UGridLink;
scalar ax = p[0] - gr.bbox.min[0]; // Real coodinate of point refer to scalar ax = p[0] - gr.bbox.min[0]; // Real coodinate of point refer to
scalar ay = p[1] - gr.bbox.min[1]; scalar ay = p[1] - gr.bbox.min[1];
scalar az = p[2] - gr.bbox.min[2]; scalar az = p[2] - gr.bbox.min[2];
@ -107,7 +111,7 @@ void MinDistPoint( MESH & mesh, const Point3<SCALAR> & p, GRID & gr, SCALAR & md
//scalar error = gr.bbox.Diag(); //scalar error = gr.bbox.Diag();
scalar error = mdist; scalar error = mdist;
Point3x q; Point3x q;
MESH::FaceIterator bestf = 0; typename MESH::FaceIterator bestf = (typename MESH::FaceIterator)0;
mesh.UnMarkAll(); mesh.UnMarkAll();
@ -129,7 +133,7 @@ void MinDistPoint( MESH & mesh, const Point3<SCALAR> & p, GRID & gr, SCALAR & md
{ {
bestq = q; bestq = q;
bestf = l->Elem(); bestf = l->Elem();
MESH::ScalarType alfa=1, beta=1, gamma=1; typename MESH::ScalarType alfa=1, beta=1, gamma=1;
//bestf->InterpolationParameters(q, alfa, beta); //bestf->InterpolationParameters(q, alfa, beta);
//calcolo normale con interpolazione trilineare //calcolo normale con interpolazione trilineare
@ -171,7 +175,7 @@ void MinDistPoint( MESH & mesh, const Point3<SCALAR> & p, GRID & gr, SCALAR & md
{ {
bestq = q; bestq = q;
bestf = l->Elem(); bestf = l->Elem();
MESH::ScalarType alfa, beta, gamma; typename MESH::ScalarType alfa, beta, gamma;
//bestf->InterpolationParameters(q, alfa, beta); //bestf->InterpolationParameters(q, alfa, beta);
//calcolo normale con interpolazione trilineare //calcolo normale con interpolazione trilineare
bestf->InterpolationParameters(q, alfa, beta, gamma); bestf->InterpolationParameters(q, alfa, beta, gamma);
@ -203,4 +207,4 @@ void MinDistPoint( MESH & mesh, const Point3<SCALAR> & p, GRID & gr, SCALAR & md
Point3<SCALAR> ip; Point3<SCALAR> ip;
MinDistPoint(mesh,p,gr,mdist,normf,bestq,f,ip); MinDistPoint(mesh,p,gr,mdist,normf,bestq,f,ip);
} }
#endif #endif

View File

@ -36,7 +36,7 @@
//#include <vcg/tools/Align/Hist.h> //#include <vcg/tools/Align/Hist.h>
#include <vcg/space/box3.h> #include <vcg/space/box3.h>
#include <vcg/space/color4.h> #include <vcg/space/color4.h>
#include <vcg/space/index/grid_static_obj.h> #include <vcg/space/index/grid_static_ptr.h>
using namespace vcg; using namespace vcg;
// ----------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------
@ -67,7 +67,7 @@ template <class MetroMesh>
class Sampling class Sampling
{ {
private: private:
typedef GridStaticObj< typename MetroMesh::FaceContainer > MetroMeshGrid; typedef GridStaticPtr< typename MetroMesh::FaceContainer > MetroMeshGrid;
typedef Point3<typename MetroMesh::ScalarType> Point3x; typedef Point3<typename MetroMesh::ScalarType> Point3x;
// data structures // data structures
@ -78,8 +78,8 @@ private:
// parameters // parameters
double dist_upper_bound; double dist_upper_bound;
double n_samples_per_area_unit; double n_samples_per_area_unit;
double n_samples_target; unsigned long n_samples_target;
int Flags; int Flags;
// results // results
@ -119,17 +119,17 @@ public :
double GetDistMean() {return mean_dist;} double GetDistMean() {return mean_dist;}
double GetDistRMS() {return RMS_dist;} double GetDistRMS() {return RMS_dist;}
double GetDistVolume() {return volume;} double GetDistVolume() {return volume;}
double GetNSamples() {return n_total_samples;} unsigned long GetNSamples() {return n_total_samples;}
double GetNAreaSamples() {return n_total_area_samples;} unsigned long GetNAreaSamples() {return n_total_area_samples;}
double GetNEdgeSamples() {return n_total_edge_samples;} unsigned long GetNEdgeSamples() {return n_total_edge_samples;}
double GetNVertexSamples() {return n_total_vertex_samples;} unsigned long GetNVertexSamples() {return n_total_vertex_samples;}
double GetNSamplesPerAreaUnit() {return n_samples_per_area_unit;} double GetNSamplesPerAreaUnit() {return n_samples_per_area_unit;}
double GetNSamplesTarget() {return n_samples_target;} unsigned long GetNSamplesTarget() {return n_samples_target;}
// Hist &GetHist() {return hist;} // Hist &GetHist() {return hist;}
void SetFlags(int flags) {Flags = flags;} void SetFlags(int flags) {Flags = flags;}
void ClearFlag(int flag) {Flags &= (flag ^ -1);} void ClearFlag(int flag) {Flags &= (flag ^ -1);}
void SetParam(double _n_samp) {n_samples_target = _n_samp;} void SetParam(double _n_samp) {n_samples_target = _n_samp;}
void SetSamplesTarget(int _n_samp); void SetSamplesTarget(unsigned long _n_samp);
void SetSamplesPerAreaUnit(double _n_samp); void SetSamplesPerAreaUnit(double _n_samp);
}; };
@ -146,17 +146,17 @@ Sampling<MetroMesh>::Sampling(MetroMesh &_s1, MetroMesh &_s2):S1(_s1),S2(_s2)
// set sampling parameters // set sampling parameters
template <class MetroMesh> template <class MetroMesh>
void Sampling<MetroMesh>::SetSamplesTarget(int _n_samp) void Sampling<MetroMesh>::SetSamplesTarget(unsigned long _n_samp)
{ {
n_samples_target = _n_samp; n_samples_target = _n_samp;
n_samples_per_area_unit = (double) n_samples_target / area_S1; n_samples_per_area_unit = n_samples_target / (double)area_S1;
} }
template <class MetroMesh> template <class MetroMesh>
void Sampling<MetroMesh>::SetSamplesPerAreaUnit(double _n_samp) void Sampling<MetroMesh>::SetSamplesPerAreaUnit(double _n_samp)
{ {
n_samples_per_area_unit = _n_samp; n_samples_per_area_unit = _n_samp;
n_samples_target = (int)((double) n_samples_per_area_unit * area_S1); n_samples_target = (unsigned long)((double) n_samples_per_area_unit * area_S1);
} }
@ -164,7 +164,7 @@ void Sampling<MetroMesh>::SetSamplesPerAreaUnit(double _n_samp)
template <class MetroMesh> template <class MetroMesh>
inline double Sampling<MetroMesh>::ComputeMeshArea(MetroMesh & mesh) inline double Sampling<MetroMesh>::ComputeMeshArea(MetroMesh & mesh)
{ {
MetroMesh::FaceIterator face; typename MetroMesh::FaceIterator face;
double area = 0.0; double area = 0.0;
for(face=mesh.face.begin(); face != mesh.face.end(); face++) for(face=mesh.face.begin(); face != mesh.face.end(); face++)
@ -177,9 +177,9 @@ inline double Sampling<MetroMesh>::ComputeMeshArea(MetroMesh & mesh)
template <class MetroMesh> template <class MetroMesh>
float Sampling<MetroMesh>::AddSample(const Point3x &p) float Sampling<MetroMesh>::AddSample(const Point3x &p)
{ {
MetroMesh::FaceType *f=0; typename MetroMesh::FaceType *f=0;
Point3x normf, bestq, ip; Point3x normf, bestq, ip;
MetroMesh::ScalarType dist; typename MetroMesh::ScalarType dist;
dist = dist_upper_bound; dist = dist_upper_bound;
@ -214,7 +214,7 @@ void Sampling<MetroMesh>::VertexSampling()
float error; float error;
printf("Vertex sampling\n"); printf("Vertex sampling\n");
MetroMesh::VertexIterator vi; typename MetroMesh::VertexIterator vi;
for(vi=S1.vert.begin();vi!=S1.vert.end();++vi) for(vi=S1.vert.begin();vi!=S1.vert.end();++vi)
{ {
error = AddSample((*vi).cP()); error = AddSample((*vi).cP());
@ -269,13 +269,13 @@ template <class MetroMesh>
void Sampling<MetroMesh>::EdgeSampling() void Sampling<MetroMesh>::EdgeSampling()
{ {
// Edge sampling. // Edge sampling.
typedef pair<typename MetroMesh::VertexPointer, typename MetroMesh::VertexPointer> pvv; typedef std::pair<typename MetroMesh::VertexPointer, typename MetroMesh::VertexPointer> pvv;
vector< pvv > Edges; std::vector< pvv > Edges;
printf("Edge sampling\n"); printf("Edge sampling\n");
// compute edge list. // compute edge list.
MetroMesh::FaceIterator fi; typename MetroMesh::FaceIterator fi;
for(fi=S1.face.begin(); fi != S1.face.end(); fi++) for(fi=S1.face.begin(); fi != S1.face.end(); fi++)
for(int i=0; i<3; ++i) for(int i=0; i<3; ++i)
{ {
@ -284,16 +284,16 @@ typedef pair<typename MetroMesh::VertexPointer, typename MetroMesh::VertexPointe
swap(Edges.back().first, Edges.back().second); swap(Edges.back().first, Edges.back().second);
} }
sort(Edges.begin(), Edges.end()); sort(Edges.begin(), Edges.end());
vector<pvv>::iterator edgeend = unique(Edges.begin(), Edges.end()); typename std::vector< pvv>::iterator edgeend = unique(Edges.begin(), Edges.end());
Edges.resize(edgeend-Edges.begin()); Edges.resize(edgeend-Edges.begin());
// sample edges. // sample edges.
vector<pvv>::iterator ei; std::vector<pvv>::iterator ei;
double n_samples_per_length_unit; double n_samples_per_length_unit;
double n_samples_decimal = 0.0; double n_samples_decimal = 0.0;
int cnt=0; int cnt=0;
if(Flags & FLAG_FACE_SAMPLING) if(Flags & FLAG_FACE_SAMPLING)
n_samples_per_length_unit = sqrt(n_samples_per_area_unit); n_samples_per_length_unit = sqrt((double)n_samples_per_area_unit);
else else
n_samples_per_length_unit = n_samples_per_area_unit; n_samples_per_length_unit = n_samples_per_area_unit;
for(ei=Edges.begin(); ei!=Edges.end(); ++ei) for(ei=Edges.begin(); ei!=Edges.end(); ++ei)
@ -349,7 +349,7 @@ void Sampling<MetroMesh>::MontecarloFaceSampling()
// Montecarlo sampling. // Montecarlo sampling.
int cnt = 0; int cnt = 0;
double n_samples_decimal = 0.0; double n_samples_decimal = 0.0;
MetroMesh::FaceIterator fi; typename MetroMesh::FaceIterator fi;
srand(clock()); srand(clock());
// printf("Montecarlo face sampling\n"); // printf("Montecarlo face sampling\n");
@ -425,7 +425,7 @@ void Sampling<MetroMesh>::SubdivFaceSampling()
// Subdivision sampling. // Subdivision sampling.
int cnt = 0, maxdepth; int cnt = 0, maxdepth;
double n_samples_decimal = 0.0; double n_samples_decimal = 0.0;
MetroMesh::FaceIterator fi; typename MetroMesh::FaceIterator fi;
printf("Subdivision face sampling\n"); printf("Subdivision face sampling\n");
for(fi=S1.face.begin(); fi != S1.face.end(); fi++) for(fi=S1.face.begin(); fi != S1.face.end(); fi++)
@ -436,7 +436,7 @@ void Sampling<MetroMesh>::SubdivFaceSampling()
if(n_samples) if(n_samples)
{ {
// face sampling. // face sampling.
maxdepth = (int)log((double)n_samples)/log(2.0); maxdepth = ((int)(log((double)n_samples)/log(2.0)));
n_samples = 0; n_samples = 0;
FaceSubdiv((*fi).V(0)->cP(), (*fi).V(1)->cP(), (*fi).V(2)->cP(), maxdepth); FaceSubdiv((*fi).V(0)->cP(), (*fi).V(1)->cP(), (*fi).V(2)->cP(), maxdepth);
} }
@ -474,7 +474,7 @@ void Sampling<MetroMesh>::SimilarFaceSampling()
// Similar Triangles sampling. // Similar Triangles sampling.
int cnt = 0, n_samples_per_edge; int cnt = 0, n_samples_per_edge;
double n_samples_decimal = 0.0; double n_samples_decimal = 0.0;
MetroMesh::FaceIterator fi; typename MetroMesh::FaceIterator fi;
printf("Similar Triangles face sampling\n"); printf("Similar Triangles face sampling\n");
for(fi=S1.face.begin(); fi != S1.face.end(); fi++) for(fi=S1.face.begin(); fi != S1.face.end(); fi++)
@ -505,7 +505,7 @@ void Sampling<MetroMesh>::SimilarFaceSampling()
template <class MetroMesh> template <class MetroMesh>
void Sampling<MetroMesh>::Hausdorff() void Sampling<MetroMesh>::Hausdorff()
{ {
Box3< MetroMesh::ScalarType> bbox; Box3< typename MetroMesh::ScalarType> bbox;
// set grid meshes. // set grid meshes.
gS2.SetBBox(S2.bbox); gS2.SetBBox(S2.bbox);
@ -551,7 +551,7 @@ void Sampling<MetroMesh>::Hausdorff()
// compute vertex colour // compute vertex colour
if(Flags & FLAG_SAVE_ERROR_AS_COLOUR) if(Flags & FLAG_SAVE_ERROR_AS_COLOUR)
{ {
MetroMesh::VertexIterator vi; typename MetroMesh::VertexIterator vi;
float error; float error;
int cnt = 0; int cnt = 0;
for(vi=S1.vert.begin();vi!=S1.vert.end();++vi) for(vi=S1.vert.begin();vi!=S1.vert.end();++vi)