void VTKWriter::initializeOutput(int numParticles) { vtkFile = new VTKFile_t("UnstructuredGrid"); // per point, we add type, position, velocity and force PointData pointData; DataArray_t mass(type::Float32, "mass", 1); DataArray_t velocity(type::Float32, "velocity", 3); DataArray_t forces(type::Float32, "force", 3); DataArray_t type(type::Int32, "type", 1); pointData.DataArray().push_back(mass); pointData.DataArray().push_back(velocity); pointData.DataArray().push_back(forces); pointData.DataArray().push_back(type); CellData cellData; // we don't have cell data => leave it empty // 3 coordinates Points points; DataArray_t pointCoordinates(type::Float32, "points", 3); points.DataArray().push_back(pointCoordinates); Cells cells; // we don't have cells, => leave it empty // for some reasons, we have to add a dummy entry for paraview DataArray_t cells_data(type::Float32, "types", 0); cells.DataArray().push_back(cells_data); PieceUnstructuredGrid_t piece(pointData, cellData, points, cells, numParticles, 0); UnstructuredGrid_t unstructuredGrid(piece); vtkFile->UnstructuredGrid(unstructuredGrid); }
void PointPartialHostData::deserialize(Message::Document& d) { if (d.IsObject()) { if (d.HasMember("data")) { Message::Value& v = d["data"]; if (v.IsArray()) { data.clear(); for (Message::SizeType i = 0; i < v.Size(); i++) { PointData<HostData> pd; pd.deserialize(v[i]); data.push_back(pd); } } } } }
void VTKWriter::initializeOutput(int numParticles) { vtkFile = new VTKFile_t("UnstructuredGrid"); // per point, we add mass, velocity, force, type and stress // and in DEBUG mode the id of the molecules PointData pointData; DataArray_t mass(type::Float32, "mass", 1); DataArray_t velocity(type::Float32, "velocity", 3); DataArray_t forces(type::Float32, "force", 3); DataArray_t type(type::Int32, "type", 1); DataArray_t stress(type::Float32, "stress", 1); DataArray_t flag(type::Int32, "flag", 1); pointData.DataArray().push_back(mass); pointData.DataArray().push_back(velocity); pointData.DataArray().push_back(forces); pointData.DataArray().push_back(type); pointData.DataArray().push_back(stress); pointData.DataArray().push_back(flag); #ifdef DEBUG DataArray_t id(type::Int32, "id", 1); pointData.DataArray().push_back(id); #endif CellData cellData; // we don't have cell data => leave it empty // 3 coordinates Points points; DataArray_t pointCoordinates(type::Float32, "points", 3); points.DataArray().push_back(pointCoordinates); Cells cells; // we don't have cells, => leave it empty // for some reasons, we have to add a dummy entry for paraview DataArray_t cells_data(type::Float32, "types", 0); cells.DataArray().push_back(cells_data); PieceUnstructuredGrid_t piece(pointData, cellData, points, cells, numParticles, 0); UnstructuredGrid_t unstructuredGrid(piece); vtkFile->UnstructuredGrid(unstructuredGrid); }
static void run_test(const char* filename, PointData& data, unsigned short compressor, int requested_version=-1, int chunk_size=-1, bool random_seeks=false) { // // COMPRESSION // // setting up LASzip parameters LASzip laszip; if (!laszip.setup(data.point_type, data.point_size, compressor)) { log("ERROR on laszip.setup(): %s\n", laszip.get_error()); } if (requested_version > -1) laszip.request_version((unsigned short)requested_version); if (chunk_size > -1) laszip.set_chunk_size((unsigned int)chunk_size); // packing up LASzip unsigned char* bytes; int num; if (!laszip.pack(bytes, num)) { log("ERROR on laszip.pack(): %s\n", laszip.get_error()); } // creating the output stream OStream* ost = new OStream(settings->use_iostream, filename); // creating the zipper LASzipper* laszipper = make_zipper(ost, &laszip); // allocating the data to read from data.setup(laszip.num_items, laszip.items); // writing the points if (chunk_size == 0) { if (random_seeks) write_points_explicit_chunk_seek(laszipper, data); else write_points_explicit_chunk(laszipper, data); } else { if (random_seeks) write_points_seek(laszipper, data); else write_points(laszipper, data); } // cleaning up delete laszipper; delete ost; // // DECOMPRESSION // // setting up LASzip parameters LASzip laszip_dec; if (!laszip_dec.unpack(bytes, num)) { log("ERROR on laszip_dec.unpack(): %s\n", laszip_dec.get_error()); } // creating the input stream IStream* ist = new IStream(settings->use_iostream, filename); // creating the unzipper LASunzipper* lasunzipper = make_unzipper(ist, &laszip_dec); // allocating the data to write into data.setup(laszip_dec.num_items, laszip_dec.items); // reading the points if (random_seeks) read_points_seek(lasunzipper, data); else read_points(lasunzipper, data); // cleaning up delete lasunzipper; delete ist; return; }
PointData::PointData( const PointData & data0, const PointData & data1 ) : DenseMultiDimensionalData(1,1) { if( data0.fname.length() > 0 ){ fname = data0.fname; } else{ if( data1.fname.length() > 0 ) fname = data1.fname; } if( data0.GetVoxelCount() != data1.GetVoxelCount() ){ std::cout << "PointData: WARNING - Merging two datasets with different element counts" << std::endl << std::flush; } Resize( SCI::Max(data0.GetVoxelCount(),data1.GetVoxelCount()), data0.GetDim() + data1.GetDim() ); std::vector<float> space( data0.GetDim() + data1.GetDim() ); for(int i = 0; i < GetVoxelCount(); i++){ data0.GetElement( i, &(space[0]) ); data1.GetElement( i, &(space[data0.GetDim()]) ); SetElement( i, &(space[0]) ); } std::cout << "PointData: " << GetVoxelCount() << " points, " << GetDim() << " dim" << std::endl << std::flush; CalculateMinMaxMeans(); }