std::unique_ptr<float[]> readVolumeData(const std::string& datFilePath, const std::string &filePath) { bd::DatFileData dat{}; bool success{ bd::parseDat(datFilePath, dat) }; if (! success) { return nullptr; } Info() << "Dat file: " << dat.to_string(); std::string typeStr{ bd::to_string(dat.dataType) }; return readVolumeData(typeStr, filePath, dat.rX, dat.rY, dat.rZ); }
void CubeViewerExample::openFile(const QString &fileName) { // close current file closeFile(); // open new file chemkit::MoleculeFile file(fileName.toStdString()); bool ok = file.read(); if(!ok){ QMessageBox::critical(this, "Error Opening File", QString("Failed to open file: %1").arg(file.errorString().c_str())); return; } // setup molecule chemkit::Molecule *molecule = file.molecule(); chemkit::BondPredictor::predictBonds(molecule); m_moleculeItem->setMolecule(molecule); file.removeMolecule(molecule); // setup scalar fields and isosurface items m_positiveScalarField = readVolumeData(fileName); if(m_positiveScalarField){ m_positiveSurfaceItem->setScalarField(m_positiveScalarField); m_positiveSurfaceItem->setPosition(m_positiveScalarField->origin()); std::vector<chemkit::Float> values = m_positiveScalarField->data(); for(unsigned int i = 0; i < values.size(); i++){ values[i] = -values[i]; } m_negativeScalarField = new chemkit::ScalarField(m_positiveScalarField->dimensions(), m_positiveScalarField->cellDimensions(), values); m_negativeSurfaceItem->setScalarField(m_negativeScalarField); m_negativeSurfaceItem->setPosition(m_positiveScalarField->origin()); } // update the view m_view->update(); }