diff --git a/wrap/io_trimesh/import_raw.h b/wrap/io_trimesh/import_raw.h new file mode 100644 index 00000000..246cd45c --- /dev/null +++ b/wrap/io_trimesh/import_raw.h @@ -0,0 +1,280 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004 \/)\/ * +* 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 $ + +****************************************************************************/ + +#ifndef __VCGLIB_IMPORT_RAW +#define __VCGLIB_IMPORT_RAW + +#include + +namespace vcg { +namespace tri { +namespace io { + +/** +This class encapsulate a filter for importing raw format pointcloud. +there exists many raw formats. each one with a particular sintax even if they only contains + +*/ +template +class ImporterRAW +{ +public: + +typedef typename MESH_TYPE::VertexPointer VertexPointer; +typedef typename MESH_TYPE::ScalarType ScalarType; +typedef typename MESH_TYPE::VertexType VertexType; +typedef typename MESH_TYPE::FaceType FaceType; +typedef typename MESH_TYPE::VertexIterator VertexIterator; +typedef typename MESH_TYPE::FaceIterator FaceIterator; + +// max token number +#define RAW_MAX_TOKEN_LINE_DESCRIPTOR 32 + + +enum RAWError { + E_NOERROR, // 0 + // Errori di open + E_CANTOPEN, // 1 + E_UNESPECTEDEOF, // 2 + // errore line descriptor + E_INVALIDLINEDESC // 3 +}; + +static const char *ErrorMsg(int error) +{ + static const char * raw_error_msg[] = + { + "No errors", + "Can't open file", + "Premature End of file", + "Invalid line Descriptor", + }; + + if(error>2 || error<0) return "Unknown error"; + else return stl_error_msg[error]; +}; + +// line format is a string describing which data is stored for every data line +// PX PY PZ posizione +// NX NY NZ normale +// CR CG CB colore +// RF riflettanza (qualita') +// +// the string is parsed to know how many value are contained in each line +// and which is the order. the result is a number (how many) and a vector +// describing the order +// +// +// during reading a data structure is used to store intermediate values +// it is basically an array of float +// +// float linebuffer[] +//[0][1][2][3][4][5][6][7][8][9] +// p p p n n n c c c r +// x y z x y z r g b f +// +// given the number of tokens and the order vector it is possible to scan a line using the command +// +// for(...n 0->tokennumber...) +// fscanf(fp,"%f", &linebuffer[tokenorder[n]]) + +static int Parselinedescription(const char * linedesc, int &tokennumber, int *order) +{ + int ii; + char tok[3]; + int index; + + // controllo lunghezza + // se non e' multiplo di 3 allora e' errato + int len = strlen(linedesc) + 1; + if(len%3 != 0) + return E_INVALIDLINEDESC; + + index=0; + tok[2] = '\0'; + tokennumber = 0; + for(ii=0; ii::AddFaces(m,facenum); +// VertexIterator vi=Allocator::AddVertices(m,facenum*3); + + while(!feof(fp)) + { + for(ii=0; ii