| 309 | } |
| 310 | |
| 311 | bool writeBGEO(const char* filename,const ParticlesData& p,const bool compressed,std::ostream* errorStream) |
| 312 | { |
| 313 | unique_ptr<ostream> output( |
| 314 | compressed ? |
| 315 | Gzip_Out(filename,ios::out|ios::binary) |
| 316 | :new ofstream(filename,ios::out|ios::binary)); |
| 317 | |
| 318 | if(!*output){ |
| 319 | if(errorStream) *errorStream <<"Partio Unable to open file "<<filename<<endl; |
| 320 | return false; |
| 321 | } |
| 322 | |
| 323 | int magic=((((('B'<<8)|'g')<<8)|'e')<<8)|'o'; |
| 324 | char versionChar='V'; |
| 325 | int version=5; |
| 326 | int nPoints=p.numParticles(); |
| 327 | int nPrims=0; |
| 328 | int nPointGroups=0; |
| 329 | int nPrimGroups=0; |
| 330 | int nPointAttrib=p.numAttributes()-1; |
| 331 | int nVertexAttrib=0; |
| 332 | int nPrimAttrib=0; |
| 333 | int nAttrib=p.numFixedAttributes(); |
| 334 | |
| 335 | write<BIGEND>(*output,magic,versionChar,version,nPoints,nPrims,nPointGroups); |
| 336 | write<BIGEND>(*output,nPrimGroups,nPointAttrib,nVertexAttrib,nPrimAttrib,nAttrib); |
| 337 | |
| 338 | vector<ParticleAttribute> handles; |
| 339 | vector<ParticleAccessor> accessors; |
| 340 | vector<int> attrOffsets; |
| 341 | bool foundPosition=false; |
| 342 | int particleSize=4; |
| 343 | for(int i=0;i<p.numAttributes();i++){ |
| 344 | ParticleAttribute attr; |
| 345 | p.attributeInfo(i,attr); |
| 346 | if(attr.name=="position"){ |
| 347 | attrOffsets.push_back(0); |
| 348 | foundPosition=true; |
| 349 | }else{ |
| 350 | writeHoudiniStr(*output,attr.name); |
| 351 | if(attr.type==INDEXEDSTR){ |
| 352 | int houdiniType=4; |
| 353 | unsigned short size=attr.count; |
| 354 | const std::vector<std::string>& indexTable=p.indexedStrs(attr); |
| 355 | int numIndexes=indexTable.size(); |
| 356 | write<BIGEND>(*output,size,houdiniType,numIndexes); |
| 357 | for(int i=0;i<numIndexes;i++) |
| 358 | writeHoudiniStr(*output,indexTable[i]); |
| 359 | }else{ |
| 360 | int houdiniType=0; |
| 361 | switch(attr.type){ |
| 362 | case FLOAT: houdiniType=0;break; |
| 363 | case INT: houdiniType=1;break; |
| 364 | case VECTOR: houdiniType=5;break; |
| 365 | case INDEXEDSTR: |
| 366 | case NONE: assert(false);houdiniType=0;break; |
| 367 | } |
| 368 | unsigned short size=attr.count; |
nothing calls this directly
no test coverage detected