std::list<MeshData> voronoiShatter_uniformDistributionPoints(TrianglesList &meshTriangles, int numPoints, bool doDisjointMesh, bool useDelaunay, double bCriteria, double sCriteria) { //Build MeshData TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles); MeshData meshData(meshTriangles, cutInfo); return voronoiShatter_uniformDistributionPoints(meshData, numPoints, doDisjointMesh, useDelaunay, bCriteria, sCriteria); }
std::list<MeshData> voronoiShatter_sphereDistributionOnPoint(TrianglesList &meshTriangles, int numPoints, KDPoint targetPoint, double radius, bool doDisjointMesh) { //Build MeshData TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles); MeshData meshData(meshTriangles, cutInfo); return voronoiShatter_sphereDistributionOnPoint(meshData, numPoints, targetPoint, radius, doDisjointMesh); }
TrianglesList scaleAndCenterMesh(TrianglesList &meshTriangles, double scaleFactor) { //Build MeshData TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles); MeshData meshData(meshTriangles, cutInfo); //Center mesh std::list<MeshData> listMeshData; listMeshData.push_back(meshData); std::list<TranslatedMeshData> translatedMeshData = centerMeshesInBarycenter(listMeshData); //Scale mesh MeshData scaledMeshData = scaleMesh(translatedMeshData.front().first, scaleFactor); return scaledMeshData.first; }
std::shared_ptr<MeshData> ReadOBJ(std::istream* stream, IImportExportCallbacks* callbacks) { OBJParser parser; stream->seekg (0, stream->end); size_t streamLength = stream->tellg(); stream->seekg (0, stream->beg); int lineCount = 0; while( stream->peek() != EOF ) { if (((lineCount++) % 20) == 0 && callbacks && !callbacks->HandleProgress("Parsing OBJ", float(double(stream->tellg()) / double(streamLength)))) { return nullptr; } char lineBuff[2048]; stream->getline(lineBuff, sizeof(lineBuff)-1); lineBuff[sizeof(lineBuff)-1] = 0; parser.ParseLine(lineBuff); } if (callbacks && !callbacks->HandleProgress("Parsing OBJ", 1.0f)) { return nullptr; } RawMeshDataWithCallbacks meshData(callbacks); // map directly onto the parsed OBJ vertex attribute buffers meshData.VertexAttributes.resize(3); meshData.VertexAttributes[0].MapOntoStdVector( parser.m_positions ); meshData.VertexAttributes[0].Type = ElementType::Position; meshData.VertexAttributes[1].MapOntoStdVector( parser.m_uvs ); meshData.VertexAttributes[1].Type = ElementType::TextureUV; meshData.VertexAttributes[2].MapOntoStdVector( parser.m_normals ); meshData.VertexAttributes[2].Type = ElementType::Normal; // map directly onto the parsed OBJ index buffers meshData.IndexStreams.resize(3); meshData.IndexStreams[0].MapOntoStdVector( parser.m_triIndices, 0, 3 ); meshData.IndexStreams[0].Type = ElementType::Index; meshData.IndexStreams[1].MapOntoStdVector( parser.m_triIndices, 1, 3 ); meshData.IndexStreams[1].Type = ElementType::Index; meshData.IndexStreams[2].MapOntoStdVector( parser.m_triIndices, 2, 3 ); meshData.IndexStreams[2].Type = ElementType::Index; std::vector<ElementType> etypes = { ElementType::Position, ElementType::TextureUV, ElementType::Normal }; return MeshData::CreateCompacted(&meshData, etypes, true); }
Layer::List Factory::toLayers(Data::Base& data) { Layer::List layers; //qDebug() << "Layer::Factory converting" << Data::Type::toString(data.typeID()); try { switch (data.typeID()) { case Data::Type::Bank: { Data::Bank& bank(dynamic_cast<Data::Bank&>(data)); layers << convert(bank); } break; case Data::Type::GeometryList: { Data::GeometryList& list(dynamic_cast<Data::GeometryList&>(data)); layers << convert(list); } break; case Data::Type::Geometry: { Data::Geometry& geometry(dynamic_cast<Data::Geometry&>(data)); layers << convert(geometry); } break; case Data::Type::PointChargeList: { Data::PointChargeList& charges(dynamic_cast<Data::PointChargeList&>(data)); layers << convert(charges); } break; case Data::Type::MolecularOrbitalsList: { Data::MolecularOrbitalsList& list(dynamic_cast<Data::MolecularOrbitalsList&>(data)); layers << convert(list); } break; case Data::Type::MolecularOrbitals: { Data::MolecularOrbitals& molecularOrbitals(dynamic_cast<Data::MolecularOrbitals&>(data)); layers.append(new MolecularOrbitals(molecularOrbitals)); } break; case Data::Type::ExcitedStates: { Data::ExcitedStates& states(dynamic_cast<Data::ExcitedStates&>(data)); layers.append(new ExcitedStates(states)); } break; case Data::Type::Frequencies: { Data::Frequencies& frequencies(dynamic_cast<Data::Frequencies&>(data)); layers.append(new Frequencies(frequencies)); } break; case Data::Type::FileList: { Data::FileList& fileList(dynamic_cast<Data::FileList&>(data)); layers << convert(fileList); } break; case Data::Type::GridData: { QLOG_WARN() << "Data::GridData passed to LayerFactory"; //Data::GridData& grid(dynamic_cast<Data::GridData&>(data)); //layers.append(new CubeData(grid)); } break; case Data::Type::CubeData: { Data::CubeData& cube(dynamic_cast<Data::CubeData&>(data)); layers.append(new CubeData(cube)); } break; case Data::Type::EfpFragment: { Data::EfpFragment& efp(dynamic_cast<Data::EfpFragment&>(data)); layers.append(new EfpFragment(efp)); } break; case Data::Type::EfpFragmentList: { Data::EfpFragmentList& efpList(dynamic_cast<Data::EfpFragmentList&>(data)); layers << convert(efpList); } break; case Data::Type::Mesh: { Data::Mesh& meshData(dynamic_cast<Data::Mesh&>(data)); Data::Surface surface(meshData); Layer::Surface* surfaceLayer(new Surface(surface)); surfaceLayer->setCheckState(Qt::Checked); layers.append(surfaceLayer); } break; case Data::Type::Surface: { Data::Surface& surfaceData(dynamic_cast<Data::Surface&>(data)); Layer::Surface* surfaceLayer(new Surface(surfaceData)); surfaceLayer->setCheckState(surfaceData.isVisible() ? Qt::Checked : Qt::Unchecked); layers.append(surfaceLayer); } break; case Data::Type::Nmr: { Data::Nmr& nmrData(dynamic_cast<Data::Nmr&>(data)); Layer::Nmr* nmrLayer(new Nmr(nmrData)); layers.append(nmrLayer); } break; default: QLOG_WARN() << "Unimplemented data type in Layer::Factory" << Data::Type::toString(data.typeID()); break; } } catch (const std::bad_cast& e) { QLOG_ERROR() << "Data cast in Layer::Factory failed" << Data::Type::toString(data.typeID()); } return layers; }