fixed bugs and compilation errors in nanoply

This commit is contained in:
Luigi Malomo 2020-01-17 10:54:37 +01:00
parent 252a67539b
commit 87f8ba9b33
3 changed files with 122 additions and 111 deletions

View File

@ -256,7 +256,7 @@ namespace nanoply
/* Names used for the PlyElement */
static ElementMap mapElem({
{ PlyElemEntity::NNP_UNKNOWN_ELEM, NameVector({ "unknonw" }) },
{ PlyElemEntity::NNP_UNKNOWN_ELEM, NameVector({ "unknown" }) },
{ PlyElemEntity::NNP_VERTEX_ELEM, NameVector({ "vertex" }) },
{ PlyElemEntity::NNP_EDGE_ELEM, NameVector({ "edge" }) },
{ PlyElemEntity::NNP_FACE_ELEM, NameVector({ "face" }) },
@ -594,7 +594,7 @@ namespace nanoply
* @param _t Property type.
* @param _e Property entity.
*/
inline PlyProperty(PlyType _t, PlyEntity _e) :type(_t), elem(_e), name(PlyPropertyName(_e)[0]), validToWrite(false){}
inline PlyProperty(PlyType _t, PlyEntity _e) : name(PlyPropertyName(_e)[0]), type(_t), elem(_e), validToWrite(false){}
/**
* Constructor that sets the type, the entity and the name of a standard PLY property.
@ -603,7 +603,7 @@ namespace nanoply
* @param _e Property entity.
* @param _n Property name.
*/
inline PlyProperty(PlyType _t, PlyEntity _e, std::string _n) :type(_t), elem(_e), name(_n), validToWrite(false){}
inline PlyProperty(PlyType _t, PlyEntity _e, std::string _n) : name(_n), type(_t), elem(_e), validToWrite(false){}
/**
* Constructor that sets the type and the name of a custom PLY property.
@ -611,7 +611,7 @@ namespace nanoply
* @param _t Property type.
* @param _n Property name.
*/
inline PlyProperty(PlyType _t, std::string _n) :type(_t), elem(PlyEntity::NNP_UNKNOWN_ENTITY), name(_n), validToWrite(false){}
inline PlyProperty(PlyType _t, std::string _n) :name(_n), type(_t), elem(PlyEntity::NNP_UNKNOWN_ENTITY), validToWrite(false){}
/**
* Get the description string of the property entity.
@ -947,6 +947,7 @@ namespace nanoply
delete[] temp;
break;
}
default: assert(0);
}
return true;
}
@ -1036,7 +1037,7 @@ namespace nanoply
v.push_back(name);
}
for (int i = 0; i < v.size(); i++)
for (size_t i = 0; i < v.size(); i++)
{
std::stringstream s;
s << "property " << type << " " << v[i] << "\n";
@ -1255,7 +1256,7 @@ namespace nanoply
temp << "element " << name << " " << cnt << "\n";
if (file.WriteHeaderLine(temp.str()))
{
for (int i = 0; i < propVec.size(); i++)
for (size_t i = 0; i < propVec.size(); i++)
ok = propVec[i].WriteHeader(file);
}
else
@ -1266,8 +1267,8 @@ namespace nanoply
inline bool PlyElement::SkipAsciiElementsInFile(PlyFile &file)
{
for (int i = 0; i < this->cnt; ++i)
for (int j = 0; j < this->propVec.size(); ++j)
for (size_t i = 0; i < this->cnt; ++i)
for (size_t j = 0; j < this->propVec.size(); ++j)
this->propVec[j].SkipAsciiPropertyInFile(file);
return true;
}
@ -1275,8 +1276,8 @@ namespace nanoply
inline bool PlyElement::SkipBinaryElementsInFile(PlyFile &file)
{
for (int i = 0; i < this->cnt; ++i)
for (int j = 0; j < this->propVec.size(); ++j)
for (size_t i = 0; i < this->cnt; ++i)
for (size_t j = 0; j < this->propVec.size(); ++j)
this->propVec[j].SkipBinaryPropertyInFile(file);
return true;
}
@ -1357,7 +1358,7 @@ namespace nanoply
inline bool PlyElement::Contains(PlyEntity entity)
{
for (int i = 0; i < propVec.size(); i++)
for (size_t i = 0; i < propVec.size(); i++)
{
if (propVec[i].elem == entity)
return true;
@ -1615,9 +1616,9 @@ namespace nanoply
else
ok = file.WriteHeaderLine(std::string("format ascii 1.0\n"));
ok = file.WriteHeaderLine(std::string("comment nanoply generated\n"));
for (int i = 0; i < this->textureFile.size(); i++)
for (size_t i = 0; i < this->textureFile.size(); i++)
ok = file.WriteHeaderLine(std::string("comment TextureFile ") + this->textureFile[i] + "\n");
for (int i = 0; i < this->elemVec.size(); i++)
for (size_t i = 0; i < this->elemVec.size(); i++)
ok = this->elemVec[i].WriteHeader(file);
ok = file.WriteHeaderLine(std::string("end_header\n"));
return ok;
@ -1668,7 +1669,7 @@ namespace nanoply
inline PlyElement* Info::GetElement(const std::string& name)
{
for (int i = 0; i < elemVec.size(); i++)
for (size_t i = 0; i < elemVec.size(); i++)
{
if (elemVec[i].name == name)
return &elemVec[i];
@ -1679,7 +1680,7 @@ namespace nanoply
inline PlyElement* Info::GetElement(PlyElemEntity e)
{
for (int i = 0; i < elemVec.size(); i++)
for (size_t i = 0; i < elemVec.size(); i++)
{
if (elemVec[i].plyElem == e)
return &elemVec[i];
@ -1872,10 +1873,10 @@ namespace nanoply
inline void ElementDescriptor::ExtractDescriptor(PropertyDescriptor& descr, PlyElement &elem)
{
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
PlyProperty& prop = elem.propVec[j];
int i = 0;
size_t i = 0;
for (; i < dataDescriptor.size(); i++)
{
if (dataDescriptor[i]->elem == prop.elem)
@ -1915,9 +1916,9 @@ namespace nanoply
{
PropertyDescriptor descr;
ExtractDescriptor(descr, elem);
for (int i = 0; i < elem.cnt; i++)
for (size_t i = 0; i < elem.cnt; i++)
{
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
PlyProperty& prop = elem.propVec[j];
if (descr[j] != NULL)
@ -1934,9 +1935,9 @@ namespace nanoply
{
PropertyDescriptor descr;
ExtractDescriptor(descr, elem);
for (int i = 0; i < elem.cnt; i++)
for (size_t i = 0; i < elem.cnt; i++)
{
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
PlyProperty& prop = elem.propVec[j];
if (descr[j] != NULL)
@ -1952,9 +1953,9 @@ namespace nanoply
{
PropertyDescriptor descr;
ExtractDescriptor(descr, elem);
for (int i = 0; i < elem.cnt; i++)
for (size_t i = 0; i < elem.cnt; i++)
{
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
if (descr[j] != NULL)
(*descr[j]).WriteElemBinary(file, elem.propVec[j], fixEndian);
@ -1967,10 +1968,10 @@ namespace nanoply
{
PropertyDescriptor descr;
ExtractDescriptor(descr, elem);
for (int i = 0; i < elem.cnt; i++)
for (size_t i = 0; i < elem.cnt; i++)
{
bool first = true;
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
if (descr[j] != NULL)
{
@ -1997,7 +1998,7 @@ namespace nanoply
elem.validToWrite = true;
PropertyDescriptor descr;
ExtractDescriptor(descr, elem);
for (int j = 0; j < elem.propVec.size(); j++)
for (size_t j = 0; j < elem.propVec.size(); j++)
{
if (descr[j] != NULL)
elem.propVec[j].validToWrite = true;
@ -2267,7 +2268,7 @@ namespace nanoply
std::vector<C> data(count);
for (int i = 0; i < std::min(count, list->size()); i++)
for (size_t i = 0; i < std::min(count, list->size()); i++)
data[i] = (C)((*list)[i]);
if (sizeof(C) > 1 && fixEndian)
@ -2275,7 +2276,7 @@ namespace nanoply
file.WriteBinaryData(data.data(), sizeof(C)*std::min(count, list->size()));
C temp = 0;
for (int i = 0; i < (count - list->size()); i++)
for (size_t i = 0; i < (count - list->size()); i++)
file.WriteBinaryData(&temp, sizeof(C));
++(descr.curPos);
}
@ -2303,13 +2304,13 @@ namespace nanoply
}
std::vector<C> data(count);
for (int i = 0; i < std::min(count, list->size()); i++)
for (size_t i = 0; i < std::min(count, list->size()); i++)
data[i] = (C)((*list)[i]);
for (int i = 0; i < (count - list->size()); i++)
for (size_t i = 0; i < (count - list->size()); i++)
data[i] = 0;
for (int i = 0; i < count; i++)
for (size_t i = 0; i < count; i++)
{
file.WriteAsciiData(data[i]);
if (i < count - 1)
@ -2617,10 +2618,10 @@ namespace nanoply
if (info.binary)
{
for (int i = 0; i < info.elemVec.size(); ++i)
for (size_t i = 0; i < info.elemVec.size(); ++i)
{
PlyElement& pe = info.elemVec[i];
int j = 0;
size_t j = 0;
for (; j < meshElements.size(); j++)
if (ElemProcessing<0>(*meshElements[j], pe, file, fixEndian))
break;
@ -2632,10 +2633,10 @@ namespace nanoply
}
else
{
for (int i = 0; i < info.elemVec.size(); ++i)
for (size_t i = 0; i < info.elemVec.size(); ++i)
{
PlyElement& pe = info.elemVec[i];
int j = 0;
size_t j = 0;
for (; j < meshElements.size(); j++)
if (ElemProcessing<1>(*meshElements[j], pe, file, false))
break;
@ -2665,10 +2666,10 @@ namespace nanoply
info.errInfo = NNP_UNABLE_TO_OPEN;
return false;
}
for (int i = 0; i < info.elemVec.size(); ++i)
for (size_t i = 0; i < info.elemVec.size(); ++i)
{
PlyElement& pe = info.elemVec[i];
for (int j = 0; j < meshElements.size(); j++)
for (size_t j = 0; j < meshElements.size(); j++)
if (ElemProcessing<4>(*meshElements[j], pe, file, false))
break;
}
@ -2687,12 +2688,12 @@ namespace nanoply
if (info.binary)
{
for (int i = 0; i < info.elemVec.size(); ++i)
for (size_t i = 0; i < info.elemVec.size(); ++i)
{
PlyElement& pe = info.elemVec[i];
if (pe.validToWrite)
{
for (int j = 0; j < meshElements.size(); j++)
for (size_t j = 0; j < meshElements.size(); j++)
if (ElemProcessing<2>(*meshElements[j], pe, file, false))
break;
}
@ -2700,12 +2701,12 @@ namespace nanoply
}
else
{
for (int i = 0; i < info.elemVec.size(); ++i)
for (size_t i = 0; i < info.elemVec.size(); ++i)
{
PlyElement& pe = info.elemVec[i];
if (pe.validToWrite)
{
for (int j = 0; j < meshElements.size(); j++)
for (size_t j = 0; j < meshElements.size(); j++)
if (ElemProcessing<3>(*meshElements[j], pe, file, false))
break;
}
@ -2732,6 +2733,7 @@ namespace nanoply
template < typename TupleType, size_t N, size_t ActionType>
inline bool TupleForEach(TupleType &tuple, PlyElement &elem, PlyFile& file, bool fixEndian, SizeT<N> t, SizeT<ActionType> a)
{
(void)t;
typename std::tuple_element<N - 1, TupleType>::type &elemDescr = std::get<N - 1>(tuple);
if ((elemDescr.elem != PlyElemEntity::NNP_UNKNOWN_ELEM && elemDescr.elem == elem.plyElem) ||
(elemDescr.elem == PlyElemEntity::NNP_UNKNOWN_ELEM && elemDescr.name == elem.name))

View File

@ -16,6 +16,7 @@
#define NANOPLY_WRAPPER_VCG_H
#include <wrap/nanoply/include/nanoply.hpp>
#include <vcg/complex/complex.h>
#include <vcg/space/point.h>
#include <map>
@ -74,7 +75,7 @@ namespace nanoply
typedef typename MeshType::FaceIterator FaceIterator;
template<class T> static PlyType getEntity() { return NNP_UNKNOWN_TYPE };
template<class T> static PlyType getEntity() { return NNP_UNKNOWN_TYPE; };
template<> static PlyType getEntity<unsigned char>(){ return NNP_UINT8; };
template<> static PlyType getEntity<char>(){ return NNP_INT8; };
template<> static PlyType getEntity<unsigned short>(){ return NNP_UINT16; };
@ -114,7 +115,7 @@ namespace nanoply
template<class Container, class Type, int n>
inline static void PushDescriport(std::vector<PlyProperty>& prop, ElementDescriptor& elem, std::string& name, void* ptr)
inline static void PushDescriport(std::vector<PlyProperty>& prop, ElementDescriptor& elem, const std::string& name, void* ptr)
{
prop.push_back(PlyProperty(getEntity<Type>(), name));
DescriptorInterface* di = new DataDescriptor<Container, n, Type>(name, ptr);
@ -123,7 +124,7 @@ namespace nanoply
template<class Container, class Type, int n>
inline static void PushDescriportList(std::vector<PlyProperty>& prop, ElementDescriptor& elem, std::string& name, void* ptr)
inline static void PushDescriportList(std::vector<PlyProperty>& prop, ElementDescriptor& elem, const std::string& name, void* ptr)
{
prop.push_back(PlyProperty(getEntityList<Type>(), name));
DescriptorInterface* di = new DataDescriptor<Container, n, Type>(name, ptr);
@ -201,17 +202,17 @@ namespace nanoply
std::map<std::string, int> meshAttribCnt;
CustomAttributeDescriptor::~CustomAttributeDescriptor()
~CustomAttributeDescriptor()
{
for (int i = 0; i < vertexAttrib.size(); i++)
for (size_t i = 0; i < vertexAttrib.size(); i++)
delete vertexAttrib[i];
for (int i = 0; i < edgeAttrib.size(); i++)
for (size_t i = 0; i < edgeAttrib.size(); i++)
delete edgeAttrib[i];
for (int i = 0; i < faceAttrib.size(); i++)
for (size_t i = 0; i < faceAttrib.size(); i++)
delete faceAttrib[i];
CustomAttributeDescriptor::MapMeshAttribIter iter = meshAttrib.begin();
for (; iter != meshAttrib.end(); iter++)
for (int i = 0; i < (*iter).second.size(); i++)
for (size_t i = 0; i < (*iter).second.size(); i++)
delete (*iter).second[i];
}
@ -235,13 +236,13 @@ namespace nanoply
}
template<class Container, class Type, int n>
void AddMeshAttribDescriptor(const std::string& nameAttrib, std::string& nameProp, PlyType type, void* ptr)
void AddMeshAttribDescriptor(const std::string& nameAttrib, const std::string& nameProp, PlyType type, void* ptr)
{
meshAttrib[nameAttrib].push_back(new DataDescriptor<Container, n, Type>(nameProp, ptr));
meshAttribProp[nameAttrib].push_back(PlyProperty(type, nameProp));
}
void AddMeshAttrib(std::string& name, int cnt)
void AddMeshAttrib(const std::string& name, int cnt)
{
meshAttribCnt[name] = cnt;
}
@ -251,7 +252,7 @@ namespace nanoply
nanoply::Info info(filename);
if (info.errInfo == nanoply::NNP_OK)
{
for (int i = 0; i < info.elemVec.size(); i++)
for (size_t i = 0; i < info.elemVec.size(); i++)
{
if (info.elemVec[i].plyElem == NNP_UNKNOWN_ELEM && info.elemVec[i].name != "camera")
meshAttribCnt[info.elemVec[i].name] = info.elemVec[i].cnt;
@ -281,12 +282,12 @@ namespace nanoply
bool AddEdgeAttrib(MeshType& m, std::set<PointerToAttribute>& ptrAttrib, PlyElement* elem)
{
return AddCustomAttrib<1>(m, ptrAttrib, elem, vertexAttrib);
return AddCustomAttrib<1>(m, ptrAttrib, elem, edgeAttrib);
}
bool AddFaceAttrib(MeshType& m, std::set<PointerToAttribute>& ptrAttrib, PlyElement* elem)
{
return AddCustomAttrib<2>(m, ptrAttrib, elem, vertexAttrib);
return AddCustomAttrib<2>(m, ptrAttrib, elem, faceAttrib);
}
@ -315,7 +316,7 @@ namespace nanoply
template<class Container>
void AddPointAttribDescriptor(const PointerToAttribute* ptr, ElementDescriptor::PropertyDescriptor& attrib, std::vector<PlyProperty>& attribProp)
{
int size = typename Container::Dimension;
int size = int(Container::Dimension);
std::string name(ptr->_name);
Container* tmpPtr = (Container*)ptr->_handle->DataBegin();
for (int i = 0 ; i < size; i++)
@ -325,7 +326,7 @@ namespace nanoply
template<class Container>
void AddColorAttribDescriptor(const PointerToAttribute* ptr, ElementDescriptor::PropertyDescriptor& attrib, std::vector<PlyProperty>& attribProp)
{
int size = typename Container::Dimension;
int size = int(Container::Dimension);
std::string name(ptr->_name);
Container* tmpPtr = (Container*)ptr->_handle->DataBegin();
for (int i = 0; i < size; i++)
@ -415,17 +416,17 @@ namespace nanoply
{
if (ActionType == 0) //vertex
{
auto h = vcg::tri::Allocator<MeshType>::GetPerVertexAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerVertexAttribute<Container>(m, name);
AddVertexAttribDescriptor<Container, Container, 1>(name, type, h._handle->DataBegin());
}
else if (ActionType == 1) //Edge
{
auto h = vcg::tri::Allocator<MeshType>::GetPerEdgeAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerEdgeAttribute<Container>(m, name);
AddEdgeAttribDescriptor<Container, Container, 1>(name, type, h._handle->DataBegin());
}
else if (ActionType == 2) //Face
{
auto h = vcg::tri::Allocator<MeshType>::GetPerFaceAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerFaceAttribute<Container>(m, name);
AddFaceAttribDescriptor<Container, Container, 1>(name, type, h._handle->DataBegin());
}
}
@ -435,20 +436,20 @@ namespace nanoply
{
if (ActionType == 0) //vertex
{
auto h = vcg::tri::Allocator<MeshType>::GetPerVertexAttribute<Container>(m, name);
for (int i = 0; i < prop.size(); i++)
auto h = vcg::tri::Allocator<MeshType>::template GetPerVertexAttribute<Container>(m, name);
for (size_t i = 0; i < prop.size(); i++)
AddVertexAttribDescriptor<Container, typename Container::ScalarType, 1>(prop[i].name, prop[i].type, &h[0][i]);
}
else if (ActionType == 1) //Edge
{
auto h = vcg::tri::Allocator<MeshType>::GetPerEdgeAttribute<Container>(m, name);
for (int i = 0; i < prop.size(); i++)
auto h = vcg::tri::Allocator<MeshType>::template GetPerEdgeAttribute<Container>(m, name);
for (size_t i = 0; i < prop.size(); i++)
AddEdgeAttribDescriptor<Container, typename Container::ScalarType, 1>(prop[i].name, prop[i].type, &h[0][i]);
}
else if (ActionType == 2) //Face
{
auto h = vcg::tri::Allocator<MeshType>::GetPerFaceAttribute<Container>(m, name);
for (int i = 0; i < prop.size(); i++)
auto h = vcg::tri::Allocator<MeshType>::template GetPerFaceAttribute<Container>(m, name);
for (size_t i = 0; i < prop.size(); i++)
AddFaceAttribDescriptor<Container, typename Container::ScalarType, 1>(prop[i].name, prop[i].type, &h[0][i]);
}
}
@ -459,17 +460,17 @@ namespace nanoply
{
if (ActionType == 0) //vertex
{
auto h = vcg::tri::Allocator<MeshType>::GetPerVertexAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerVertexAttribute<Container>(m, name);
AddVertexAttribDescriptor<Container, Type, 0>(name, type, h._handle->DataBegin());
}
else if (ActionType == 1) //Edge
{
auto h = vcg::tri::Allocator<MeshType>::GetPerEdgeAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerEdgeAttribute<Container>(m, name);
AddEdgeAttribDescriptor<Container, Type, 0>(name, type, h._handle->DataBegin());
}
else if (ActionType == 2) //Face
{
auto h = vcg::tri::Allocator<MeshType>::GetPerFaceAttribute<Container>(m, name);
auto h = vcg::tri::Allocator<MeshType>::template GetPerFaceAttribute<Container>(m, name);
AddFaceAttribDescriptor<Container, Type, 0>(name, type, h._handle->DataBegin());
}
}
@ -480,11 +481,11 @@ namespace nanoply
{
//Custom attribute with already a data descriptor
std::set<std::string> validCustomAttrib;
for (int i = 0; i < attrib.size(); i++)
for (size_t i = 0; i < attrib.size(); i++)
{
if (attrib[i]->base == NULL)
{
std::set<PointerToAttribute>::iterator ai;
typename std::set<PointerToAttribute>::iterator ai;
for (ai = ptrAttrib.begin(); ai != ptrAttrib.end(); ++ai)
{
if (attrib[i]->name == (*ai)._name)
@ -501,7 +502,7 @@ namespace nanoply
//Get custom properties without a data descriptor
std::map<std::string, std::pair<std::vector<PlyProperty>, int>> customAttribName;
std::vector<std::string> attribName((*elem).propVec.size());
for (int i = 0; i < (*elem).propVec.size(); i++)
for (size_t i = 0; i < (*elem).propVec.size(); i++)
{
if ((*elem).propVec[i].elem == NNP_UNKNOWN_ENTITY)
{
@ -534,7 +535,7 @@ namespace nanoply
unsigned int bitType = 0;
std::vector<PlyProperty> tempProp((*mapIter).second.first.size());
int checkMask = (1 << (*mapIter).second.first.size()) - 1;
for (int i = 0; i < (*mapIter).second.first.size(); i++)
for (size_t i = 0; i < (*mapIter).second.first.size(); i++)
{
PlyProperty& p = (*mapIter).second.first[i];
bitType |= p.type;
@ -567,6 +568,7 @@ namespace nanoply
case NNP_UINT8: AddPointAttrib<ActionType, vcg::Point2<unsigned char>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT16: AddPointAttrib<ActionType, vcg::Point2<unsigned short>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT32: AddPointAttrib<ActionType, vcg::Point2<unsigned int>>(m, (*mapIter).first, tempProp); break;
default: assert(0);
}
}
else if (tempProp.size() == 3)
@ -581,6 +583,7 @@ namespace nanoply
case NNP_UINT8: AddPointAttrib<ActionType, vcg::Point3<unsigned char>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT16: AddPointAttrib<ActionType, vcg::Point3<unsigned short>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT32: AddPointAttrib<ActionType, vcg::Point3<unsigned int>>(m, (*mapIter).first, tempProp); break;
default: assert(0);
}
}
else if (tempProp.size() == 4 && (*mapIter).second.second != (checkMask << 4))
@ -595,6 +598,7 @@ namespace nanoply
case NNP_UINT8: AddPointAttrib<ActionType, vcg::Point4<unsigned char>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT16: AddPointAttrib<ActionType, vcg::Point4<unsigned short>>(m, (*mapIter).first, tempProp); break;
case NNP_UINT32: AddPointAttrib<ActionType, vcg::Point4<unsigned int>>(m, (*mapIter).first, tempProp); break;
default: assert(0);
}
}
else if (tempProp.size() == 4)
@ -609,12 +613,13 @@ namespace nanoply
case NNP_FLOAT32: AddPointAttrib<ActionType, vcg::Color4f>(m, (*mapIter).first, tempProp); break;
case NNP_FLOAT64: AddPointAttrib<ActionType, vcg::Color4d>(m, (*mapIter).first, tempProp); break;
case NNP_UINT8: AddPointAttrib<ActionType, vcg::Color4b>(m, (*mapIter).first, tempProp); break;
default: assert(0);
}
}
}
else
{
for (int i = 0; i < tempProp.size(); i++)
for (size_t i = 0; i < tempProp.size(); i++)
{
switch (tempProp[i].type)
{
@ -642,6 +647,7 @@ namespace nanoply
case NNP_LIST_INT8_UINT16: AddListAttrib<ActionType, std::vector<unsigned short>, unsigned short>(m, tempProp[i].name, tempProp[i].type); break;
case NNP_LIST_UINT8_INT16:
case NNP_LIST_INT8_INT16: AddListAttrib<ActionType, std::vector<short>, short>(m, tempProp[i].name, tempProp[i].type); break;
default: assert(0);
}
}
}
@ -828,12 +834,12 @@ namespace nanoply
static unsigned int GetFileBitMask(nanoply::Info& info)
{
unsigned int mask = 0;
for (int j = 0; j < info.elemVec.size(); j++)
for (size_t j = 0; j < info.elemVec.size(); j++)
{
PlyElement& elem = info.elemVec[j];
if (elem.plyElem == PlyElemEntity::NNP_VERTEX_ELEM)
{
for (int i = 0; i < elem.propVec.size(); i++)
for (size_t i = 0; i < elem.propVec.size(); i++)
{
switch (elem.propVec[i].elem)
{
@ -853,12 +859,13 @@ namespace nanoply
case NNP_K1DIR:
case NNP_K2DIR: mask |= BitMask::IO_VERTCURVDIR; break;
case NNP_UNKNOWN_ENTITY: mask |= BitMask::IO_VERTATTRIB; break;
default: assert(0);
}
}
}
else if (elem.plyElem == PlyElemEntity::NNP_EDGE_ELEM)
{
for (int i = 0; i < elem.propVec.size(); i++)
for (size_t i = 0; i < elem.propVec.size(); i++)
{
switch (elem.propVec[i].elem)
{
@ -869,12 +876,13 @@ namespace nanoply
case NNP_BITFLAG: mask |= BitMask::IO_EDGEFLAGS; break;
case NNP_QUALITY: mask |= BitMask::IO_EDGEQUALITY; break;
case NNP_UNKNOWN_ENTITY: mask |= BitMask::IO_EDGEATTRIB; break;
default: assert(0);
}
}
}
else if (elem.plyElem == PlyElemEntity::NNP_FACE_ELEM)
{
for (int i = 0; i < elem.propVec.size(); i++)
for (size_t i = 0; i < elem.propVec.size(); i++)
{
switch (elem.propVec[i].elem)
{
@ -893,6 +901,7 @@ namespace nanoply
case NNP_FACE_WEDGE_TEX: mask |= BitMask::IO_WEDGTEXCOORD; break;
case NNP_TEXTUREINDEX: mask |= BitMask::IO_WEDGTEXMULTI; break;
case NNP_UNKNOWN_ENTITY: mask |= BitMask::IO_FACEATTRIB; break;
default: assert(0);
}
}
}
@ -1032,7 +1041,7 @@ namespace nanoply
if (bitMask & BitMask::IO_VERTATTRIB)
{
custom.AddVertexAttrib(mesh, mesh.vert_attr, info.GetVertexElement());
for (int i = 0; i < custom.vertexAttrib.size(); i++)
for (size_t i = 0; i < custom.vertexAttrib.size(); i++)
{
if ((*custom.vertexAttrib[i]).base != NULL)
vertexDescr.dataDescriptor.push_back(custom.vertexAttrib[i]);
@ -1064,7 +1073,7 @@ namespace nanoply
if (bitMask & BitMask::IO_EDGEATTRIB)
{
custom.AddEdgeAttrib(mesh, mesh.edge_attr, info.GetEdgeElement());
for (int i = 0; i < custom.edgeAttrib.size(); i++)
for (size_t i = 0; i < custom.edgeAttrib.size(); i++)
{
if ((*custom.edgeAttrib[i]).base != NULL)
edgeDescr.dataDescriptor.push_back(custom.edgeAttrib[i]);
@ -1156,7 +1165,7 @@ namespace nanoply
if (bitMask & BitMask::IO_FACEATTRIB)
{
custom.AddFaceAttrib(mesh, mesh.face_attr, info.GetFaceElement());
for (int i = 0; i < custom.faceAttrib.size(); i++)
for (size_t i = 0; i < custom.faceAttrib.size(); i++)
{
if ((*custom.faceAttrib[i]).base != NULL)
faceDescr.dataDescriptor.push_back(custom.faceAttrib[i]);
@ -1173,7 +1182,7 @@ namespace nanoply
//Mesh attribute
if ((bitMask & BitMask::IO_MESHATTRIB))
{
CustomAttributeDescriptor::MapMeshAttribIter iter = custom.meshAttrib.begin();
typename CustomAttributeDescriptor::MapMeshAttribIter iter = custom.meshAttrib.begin();
for (; iter != custom.meshAttrib.end(); iter++)
{
std::string name((*iter).first);
@ -1192,7 +1201,7 @@ namespace nanoply
mesh.shot.SetViewPoint(tra);
mesh.shot.Extrinsics.SetRot(rot);
bool triangleMesh = true;
for (int i = 0; i < faceIndex.size(); i++)
for (size_t i = 0; i < faceIndex.size(); i++)
if (faceIndex[i].size() > 3)
triangleMesh = false;
@ -1202,7 +1211,7 @@ namespace nanoply
bool hasFaceColor = (bitMask & BitMask::IO_FACECOLOR) && vcg::tri::HasPerFaceColor(mesh);
bool hasFaceQuality = (bitMask & BitMask::IO_FACEQUALITY) && vcg::tri::HasPerFaceQuality(mesh);
bool hasFaceNormal = (bitMask & BitMask::IO_FACENORMAL) && vcg::tri::HasPerFaceNormal(mesh);
for (int i = 0; i < faceIndex.size(); i++)
for (size_t i = 0; i < faceIndex.size(); i++)
{
if (faceIndex[i].size() >= 3)
{
@ -1211,7 +1220,7 @@ namespace nanoply
if (hasFaceFlags)
mesh.face[i].SetF(2);
FaceIterator fi = vcg::tri::Allocator<MeshType>::AddFaces(mesh, faceIndex[i].size() - 3);
for (int j = 3; j < faceIndex[i].size(); j++)
for (size_t j = 3; j < faceIndex[i].size(); j++)
{
(*fi).V(0) = &mesh.vert[faceIndex[i][0]];
(*fi).V(1) = &mesh.vert[faceIndex[i][j - 1]];
@ -1238,13 +1247,13 @@ namespace nanoply
}
else
{
for (int i = 0; i < faceIndex.size(); i++)
for (size_t i = 0; i < faceIndex.size(); i++)
{
mesh.face[i].Alloc(faceIndex[i].size());
for (int j = 0; j < faceIndex[i].size(); j++)
for (size_t j = 0; j < faceIndex[i].size(); j++)
mesh.face[i].V(j) = &mesh.vert[faceIndex[i][j]];
}
for (int i = 0; i < wedgeTexCoord.size(); i++)
for (size_t i = 0; i < wedgeTexCoord.size(); i++)
{
for (int j = 0; j < 3; j++)
{
@ -1255,21 +1264,21 @@ namespace nanoply
}
}
for (int i = 0; i < edgeIndex.size(); i++)
for (size_t i = 0; i < edgeIndex.size(); i++)
{
mesh.edge[i].V(0) = &mesh.vert[edgeIndex[i].X()];
mesh.edge[i].V(1) = &mesh.vert[edgeIndex[i].Y()];
}
for (int i = 0; i < cameraDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < cameraDescr.dataDescriptor.size(); i++)
delete cameraDescr.dataDescriptor[i];
for (int i = 0; i < vertexDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < vertexDescr.dataDescriptor.size(); i++)
if (vertexDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete vertexDescr.dataDescriptor[i];
for (int i = 0; i < edgeDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < edgeDescr.dataDescriptor.size(); i++)
if (edgeDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete edgeDescr.dataDescriptor[i];
for (int i = 0; i < faceDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < faceDescr.dataDescriptor.size(); i++)
if (faceDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete faceDescr.dataDescriptor[i];
mesh.textures = info.textureFile;
@ -1399,7 +1408,7 @@ namespace nanoply
}
if ((bitMask & BitMask::IO_VERTATTRIB))
{
std::set<PointerToAttribute>::iterator ai;
typename std::set<PointerToAttribute>::iterator ai;
int userSize = custom.vertexAttrib.size();
for (ai = mesh.vert_attr.begin(); ai != mesh.vert_attr.end(); ++ai)
{
@ -1415,7 +1424,7 @@ namespace nanoply
if (!userDescr)
custom.CreateVertexAttribDescriptor(&(*ai));
}
for (int i = 0; i < custom.vertexAttrib.size(); i++)
for (size_t i = 0; i < custom.vertexAttrib.size(); i++)
{
vertexProp.push_back(custom.vertexAttribProp[i]);
vertexDescr.dataDescriptor.push_back(custom.vertexAttrib[i]);
@ -1429,7 +1438,7 @@ namespace nanoply
std::vector<PlyProperty> edgeProp;
ElementDescriptor edgeDescr(NNP_EDGE_ELEM);
std::vector<vcg::Point2i> edgeIndex;
for (int i = 0; i < mesh.edge.size(); i++)
for (size_t i = 0; i < mesh.edge.size(); i++)
edgeIndex.push_back(vcg::Point2i(vcg::tri::Index(mesh, mesh.edge[i].V(0)), vcg::tri::Index(mesh, mesh.edge[i].V(1))));
if (nameList.size() > 0 && mesh.edge.size() > 0)
{
@ -1447,7 +1456,7 @@ namespace nanoply
if ((bitMask & BitMask::IO_EDGEATTRIB))
{
std::set<PointerToAttribute>::iterator ai;
typename std::set<PointerToAttribute>::iterator ai;
int userSize = custom.edgeAttrib.size();
for (ai = mesh.edge_attr.begin(); ai != mesh.edge_attr.end(); ++ai)
{
@ -1463,7 +1472,7 @@ namespace nanoply
if (!userDescr)
custom.CreateEdgeAttribDescriptor(&(*ai));
}
for (int i = 0; i < custom.edgeAttrib.size(); i++)
for (size_t i = 0; i < custom.edgeAttrib.size(); i++)
{
edgeProp.push_back(custom.edgeAttribProp[i]);
edgeDescr.dataDescriptor.push_back(custom.edgeAttrib[i]);
@ -1478,7 +1487,7 @@ namespace nanoply
ElementDescriptor faceDescr(NNP_FACE_ELEM);
std::vector<std::vector<unsigned int>> faceIndex;
std::vector<vcg::ndim::Point<6, FaceTexScalar>> wedgeTexCoord;
for (int i = 0; i < mesh.face.size(); i++)
for (size_t i = 0; i < mesh.face.size(); i++)
{
faceIndex.push_back(std::vector<unsigned int>());
for (int j = 0; j < mesh.face[i].VN(); j++)
@ -1486,7 +1495,7 @@ namespace nanoply
}
if (((bitMask & BitMask::IO_WEDGTEXCOORD) || (bitMask & BitMask::IO_WEDGTEXMULTI)) && vcg::tri::HasPerWedgeTexCoord(mesh))
{
for (int i = 0; i < mesh.face.size(); i++)
for (size_t i = 0; i < mesh.face.size(); i++)
{
wedgeTexCoord.push_back(vcg::ndim::Point<6, FaceTexScalar>());
for (int j = 0; j < 3; j++)
@ -1565,7 +1574,7 @@ namespace nanoply
}
if ((bitMask & BitMask::IO_FACEATTRIB))
{
std::set<PointerToAttribute>::iterator ai;
typename std::set<PointerToAttribute>::iterator ai;
int userSize = custom.faceAttrib.size();
for (ai = mesh.face_attr.begin(); ai != mesh.face_attr.end(); ++ai)
{
@ -1610,8 +1619,8 @@ namespace nanoply
//Mesh attribute
if ((bitMask & BitMask::IO_MESHATTRIB))
{
CustomAttributeDescriptor::MapMeshAttribIter iter = custom.meshAttrib.begin();
CustomAttributeDescriptor::MapMeshAttribPropIter iterProp = custom.meshAttribProp.begin();
typename CustomAttributeDescriptor::MapMeshAttribIter iter = custom.meshAttrib.begin();
typename CustomAttributeDescriptor::MapMeshAttribPropIter iterProp = custom.meshAttribProp.begin();
for (; iter != custom.meshAttrib.end(); iter++, iterProp++)
{
std::string name((*iter).first);
@ -1624,15 +1633,15 @@ namespace nanoply
bool flag = nanoply::SaveModel(infoSave.filename, meshDescr, infoSave);
for (int i = 0; i < cameraDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < cameraDescr.dataDescriptor.size(); i++)
delete cameraDescr.dataDescriptor[i];
for (int i = 0; i < vertexDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < vertexDescr.dataDescriptor.size(); i++)
if (vertexDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete vertexDescr.dataDescriptor[i];
for (int i = 0; i < edgeDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < edgeDescr.dataDescriptor.size(); i++)
if (edgeDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete edgeDescr.dataDescriptor[i];
for (int i = 0; i < faceDescr.dataDescriptor.size(); i++)
for (size_t i = 0; i < faceDescr.dataDescriptor.size(); i++)
if (faceDescr.dataDescriptor[i]->elem != NNP_UNKNOWN_ENTITY)
delete faceDescr.dataDescriptor[i];
@ -1651,4 +1660,4 @@ namespace nanoply
}
#endif
#endif

View File

@ -45,7 +45,7 @@ public:
{
vertexMaterial = vcg::tri::Allocator<MyMesh>::AddPerVertexAttribute<int>(*this, std::string("materialId"));
faceBarycenter = vcg::tri::Allocator<MyMesh>::AddPerFaceAttribute<MyVertex::CoordType>(*this, std::string("barycenter"));
material = vcg::tri::Allocator<MyMesh>::AddPerMeshAttribute<std::vector<Material>>(*this, std::string("material"));
material = vcg::tri::Allocator<MyMesh>::AddPerMeshAttribute<std::vector<Material> >(*this, std::string("material"));
}
void FillMesh()
@ -55,7 +55,7 @@ public:
vcg::tri::UpdateNormal<MyMesh>::PerVertexNormalized(*this);
int tempC = 255 / vert.size();
for (int i = 0; i < vert.size(); i++)
for (size_t i = 0; i < vert.size(); i++)
{
if (i < 2)
vertexMaterial[i] = -1;
@ -67,7 +67,7 @@ public:
vert[i].C() = vcg::Color4b(tempC*i, tempC*i, tempC*i, 255);
}
for (int i = 0; i < face.size(); i++)
for (size_t i = 0; i < face.size(); i++)
faceBarycenter[i] = vcg::Barycenter(face[i]);
material().resize(2);
@ -149,5 +149,5 @@ int main()
MyMesh mesh2, mesh3;
Load("example_ascii.ply", mesh2);
Load("example_binary.ply", mesh3);
return true;
return 0;
}