// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void VoxelDataContainerWriter::execute() { int err = 0; std::stringstream ss; setErrorCondition(err); VoxelDataContainer* m = getVoxelDataContainer(); if(NULL == m) { setErrorCondition(-999); notifyErrorMessage("The Voxel DataContainer Object was NULL", -999); return; } setErrorCondition(0); dataCheck(false, 1, 1, 1); hid_t dcGid = -1; // Create the HDF5 Group for the Data Container err = H5Utilities::createGroupsFromPath(DREAM3D::HDF5::VoxelDataContainerName.c_str(), m_HdfFileId); if (err < 0) { ss.str(""); ss << "Error creating HDF Group " << DREAM3D::HDF5::VoxelDataContainerName << std::endl; setErrorCondition(-60); notifyErrorMessage( ss.str(), err); return; } dcGid = H5Gopen(m_HdfFileId, DREAM3D::HDF5::VoxelDataContainerName.c_str(), H5P_DEFAULT ); if (dcGid < 0) { ss.str(""); ss << "Error opening Group " << DREAM3D::HDF5::VoxelDataContainerName << std::endl; setErrorCondition(-61); notifyErrorMessage( ss.str(), err); return; } // This just writes the header information int64_t volDims[3] = { m->getXPoints(), m->getYPoints(), m->getZPoints() }; float spacing[3] = { m->getXRes(), m->getYRes(), m->getZRes() }; float origin[3] = { 0.0f, 0.0f, 0.0f }; m->getOrigin(origin); err = writeMetaInfo(DREAM3D::HDF5::VoxelDataContainerName, volDims, spacing, origin); if (err < 0) { ss.str(""); ss << ":Error Writing header information to output file" << std::endl; setErrorCondition(-62); notifyErrorMessage( ss.str(), err); H5Gclose(dcGid); // Close the Data Container Group return; } err = writeVertexData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeEdgeData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeFaceData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeCellData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeFieldData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeEnsembleData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } // Now finally close the group and the HDf5 File H5Gclose(dcGid); // Close the Data Container Group notifyStatusMessage("Complete"); }
/*! * Writes data only in VTK file */ void VTK::writeData( ){ std::fstream str ; std::fstream::pos_type position_insert, position_eof ; int length; char* buffer ; str.open( fh.getPath( ), std::ios::in | std::ios::out ) ; { // Write Ascii position_insert = str.tellg(); VTKField temp ; //Writing first point data then cell data for( auto &field : data ){ if( field->getCodification() == VTKFormat::ASCII && field->getLocation() == VTKLocation::POINT ) { str.seekg( position_insert); readDataArray( str, *field ) ; str.seekg( field->getPosition() ) ; genericIO::copyUntilEOFInString( str, buffer, length ); writeFieldData( str, *field) ; position_insert = str.tellg(); str << std::endl ; genericIO::flushBINARY( str, buffer, length) ; delete [] buffer ; }; }; for( auto &field : data ){ if( field->getCodification() == VTKFormat::ASCII && field->getLocation() == VTKLocation::CELL ) { str.seekg( position_insert); readDataArray( str, *field ) ; str.seekg( field->getPosition() ) ; genericIO::copyUntilEOFInString( str, buffer, length ); writeFieldData( str, *field) ; position_insert = str.tellg(); str << std::endl ; genericIO::flushBINARY( str, buffer, length) ; delete [] buffer ; }; }; for( auto &field : geometry ){ if( field->getCodification() == VTKFormat::ASCII ) { str.seekg( position_insert); readDataArray( str, *field ) ; str.seekg( field->getPosition() ) ; genericIO::copyUntilEOFInString( str, buffer, length ); writeFieldData( str, *field) ; //flushData( str, VTKFormat::ASCII, field.getName() ) ; position_insert = str.tellg(); str << std::endl ; genericIO::flushBINARY( str, buffer, length) ; delete [] buffer ; }; }; str.seekg( temp.getPosition() ) ; } { // Write Appended char c_; std::string line ; std::fstream::pos_type position_appended ; //Go to the initial position of the appended section while( getline(str, line) && (! bitpit::utils::keywordInString( line, "<AppendedData")) ){} ; str >> c_; while( c_ != '_') str >> c_; position_insert = str.tellg(); genericIO::copyUntilEOFInString( str, buffer, length ); str.close(); str.clear(); //Reopening in binary mode str.open( fh.getPath( ), std::ios::out | std::ios::in | std::ios::binary); str.seekg( position_insert) ; //str.open( "data.dat", std::ios::out | std::ios::binary); //Writing first point data then cell data for( auto &field : data ){ if( field->getCodification() == VTKFormat::APPENDED && field->getLocation() == VTKLocation::POINT ) { if( getHeaderType() == "UInt32"){ uint32_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; } else{ uint64_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; }; writeFieldData( str, *field) ; }; } for( auto &field : data ){ if( field->getCodification() == VTKFormat::APPENDED && field->getLocation() == VTKLocation::CELL ) { if( getHeaderType() == "UInt32"){ uint32_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; } else{ uint64_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; }; writeFieldData( str, *field) ; }; } //Writing Geometry Data for( auto &field : geometry ){ if( field->getCodification() == VTKFormat::APPENDED ) { if( getHeaderType() == "UInt32"){ uint32_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; } else{ uint64_t nbytes = field->getNbytes() ; genericIO::flushBINARY(str, nbytes) ; }; writeFieldData( str, *field) ; }; }; //{ //std::fstream str2 ; //str2.open( "test2.dat", std::ios::out | std::ios::binary); //genericIO::flushBINARY( str2, buffer, length) ; //str2.close(); //} genericIO::flushBINARY( str, buffer, length) ; delete [] buffer ; }; // Closing Appended Secyion str.close(); return ; };
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void SurfaceMeshDataContainerWriter::execute() { int err = 0; std::stringstream ss; setErrorCondition(err); SurfaceMeshDataContainer* sm = getSurfaceMeshDataContainer(); if(NULL == sm) { setErrorCondition(-999); notifyErrorMessage("The Surfacemesh DataContainer Object was NULL", -999); return; } setErrorCondition(0); // Create the HDF5 Group for the Data Container err = H5Utilities::createGroupsFromPath(DREAM3D::HDF5::SurfaceMeshDataContainerName.c_str(), m_HdfFileId); if (err < 0) { ss.str(""); ss << "Error creating HDF Group " << DREAM3D::HDF5::SurfaceMeshDataContainerName << std::endl; setErrorCondition(-60); addErrorMessage(getHumanLabel(), ss.str(), err); return; } hid_t dcGid = H5Gopen(m_HdfFileId, DREAM3D::HDF5::SurfaceMeshDataContainerName.c_str(), H5P_DEFAULT ); if (dcGid < 0) { ss.str(""); ss << "Error opening Group " << DREAM3D::HDF5::SurfaceMeshDataContainerName << std::endl; setErrorCondition(-61); addErrorMessage(getHumanLabel(), ss.str(), err); return; } // Add some VTK hints into the group err = createVtkObjectGroup(DREAM3D::HDF5::SurfaceMeshDataContainerName, H5_VTK_POLYDATA); if (err < 0) { return; } writeXdmfGridHeader(); H5GroupAutoCloser dcGidAutoCloser(&dcGid); err = writeVertices(dcGid); if (err < 0) { return; } err = writeMeshVertLinks(dcGid); if (err < 0) { return; } err = writeVertexAttributeData(dcGid); if (err < 0) { return; } err = writeFaces(dcGid); if (err < 0) { return; } err = writeMeshFaceNeighborLists(dcGid); if (err < 0) { return; } err = writeFaceAttributeData(dcGid); if (err < 0) { return; } err = writeEdges(dcGid); if (err < 0) { return; } err = writeEdgeAttributeData(dcGid); if (err < 0) { return; } err = writeFieldData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } err = writeEnsembleData(dcGid); if (err < 0) { H5Gclose(dcGid); // Close the Data Container Group return; } // Now finally close the group and the HDf5 File H5Gclose(dcGid); // Close the Data Container Group dcGid = -1; writeXdmfGridFooter(); notifyStatusMessage("Complete"); }