bool Scanmatcher::calculateNdt(pose_t &pose, points2_t & points) { if (!initialized_) return false; pose_t transform = calcTransformation(pose_,pose); for (auto &l : layer_) { if (l.calculateNdt(transform,points)) { transform = std::move(l.getTransformation()); } } transform_ = std::move(transform); initializeNdt(pose,points); return true; }
void Inference::go() { if (m_pool || m_valid) { throw std::runtime_error("Cannot call Inference::go twice"); } m_pool = makeUnique<Pool>(m_threads); const std::size_t size(m_fileInfo.size()); for (std::size_t i(0); i < size; ++i) { FileInfo& f(m_fileInfo[i]); m_index = i; if (m_verbose) { std::cout << i + 1 << " / " << size << ": " << f.path() << std::endl; } if (m_executor.good(f.path())) { m_valid = true; if (m_arbiter->isHttpDerived(f.path())) { m_pool->add([this, &f]() { const auto data(m_arbiter->getBinary(f.path(), range)); std::string name(f.path()); std::replace(name.begin(), name.end(), '/', '-'); std::replace(name.begin(), name.end(), '\\', '-'); m_tmp.put(name, data); add(m_tmp.fullPath(name), f); arbiter::fs::remove(m_tmp.fullPath(name)); }); } else { m_pool->add([&f, this]() { auto localHandle( m_arbiter->getLocalHandle(f.path(), m_tmp)); add(localHandle->localPath(), f); }); } } else { f.status(FileInfo::Status::Omitted); } } m_pool->join(); if (!m_valid) { throw std::runtime_error("No point cloud files found"); } aggregate(); makeSchema(); if (!numPoints()) { throw std::runtime_error("Zero points found"); } else if (!schema().pointSize()) { throw std::runtime_error("No schema dimensions found"); } else if (bounds() == Bounds::expander()) { throw std::runtime_error("No bounds found"); } if (m_cesiumify) { std::cout << "Transforming inference" << std::endl; m_transformation = makeUnique<Transformation>(calcTransformation()); m_bounds = makeUnique<Bounds>(Bounds::expander()); for (auto& f : m_fileInfo) { if (!f.bounds()) throw std::runtime_error("No bounds present"); f.bounds(m_executor.transform(*f.bounds(), *m_transformation)); m_bounds->grow(*f.bounds()); } } m_done = true; }
void AObject::draw(gdl::BasicShader& shader, gdl::Clock &clock) { (void)clock; _texture->bind(); _geometry.draw(shader, calcTransformation(), GL_QUADS); }