From 642158fc32cfd239162b9626904a881173ccee18 Mon Sep 17 00:00:00 2001 From: cignoni Date: Tue, 7 Nov 2006 17:22:53 +0000 Subject: [PATCH] many gcc compiling issues --- vcg/math/disjoint_set.h | 24 ++++++++++++------- vcg/simplex/vertexplus/component_ocf.h | 11 +++++---- vcg/space/normal_extrapolation.h | 4 ++-- wrap/io_trimesh/export_dae.h | 22 ++++++++--------- wrap/io_trimesh/import_dae.h | 33 ++++++++++++++------------ wrap/io_trimesh/util_dae.h | 9 +++---- 6 files changed, 59 insertions(+), 44 deletions(-) diff --git a/vcg/math/disjoint_set.h b/vcg/math/disjoint_set.h index f0e10b34..33068ff1 100644 --- a/vcg/math/disjoint_set.h +++ b/vcg/math/disjoint_set.h @@ -78,13 +78,26 @@ namespace vcg typedef OBJECT_TYPE* ObjectPointer; typedef std::pair< ObjectPointer, int > hPair; -#ifdef __GNUC__ - typedef typename STDEXT::hash_map< /*ObjectPointer*/void*, int >::iterator hIterator; + + struct SimpleObjHashFunc{ + inline size_t operator ()(const ObjectPointer &p) const {return size_t(p);} + }; + +#ifdef _MSC_VER + STDEXT::hash_map< OBJECT_TYPE*, int > inserted_objects; + typedef typename STDEXT::hash_map< ObjectPointer, int >::iterator hIterator; #else - typedef typename STDEXT::hash_map< ObjectPointer, int >::iterator hIterator; + STDEXT::hash_map< OBJECT_TYPE*, int, SimpleObjHashFunc > inserted_objects; + typedef typename STDEXT::hash_map< ObjectPointer, int, SimpleObjHashFunc >::iterator hIterator; #endif + typedef std::pair< hIterator, bool > hInsertResult; + + + + + public: /*! * Default constructor @@ -146,11 +159,6 @@ namespace vcg } protected: -#ifdef __GNUC__ - STDEXT::hash_map< void*, int > inserted_objects; -#else - STDEXT::hash_map< OBJECT_TYPE*, int > inserted_objects; -#endif std::vector< DisjointSetNode > nodes; }; };// end of namespace vcg diff --git a/vcg/simplex/vertexplus/component_ocf.h b/vcg/simplex/vertexplus/component_ocf.h index 3f769cbc..137df2a7 100644 --- a/vcg/simplex/vertexplus/component_ocf.h +++ b/vcg/simplex/vertexplus/component_ocf.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.6 2006/11/07 15:13:57 zifnab1974 +Necessary changes for compilation with gcc 3.4.6. Especially the hash function is a problem + Revision 1.5 2006/11/07 11:29:24 cignoni Corrected some errors in the reflections Has*** functions @@ -277,11 +280,11 @@ public: namespace tri { - template < class VertType, class FaceContainerType > - bool HasPerVertexQuality (const TriMesh < vert::vector_ocf< VertType > , FaceContainerType > & m) + template < class VertexType, class FaceContainerType > + bool HasPerVertexQuality (const TriMesh < vert::vector_ocf< VertexType > , FaceContainerType > & m) { - if(VertType::HasQualityOcf()) return m.vert.IsQualityEnabled(); - else return VertType::HasQuality(); + if(VertexType::HasQualityOcf()) return m.vert.IsQualityEnabled(); + else return VertexType::HasQuality(); } } diff --git a/vcg/space/normal_extrapolation.h b/vcg/space/normal_extrapolation.h index ba1051b0..b795337a 100644 --- a/vcg/space/normal_extrapolation.h +++ b/vcg/space/normal_extrapolation.h @@ -171,7 +171,7 @@ namespace vcg // for each vertex *iter, compute the centroid as avarege of the k-nearest vertices of *iter Plane *plane = &tangent_planes[ std::distance(begin, iter) ]; - for (int n=0; ncenter += nearest_points[n]; plane->center /= float(k); @@ -179,7 +179,7 @@ namespace vcg MatrixType covariance_matrix; CoordType diff; covariance_matrix.SetZero(); - for (int n=0; ncenter; for (int i=0; i<3; i++) diff --git a/wrap/io_trimesh/export_dae.h b/wrap/io_trimesh/export_dae.h index bfe651e6..094a43e3 100644 --- a/wrap/io_trimesh/export_dae.h +++ b/wrap/io_trimesh/export_dae.h @@ -101,17 +101,17 @@ private: if(mask & vcg::tri::io::Mask::IOM_VERTCOLOR) arrc.reserve(5 * 4 * m.vert.size()); int nvert = 0; - for(SaveMeshType::VertexIterator it = m.vert.begin();it != m.vert.end();++it) + for(typename SaveMeshType::VertexIterator it = m.vert.begin();it != m.vert.end();++it) { if (!(it->IsD())) { - arrp.append(QString::number(it->P().X()).append(" ").append(QString::number(it->P().Y())).append(" ").append(QString::number(it->P().Z())).append(" ")); + arrp.append(QString::number(float(it->P().X())).append(" ").append(QString::number(float(it->P().Y()))).append(" ").append(QString::number(float(it->P().Z()))).append(" ")); if(mask & vcg::tri::io::Mask::IOM_VERTNORMAL) - arrn.append(QString::number(it->N().X()).append(" ").append(QString::number(it->N().Y())).append(" ").append(QString::number(it->N().Z())).append(" ")); + arrn.append(QString::number(float(it->N().X())).append(" ").append(QString::number(float(it->N().Y()))).append(" ").append(QString::number(float(it->N().Z()))).append(" ")); if(mask & vcg::tri::io::Mask::IOM_VERTTEXCOORD) - arrt.append(QString::number(it->T().u()).append(" ").append(QString::number(it->T().v())).append(" ")); + arrt.append(QString::number(float(it->T().u())).append(" ").append(QString::number(float(it->T().v()))).append(" ")); if(mask & vcg::tri::io::Mask::IOM_VERTCOLOR) - arrc.append(QString::number(it->C().X()).append(" ").append(QString::number(it->C().Y())).append(" ").append(QString::number(it->C().Z())).append(" ").append(QString::number(it->C().W())).append(" ")); + arrc.append(QString::number(float(it->C().X())).append(" ").append(QString::number(float(it->C().Y()))).append(" ").append(QString::number(float(it->C().Z()))).append(" ").append(QString::number(float(it->C().W()))).append(" ")); ++nvert; } } @@ -174,7 +174,7 @@ private: triangles_tess.reserve(nattr * 3 * 10 * m.face.size()); int wn = 0; int wt = 0; - for(SaveMeshType::FaceIterator itf = m.face.begin();itf != m.face.end();++itf) + for(typename SaveMeshType::FaceIterator itf = m.face.begin();itf != m.face.end();++itf) { if (!(itf->IsD())) { @@ -188,7 +188,7 @@ private: { triangles_tess.append(" ").append(QString::number(wn)); ++wn; - triangles_wn.append(QString::number((*itf).WN(ii).X()).append(" ").append(QString::number((*itf).WN(ii).Y())).append(" ").append(QString::number((*itf).WN(ii).Z())).append(" ")); + triangles_wn.append(QString::number(float((*itf).WN(ii).X())).append(" ").append(QString::number(float((*itf).WN(ii).Y()))).append(" ").append(QString::number(float((*itf).WN(ii).Z()))).append(" ")); } if (mask & MeshModel::IOM_WEDGTEXCOORD) @@ -335,7 +335,7 @@ public: /*QDomElement mshnode; mshnode.setTagName("mesh");*/ - removeChildNode(geolib.at(0),"geometry","id","vcg-mesh-lib"); + removeChildNode(geolib.at(0),QString("geometry"),QString("id"),QString("vcg-mesh-lib")); QDomElement geonode = info->doc->createElement("geometry"); geonode.setAttribute("id","vcg-mesh-lib"); geonode.setAttribute("name","vcg-mesh"); @@ -349,7 +349,7 @@ public: } else { - removeChildNode(scenelst,"instance_visual_scene"); + removeChildNodeList(scenelst,QString("instance_visual_scene")); for(int vsscn = 0;vsscn < scenelst.size();++vsscn) { QString url = scenelst.at(vsscn).toElement().attribute("url"); @@ -361,7 +361,7 @@ public: int vsscene_size = vsscene.size(); assert(vsscene.size() == 1); - removeChildNode(vsscene,"visual_scene","id","vcg-scene-node"); + removeChildNodeList(vsscene,QString("visual_scene"),QString("id"),QString("vcg-scene-node")); QDomElement vslnode = info->doc->createElement("visual_scene"); vslnode.setAttribute("id","vcg-scene-node"); vslnode.setAttribute("name","vcg-untitled"); @@ -380,7 +380,7 @@ public: QDomNodeList geolib = info->doc->elementsByTagName("library_geometries"); assert(geolib.size() == 1); - removeChildNode(geolib.at(0),"geometry","id","vcg-mesh-lib"); + removeChildNode(geolib.at(0),QString("geometry"),QString("id"),QString("vcg-mesh-lib")); QDomElement geonode = info->doc->createElement("geometry"); geonode.setAttribute("id","vcg-mesh-lib"); geonode.setAttribute("name","vcg-mesh"); diff --git a/wrap/io_trimesh/import_dae.h b/wrap/io_trimesh/import_dae.h index fbd7b423..faacca10 100644 --- a/wrap/io_trimesh/import_dae.h +++ b/wrap/io_trimesh/import_dae.h @@ -68,7 +68,8 @@ namespace io { if (!srcnodenorm.isNull()) { assert((ii * 3 < geosrcvertnorm.size()) && (ii * 3 + 1 < geosrcvertnorm.size()) && (ii * 3 + 2 < geosrcvertnorm.size())); - vcg::Matrix44f intr44 = vcg::Transpose(vcg::Inverse(t)); + vcg::Matrix44f intr44 = vcg::Inverse(t); + vcg::Transpose(intr44); Matrix33f intr33; for(unsigned int rr = 0; rr < 2; ++rr) { @@ -276,7 +277,7 @@ namespace io { info->doc = doc; //GetTexture(*(info->doc),inf); - QDomNodeList& scenes = info->doc->elementsByTagName("scene"); + QDomNodeList scenes = info->doc->elementsByTagName("scene"); int scn_size = scenes.size(); if (scn_size == 0) return E_NO3DSCENE; @@ -286,7 +287,7 @@ namespace io { //for each scene in COLLADA FILE for(int scn = 0;scn < scn_size;++scn) { - QDomNodeList& instscenes = scenes.at(scn).toElement().elementsByTagName("instance_visual_scene"); + QDomNodeList instscenes = scenes.at(scn).toElement().elementsByTagName("instance_visual_scene"); int instscn_size = instscenes.size(); if (instscn_size == 0) return E_INCOMPATIBLECOLLADA141FORMAT; @@ -302,19 +303,19 @@ namespace io { return E_UNREFERENCEBLEDCOLLADAATTRIBUTE; //for each node in the libscn_url visual scene - QDomNodeList& visscn_child = visscn.childNodes(); + QDomNodeList visscn_child = visscn.childNodes(); //for each direct child of a libscn_url visual scene find if there is some geometry instance int problem = 0; for(int chdind = 0; chdind < visscn_child.size();++chdind) { - QDomNodeList& geoinst = visscn_child.at(chdind).toElement().elementsByTagName("instance_geometry"); + QDomNodeList geoinst = visscn_child.at(chdind).toElement().elementsByTagName("instance_geometry"); int geoinst_size = geoinst.size(); if (geoinst_size != 0) { geoinst_found |= true; - QDomNodeList& geolib = info->doc->elementsByTagName("library_geometries"); + QDomNodeList geolib = info->doc->elementsByTagName("library_geometries"); int geolib_size = geolib.size(); assert(geolib_size == 1); //!!!!!!!!!!!!!!!!!here will be the code for geometry transformations!!!!!!!!!!!!!!!!!!!!!! @@ -340,10 +341,10 @@ namespace io { if (!geoinst_found) { - QDomNodeList& geolib = info->doc->elementsByTagName("library_geometries"); + QDomNodeList geolib = info->doc->elementsByTagName("library_geometries"); int geolib_size = geolib.size(); assert(geolib_size == 1); - QDomNodeList& geochild = geolib.at(0).childNodes(); + QDomNodeList geochild = geolib.at(0).childNodes(); int geochild_size = geochild.size(); int problem = 0; for(int chd = 0;chd < geochild_size;++chd) @@ -385,7 +386,7 @@ namespace io { info->doc = doc; GetTexture(*(info->doc),inf); - QDomNodeList& scenes = info->doc->elementsByTagName("scene"); + QDomNodeList scenes = info->doc->elementsByTagName("scene"); int scn_size = scenes.size(); @@ -394,7 +395,7 @@ namespace io { //for each scene in COLLADA FILE for(int scn = 0;scn < scn_size;++scn) { - QDomNodeList& instscenes = scenes.at(scn).toElement().elementsByTagName("instance_visual_scene"); + QDomNodeList instscenes = scenes.at(scn).toElement().elementsByTagName("instance_visual_scene"); int instscn_size = instscenes.size(); if (instscn_size == 0) return false; @@ -410,19 +411,21 @@ namespace io { return false; //for each node in the libscn_url visual scene - QDomNodeList& visscn_child = visscn.childNodes(); + //QDomNodeList& visscn_child = visscn.childNodes(); + QDomNodeList visscn_child = visscn.childNodes(); //for each direct child of a libscn_url visual scene find if there is some geometry instance int problem = 0; for(int chdind = 0; chdind < visscn_child.size();++chdind) { - QDomNodeList& geoinst = visscn_child.at(chdind).toElement().elementsByTagName("instance_geometry"); + //QDomNodeList& geoinst = visscn_child.at(chdind).toElement().elementsByTagName("instance_geometry"); + QDomNodeList geoinst = visscn_child.at(chdind).toElement().elementsByTagName("instance_geometry"); int geoinst_size = geoinst.size(); if (geoinst_size != 0) { geoinst_found |= true; - QDomNodeList& geolib = info->doc->elementsByTagName("library_geometries"); + QDomNodeList geolib = info->doc->elementsByTagName("library_geometries"); int geolib_size = geolib.size(); assert(geolib_size == 1); //!!!!!!!!!!!!!!!!!here will be the code for geometry transformations!!!!!!!!!!!!!!!!!!!!!! @@ -480,10 +483,10 @@ namespace io { if (!geoinst_found) { - QDomNodeList& geolib = info->doc->elementsByTagName("library_geometries"); + QDomNodeList geolib = info->doc->elementsByTagName("library_geometries"); int geolib_size = geolib.size(); assert(geolib_size == 1); - QDomNodeList& geochild = geolib.at(0).toElement().elementsByTagName("geometry"); + QDomNodeList geochild = geolib.at(0).toElement().elementsByTagName("geometry"); //!!!!!!!!!!!!!!!!!here will be the code for geometry transformations!!!!!!!!!!!!!!!!!!!!!! info->numvert = 0; info->numface = 0; diff --git a/wrap/io_trimesh/util_dae.h b/wrap/io_trimesh/util_dae.h index 2bb3774e..f791473c 100644 --- a/wrap/io_trimesh/util_dae.h +++ b/wrap/io_trimesh/util_dae.h @@ -161,7 +161,7 @@ namespace io { } - inline static bool removeChildNode(QDomNodeList& nodelst,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") + inline static bool removeChildNodeList(QDomNodeList& nodelst,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") { for(int jj = 0;jj < nodelst.size();++jj) { @@ -170,12 +170,13 @@ namespace io { return true; } - inline static bool removeChildNode(QDomNode& node,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") + /* inline static bool removeChildNode(QDomNode& node,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") { return removeChildNode((QDomDocument&) node.toElement(),tag,attribname,attribvalue); - } + }*/ - inline static bool removeChildNode(QDomDocument& node,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") + //inline static bool removeChildNode(QDomDocument& node,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") + inline static bool removeChildNode(QDomNode node,const QString& tag = "", const QString& attribname = "", const QString& attribvalue = "") { QDomNodeList clst = node.childNodes(); for(int ii = 0;ii < clst.size();++ii)