+ sgWriteVec2( fp, texcoords[i].data() );
+ }
+
+ // dump point groups if they exist
+ if ( pts_v.size() > 0 ) {
+ int start = 0;
+ int end = 1;
+ string material;
+ while ( start < (int)pt_materials.size() ) {
+ // find next group
+ material = pt_materials[start];
+ while ( (end < (int)pt_materials.size()) &&
+ (material == pt_materials[end]) )
+ {
+ // cout << "end = " << end << endl;
+ end++;
+ }
+ // cout << "group = " << start << " to " << end - 1 << endl;
+
+ // write group headers
+ sgWriteChar( fp, (char)SG_POINTS ); // type
+ sgWriteUShort( fp, 2 ); // nproperties
+ sgWriteUShort( fp, end - start ); // nelements
+
+ sgWriteChar( fp, (char)SG_MATERIAL ); // property
+ sgWriteUInt( fp, material.length() ); // nbytes
+ sgWriteBytes( fp, material.length(), material.c_str() );
+
+ idx_mask = 0;
+ idx_size = 0;
+ if ( pts_v.size() ) { idx_mask |= SG_IDX_VERTICES; ++idx_size; }
+ if ( pts_n.size() ) { idx_mask |= SG_IDX_NORMALS; ++idx_size; }
+ if ( pts_c.size() ) { idx_mask |= SG_IDX_COLORS; ++idx_size; }
+ if ( pts_tc.size() ) { idx_mask |= SG_IDX_TEXCOORDS; ++idx_size; }
+ sgWriteChar( fp, (char)SG_INDEX_TYPES ); // property
+ sgWriteUInt( fp, 1 ); // nbytes
+ sgWriteChar( fp, idx_mask );
+
+ // write strips
+ for ( i = start; i < end; ++i ) {
+ // nbytes
+ sgWriteUInt( fp, pts_v[i].size() * idx_size
+ * sizeof(unsigned short) );
+ for ( j = 0; j < (int)pts_v[i].size(); ++j ) {
+ if ( pts_v.size() ) {
+ sgWriteUShort( fp, (unsigned short)pts_v[i][j] );
+ }
+ if ( pts_n.size() ) {
+ sgWriteUShort( fp, (unsigned short)pts_n[i][j] );
+ }
+ if ( pts_c.size() ) {
+ sgWriteUShort( fp, (unsigned short)pts_c[i][j] );
+ }
+ if ( pts_tc.size() ) {
+ sgWriteUShort( fp, (unsigned short)pts_tc[i][j] );
+ }
+ }
+ }
+
+ start = end;
+ end = start + 1;
+ }