/** * * @param FileName * @param data * @param nx X Dimension * @param ny Y Dimension * @param nz Z Dimension */ int ReadPHFile(QString FileName, QVector<int>& data, int& nx, int& ny, int& nz) { DataContainerArray::Pointer dca = DataContainerArray::New(); DataContainer::Pointer m = DataContainer::New(); /* FIXME: What Geometry do we need? */ dca->pushBack(m); FilterManager::Pointer fm = FilterManager::Instance(); AbstractFilter::Pointer reader = fm->getFactoryForFilter("PhReader")->create(); reader->setDataContainerArray(dca); bool propWasSet = reader->setProperty("InputFile", FileName); if(propWasSet == false) { } reader->execute(); if (reader->getErrorCondition() < 0) { qDebug() << "Error Reading the Ph File '" << FileName << "' Error Code:" << reader->getErrorCondition(); return -1; } Int32ArrayType* featureIds = Int32ArrayType::SafePointerDownCast(m->getAttributeMatrix(DREAM3D::Defaults::CellAttributeMatrixName)->getAttributeArray(DREAM3D::CellData::FeatureIds).get()); size_t count = featureIds->getNumberOfTuples(); data.resize(count); for(size_t i = 0; i < count; ++i) { data[i] = featureIds->getValue(i); } return 0; }
int testCase1_Execute(const QString& name, int scalarType) { int err = 0; int dataArraySize = ARRAY_SIZE * N; int junkArraySize = 0; int skipHeaderBytes = 0; qDebug() << "Testing case 1: " << name << " with num comps " << N; // Allocate an array, and get the dataArray from that array boost::shared_array<T> array(new T[dataArraySize]); // This makes sure our allocated array is deleted when we leave T* dataArray = array.get(); // Write some data into the data array for(size_t i = 0; i < dataArraySize; ++i) { dataArray[i] = static_cast<T>(i); } // Create junkArray and set it to NULL because there is no junk in this test case T* junkArray = NULL; // Create the file and write to it. If any of the information is wrong, the result will be false bool result = createAndWriteToFile(dataArray, dataArraySize, junkArray, junkArraySize, Detail::None); // Test to make sure that the file was created and written to successfully DREAM3D_REQUIRED(result, == , true) // Create the data container VolumeDataContainer::Pointer m = VolumeDataContainer::New(); m->setName(DREAM3D::Defaults::DataContainerName); DataContainerArray::Pointer dca = DataContainerArray::New(); dca->pushBack(m); // Create the filter, passing in the skipHeaderBytes RawBinaryReader::Pointer filt = createRawBinaryReaderFilter(scalarType, N, skipHeaderBytes); filt->setDataContainerArray(dca); // Preflight, get the error condition, and check that there are no errors filt->preflight(); err = filt->getErrorCondition(); DREAM3D_REQUIRED(err, >= , 0) // Execute the filter, check that there are no errors, and compare the data filt->execute(); DREAM3D_REQUIRED(err, >= , 0) IDataArray::Pointer iData = m->getAttributeMatrix(getCellAttributeMatrixName())->getAttributeArray("Test_Array"); T* data = reinterpret_cast<T*>(iData->getVoidPointer(0)); T d, p; for(size_t i = 0; i < dataArraySize; ++i) { d = data[i]; p = dataArray[i]; DREAM3D_REQUIRE_EQUAL(d, p) } return err; }
void testCase6_Execute(const QString& name, int scalarType) { int dataArraySize = 0; int junkArraySize = ARRAY_SIZE * N; int skipHeaderBytes = junkArraySize * sizeof(T); int err = 0; qDebug() << "Testing case 6: " << name << " with num comps " << N; // Allocate an array, and get the dataArray from that array boost::shared_array<T> array(new T[dataArraySize]); // This makes sure our allocated array is deleted when we leave T* dataArray = array.get(); // Write some data into the data array for(size_t i = 0; i < dataArraySize; ++i) { dataArray[i] = static_cast<T>(i); } // Create junkArray T* junkArray = new T[junkArraySize]; // Write a pattern into junkArray for(size_t i = 0; i < junkArraySize; ++i) { junkArray[i] = (unsigned)0xAB; } // Create the file and write to it. If any of the information is wrong, the result will be false bool result = createAndWriteToFile(dataArray, dataArraySize, junkArray, junkArraySize, Detail::Start); // Test to make sure that the file was created and written to successfully DREAM3D_REQUIRED(result, == , true) // Create the data container VolumeDataContainer::Pointer m = VolumeDataContainer::New(); m->setName(DREAM3D::Defaults::DataContainerName); DataContainerArray::Pointer dca = DataContainerArray::New(); dca->pushBack(m); // Create the filter, passing in the skipHeaderBytes RawBinaryReader::Pointer filt = createRawBinaryReaderFilter(scalarType, N, skipHeaderBytes); filt->setDataContainerArray(dca); // Preflight, get error condition, and check that the "file too small" error has occurred filt->preflight(); err = filt->getErrorCondition(); DREAM3D_REQUIRED(err, == , RBRT_FILE_TOO_SMALL) // Execute, get error condition, and check that there are errors filt->execute(); err = filt->getErrorCondition(); DREAM3D_REQUIRED(err, < , 0) }
void testCase4_Execute(const QString& name, int scalarType) { int dataArraySize = ARRAY_SIZE * N; int junkArraySize = 5; int skipHeaderBytes = junkArraySize * sizeof(T); int err = 0; qDebug() << "Testing case 4: " << name << " with num comps " << N; // Allocate an array, and get the dataArray from that array boost::shared_array<T> array(new T[dataArraySize]); // This makes sure our allocated array is deleted when we leave T* dataArray = array.get(); // Write some data into the data array for(size_t i = 0; i < dataArraySize; ++i) { dataArray[i] = static_cast<T>(i); } // Create junkArray T* junkArray = new T[junkArraySize]; // Write a pattern into junkArray for(size_t i = 0; i < junkArraySize; ++i) { junkArray[i] = (unsigned)0xAB; } // Create the file and write to it. If any of the information is wrong, the result will be false bool result = createAndWriteToFile(dataArray, dataArraySize, junkArray, junkArraySize, Detail::Start); // Test to make sure that the file was created and written to successfully DREAM3D_REQUIRED(result, == , true) // Create the data container VolumeDataContainer::Pointer m = VolumeDataContainer::New(); m->setName(DREAM3D::Defaults::DataContainerName); DataContainerArray::Pointer dca = DataContainerArray::New(); dca->pushBack(m); // Create the filter, passing in the skipHeaderBytes RawBinaryReader::Pointer filt = createRawBinaryReaderFilter(scalarType, N, skipHeaderBytes); filt->setDataContainerArray(dca); // Preflight, get error condition, and check that there are no errors filt->preflight(); err = filt->getErrorCondition(); DREAM3D_REQUIRED(err, >= , 0) // Execute, get error condition, check that there are no errors, and compare the data filt->execute(); err = filt->getErrorCondition(); DREAM3D_REQUIRED(err, >= , 0) IDataArray::Pointer iData = m->getAttributeMatrix(getCellAttributeMatrixName())->getAttributeArray("Test_Array"); T* data = reinterpret_cast<T*>(iData->getVoidPointer(0)); T d, p; for(size_t i = 0; i < dataArraySize; ++i) { d = data[i]; p = dataArray[i]; DREAM3D_REQUIRE_EQUAL(d, p) } /* * SUBTEST: Test when skipHeaderBytes is larger than expected */ // Create another data container VolumeDataContainer::Pointer m2 = VolumeDataContainer::New(); m2->setName(DREAM3D::Defaults::DataContainerName); DataContainerArray::Pointer dca2 = DataContainerArray::New(); dca2->pushBack(m2); // Create another filter, passing in the skipHeaderBytes + 1 RawBinaryReader::Pointer filt2 = createRawBinaryReaderFilter(scalarType, N, skipHeaderBytes + 1); filt2->setDataContainerArray(dca2); // Preflight, get error condition, and check that there are errors filt2->preflight(); err = filt2->getErrorCondition(); DREAM3D_REQUIRED(err, < , 0) // Execute, get error condition, and check that the "file too small" error occurred filt2->execute(); err = filt2->getErrorCondition(); DREAM3D_REQUIRED(err, == , RBRT_FILE_TOO_SMALL) }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- int main(int argc, char** argv) { std::cout << "Starting Conversion of H5Voxel to VTK with Feature ID and IPF Colors" << std::endl; if (argc < 3) { std::cout << "This program takes 2 arguments: Input .h5voxel file and output vtk file." << std::endl; return EXIT_FAILURE; } QString iFile = argv[1]; int err = 0; DataContainerArray::Pointer dca = DataContainerArray::New(); VolumeDataContainer::Pointer m = VolumeDataContainer::New(); dca->pushBack(m); DataContainerReader::Pointer h5Reader = DataContainerReader::New(); h5Reader->setInputFile(iFile); h5Reader->setDataContainerArray(dca); size_t dcDims[3]; float spacing[3]; float origin[3]; h5Reader->execute(); err = h5Reader->getErrorCondition(); if (err < 0) { setErrorCondition(err); // addErrorMessages(h5Reader->getErrorMessages()); return EXIT_FAILURE; } m->getDimensions(dcDims); m->getResolution(spacing); m->getOrigin(origin); int64_t dims[3] = {dcDims[0], dcDims[1], dcDims[2]}; /* Sanity check what we are trying to load to make sure it can fit in our address space. * Note that this does not guarantee the user has enough left, just that the * size of the volume can fit in the address space of the program */ #if (CMP_SIZEOF_SSIZE_T==4) int64_t max = std::numeric_limits<size_t>::max(); #else int64_t max = std::numeric_limits<int64_t>::max(); #endif if (dims[0] * dims[1] * dims[2] > max ) { err = -1; std::stringstream s; s << "The total number of elements '" << (dims[0] * dims[1] * dims[2]) << "' is greater than this program can hold. Try the 64 bit version."; setErrorCondition(err); setErrorMessage(s.str()); return EXIT_FAILURE; } if (dims[0] > max || dims[1] > max || dims[2] > max) { err = -1; std::stringstream s; s << "One of the dimensions is greater than the max index for this sysem. Try the 64 bit version."; s << " dim[0]=" << dims[0] << " dim[1]=" << dims[1] << " dim[2]=" << dims[2]; setErrorCondition(err); setErrorMessage(s.str()); return EXIT_FAILURE; } /* ************ End Sanity Check *************************** */ std::stringstream ss; std::cout << "Writing VTK file" << std::endl; FILE* f = fopen(argv[2], "wb"); WRITE_STRUCTURED_POINTS_HEADER("ASCII", m) // VoxelIPFColorScalarWriter<VolumeDataContainer> ipfWriter(m.get()); // ipfWriter.m_WriteBinaryFiles = false; // ipfWriter.writeScalars(f); int64_t totalPoints = m->getTotalPoints(); int32_t* m_FeatureIds = NULL; m_FeatureIds = m->getCellDataSizeCheck<int32_t, Int32ArrayType, AbstractFilter>(SIMPL::CellData::FeatureIds, totalPoints, 1, NULL); if (0 == m_FeatureIds ) { ss << "Filter " << getNameOfClass() << " requires the data array '" << "DREAM3D" << "::" << "CellData" << "::" << "FeatureIds" << "' to already be created prior to execution." << std::endl; setErrorCondition(-300); } WRITE_VTK_GRAIN_IDS_ASCII(m, SIMPL::CellData::FeatureIds, m_FeatureIds) fclose(f); std::cout << "Done Converting" << std::endl; return EXIT_SUCCESS; }