| 189 | |
| 190 | |
| 191 | void PartioReaderWriter::writeParticles(const std::string &fileName, const unsigned int numParticles, const Vector3r *particlePositions, |
| 192 | const Vector3r *particleVelocities, const Real particleRadius) |
| 193 | { |
| 194 | if (numParticles == 0) |
| 195 | return; |
| 196 | |
| 197 | Partio::ParticlesDataMutable& particleData = *Partio::create(); |
| 198 | Partio::ParticleAttribute posAttr = particleData.addAttribute("position", Partio::VECTOR, 3); |
| 199 | Partio::ParticleAttribute velAttr; |
| 200 | if (particleVelocities != NULL) |
| 201 | velAttr = particleData.addAttribute("velocity", Partio::VECTOR, 3); |
| 202 | Partio::ParticleAttribute scaleAttr; |
| 203 | if (particleRadius != 0.0) |
| 204 | scaleAttr = particleData.addAttribute("pscale", Partio::FLOAT, 1); |
| 205 | Partio::ParticleAttribute idAttr = particleData.addAttribute("id", Partio::INT, 1); |
| 206 | |
| 207 | for (unsigned int i = 0; i < numParticles; i++) |
| 208 | { |
| 209 | Partio::ParticleIndex index = particleData.addParticle(); |
| 210 | float* pos = particleData.dataWrite<float>(posAttr, index); |
| 211 | int* id = particleData.dataWrite<int>(idAttr, index); |
| 212 | |
| 213 | const Vector3r &x = particlePositions[i]; |
| 214 | pos[0] = (float)x[0]; |
| 215 | pos[1] = (float)x[1]; |
| 216 | pos[2] = (float)x[2]; |
| 217 | |
| 218 | if (particleVelocities != NULL) |
| 219 | { |
| 220 | float* vel = particleData.dataWrite<float>(velAttr, index); |
| 221 | const Vector3r &v = particleVelocities[i]; |
| 222 | vel[0] = (float)v[0]; |
| 223 | vel[1] = (float)v[1]; |
| 224 | vel[2] = (float)v[2]; |
| 225 | } |
| 226 | |
| 227 | if (particleRadius != 0.0) |
| 228 | { |
| 229 | float* scale = particleData.dataWrite<float>(scaleAttr, index); |
| 230 | scale[0] = (float)particleRadius; |
| 231 | } |
| 232 | id[0] = i; |
| 233 | } |
| 234 | |
| 235 | Partio::write(fileName.c_str(), particleData, true); |
| 236 | particleData.release(); |
| 237 | } |
nothing calls this directly
no test coverage detected