示例#1
0
文件: util.cpp 项目: MEC402/cruft
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);
}
示例#2
0
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();
}