Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
void				AObject::draw(gdl::BasicShader& shader, gdl::Clock &clock)
{
  (void)clock;
  _texture->bind();
  _geometry.draw(shader, calcTransformation(), GL_QUADS); 
}