36 TriangulationEdge::TriangulationEdge(
void){pIndex[0]=pIndex[1]=tIndex[0]=tIndex[1]=-1;}
37 TriangulationTriangle::TriangulationTriangle(
void){eIndex[0]=eIndex[1]=eIndex[2]=-1;}
42 CoredVectorMeshData::CoredVectorMeshData(
void ) { oocPointIndex = polygonIndex = 0; }
43 void CoredVectorMeshData::resetIterator (
void ) { oocPointIndex = polygonIndex = 0; }
44 int CoredVectorMeshData::addOutOfCorePoint(
const Point3D<float>& p){
45 oocPoints.push_back(p);
46 return int(oocPoints.size())-1;
48 int CoredVectorMeshData::addPolygon(
const std::vector< CoredVertexIndex >& vertices )
50 std::vector< int > polygon( vertices.size() );
51 for(
int i=0 ; i<int(vertices.size()) ; i++ )
52 if( vertices[i].inCore ) polygon[i] = vertices[i].idx;
53 else polygon[i] = -vertices[i].idx-1;
54 polygons.push_back( polygon );
55 return int( polygons.size() )-1;
58 if(oocPointIndex<
int(oocPoints.size())){
59 p=oocPoints[oocPointIndex++];
64 int CoredVectorMeshData::nextPolygon( std::vector< CoredVertexIndex >& vertices )
66 if( polygonIndex<
int( polygons.size() ) )
68 std::vector< int >& polygon = polygons[ polygonIndex++ ];
69 vertices.resize( polygon.size() );
70 for(
int i=0 ; i<int(polygon.size()) ; i++ )
71 if( polygon[i]<0 ) vertices[i].idx = -polygon[i]-1 , vertices[i].inCore =
false;
72 else vertices[i].idx = polygon[i] , vertices[i].inCore =
true;
77 int CoredVectorMeshData::outOfCorePointCount(
void){
return int(oocPoints.size());}
78 int CoredVectorMeshData::polygonCount(
void ) {
return int( polygons.size() ); }
83 BufferedReadWriteFile::BufferedReadWriteFile(
char* fileName ,
int bufferSize )
86 _bufferSize = bufferSize;
87 if( fileName ) strcpy( _fileName , fileName ) , tempFile =
false;
89 else strcpy( _fileName , _tempnam(
"." ,
"foo" ) ) , tempFile =
true;
91 else strcpy( _fileName , tempnam(
"." ,
"foo" ) ) , tempFile =
true;
93 _fp = fopen( _fileName ,
"w+b" );
94 if( !_fp ) fprintf( stderr ,
"[ERROR] Failed to open file: %s\n" , _fileName ) , exit( 0 );
95 _buffer = (
char*) malloc( _bufferSize );
97 BufferedReadWriteFile::~BufferedReadWriteFile(
void )
101 if( tempFile )
remove( _fileName );
103 void BufferedReadWriteFile::reset(
void )
105 if( _bufferIndex ) fwrite( _buffer , 1 , _bufferIndex , _fp );
107 fseek( _fp , 0 , SEEK_SET );
109 _bufferSize = fread( _buffer , 1 , _bufferSize , _fp );
111 bool BufferedReadWriteFile::write(
const void* data ,
size_t size )
113 if( !size )
return true;
114 char* _data = (
char*) data;
115 size_t sz = _bufferSize - _bufferIndex;
118 memcpy( _buffer+_bufferIndex , _data , sz );
119 fwrite( _buffer , 1 , _bufferSize , _fp );
127 memcpy( _buffer+_bufferIndex , _data , size );
128 _bufferIndex += size;
132 bool BufferedReadWriteFile::read(
void* data ,
size_t size )
134 if( !size )
return true;
135 char *_data = (
char*) data;
136 size_t sz = _bufferSize - _bufferIndex;
139 if( size && !_bufferSize )
return false;
140 memcpy( _data , _buffer+_bufferIndex , sz );
141 _bufferSize = fread( _buffer , 1 , _bufferSize , _fp );
145 if( !size )
return true;
150 if( !_bufferSize )
return false;
151 memcpy( _data , _buffer+_bufferIndex , size );
152 _bufferIndex += size;
161 CoredFileMeshData::CoredFileMeshData(
void )
163 oocPoints = polygons = 0;
168 memset(pointFileName,0,
sizeof(
char)*1024);
169 memset(polygonFileName,0,
sizeof(
char)*1024);
171 CoredFileMeshData::~CoredFileMeshData(
void )
176 void CoredFileMeshData::resetIterator (
void )
178 oocPointFile->reset();
179 polygonFile->reset();
187 int CoredFileMeshData::addPolygon(
const std::vector< CoredVertexIndex >& vertices )
189 int pSize = int( vertices.size() );
190 std::vector< int > polygon( pSize );
191 for(
int i=0 ; i<pSize ; i++ )
192 if( vertices[i].inCore ) polygon[i] = vertices[i].idx;
193 else polygon[i] = -vertices[i].idx-1;
195 polygonFile->write( &pSize ,
sizeof(
int) );
196 polygonFile->write( &polygon[0] ,
sizeof(
int)*pSize );
205 int CoredFileMeshData::nextPolygon( std::vector< CoredVertexIndex >& vertices )
208 if( polygonFile->read( &pSize ,
sizeof(
int) ) )
210 std::vector< int > polygon( pSize );
211 if( polygonFile->read( &polygon[0] ,
sizeof(
int)*pSize ) )
213 vertices.resize( pSize );
214 for(
int i=0 ; i<int(polygon.size()) ; i++ )
215 if( polygon[i]<0 ) vertices[i].idx = -polygon[i]-1 , vertices[i].inCore =
false;
216 else vertices[i].idx = polygon[i] , vertices[i].inCore =
true;
223 int CoredFileMeshData::outOfCorePointCount(
void ){
return oocPoints; }
224 int CoredFileMeshData::polygonCount(
void ) {
return polygons; }
229 CoredVectorMeshData2::CoredVectorMeshData2(
void ) { oocPointIndex = polygonIndex = 0; }
230 void CoredVectorMeshData2::resetIterator (
void ) { oocPointIndex = polygonIndex = 0; }
233 oocPoints.push_back( v );
234 return int(oocPoints.size())-1;
236 int CoredVectorMeshData2::addPolygon(
const std::vector< CoredVertexIndex >& vertices )
238 std::vector< int > polygon( vertices.size() );
239 for(
int i=0 ; i<int(vertices.size()) ; i++ )
240 if( vertices[i].inCore ) polygon[i] = vertices[i].idx;
241 else polygon[i] = -vertices[i].idx-1;
242 polygons.push_back( polygon );
243 return int( polygons.size() )-1;
247 if(oocPointIndex<
int(oocPoints.size()))
249 v = oocPoints[oocPointIndex++];
254 int CoredVectorMeshData2::nextPolygon( std::vector< CoredVertexIndex >& vertices )
256 if( polygonIndex<
int( polygons.size() ) )
258 std::vector< int >& polygon = polygons[ polygonIndex++ ];
259 vertices.resize( polygon.size() );
260 for(
int i=0 ; i<int(polygon.size()) ; i++ )
261 if( polygon[i]<0 ) vertices[i].idx = -polygon[i]-1 , vertices[i].inCore =
false;
262 else vertices[i].idx = polygon[i] , vertices[i].inCore =
true;
267 int CoredVectorMeshData2::outOfCorePointCount(
void){
return int(oocPoints.size());}
268 int CoredVectorMeshData2::polygonCount(
void ) {
return int( polygons.size() ); }