void qSRA::projectCloudDistsInGrid() const { if (!m_app) { assert(false); return; } const ccHObject::Container& selectedEntities = m_app->getSelectedEntities(); size_t selectCount = selectedEntities.size(); if (selectCount != 1 && selectCount != 2) { assert(false); return; } //retrieve input cloud and polyline ccPointCloud* cloud = 0; ccPolyline* polyline = 0; bool tempPolyline = false; { for (size_t i=0; i<selectCount; ++i) { if (selectedEntities[i]->isA(CC_TYPES::POINT_CLOUD)) { cloud = static_cast<ccPointCloud*>(selectedEntities[i]); } else if (selectedEntities[i]->isA(CC_TYPES::POLY_LINE)) { polyline = static_cast<ccPolyline*>(selectedEntities[i]); } else if (!polyline && selectedEntities[i]->isKindOf(CC_TYPES::CONE)) { //special case: we can deduce the polyline from the cone/cylinder parameters ccCone* cone = static_cast<ccCone*>(selectedEntities[i]); polyline = GetConeProfile(cone); if (!polyline) { //the conversion failed?! return; } tempPolyline = true; } } } if (cloud && polyline) { doProjectCloudDistsInGrid(cloud,polyline); } if (polyline && tempPolyline) { delete polyline; polyline = 0; } }
void qSRA::computeCloud2ProfileRadialDist() { if (m_selectedEntities.size() != 2) return; //retrieve input cloud and polyline ccPointCloud* cloud = 0; ccPolyline* polyline = 0; { for (unsigned i=0; i<2; ++i) { if (m_selectedEntities[i]->isA(CC_TYPES::POINT_CLOUD)) cloud = static_cast<ccPointCloud*>(m_selectedEntities[i]); else if (m_selectedEntities[i]->isA(CC_TYPES::POLY_LINE)) polyline = static_cast<ccPolyline*>(m_selectedEntities[i]); } } if (!cloud || !polyline) { m_app->dispToConsole(QString("Select exactly one cloud and one polyline!"),ccMainAppInterface::ERR_CONSOLE_MESSAGE); return; } assert(cloud && polyline); if (DistanceMapGenerationTool::ComputeRadialDist(cloud, polyline, false, m_app)) { cloud->prepareDisplayForRefresh(); m_app->updateUI(); m_app->refreshAll(); //automatically ask the user if he wants to generate a 2D map if (QMessageBox::question(m_app->getMainWindow(),"Generate map","Do you want to generate a 2D map?",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes) { doProjectCloudDistsInGrid(cloud,polyline); } } else { if (m_app) m_app->dispToConsole("An error ocurred while computing radial distances!",ccMainAppInterface::WRN_CONSOLE_MESSAGE); } }
void qSRA::projectCloudDistsInGrid() { size_t selectCount = m_selectedEntities.size(); if (selectCount != 1 && selectCount != 2) return; //retrieve input cloud and polyline ccPointCloud* cloud = 0; ccPolyline* polyline = 0; { for (size_t i=0; i<selectCount; ++i) { if (m_selectedEntities[i]->isA(CC_TYPES::POINT_CLOUD)) cloud = static_cast<ccPointCloud*>(m_selectedEntities[i]); else if (m_selectedEntities[i]->isA(CC_TYPES::POLY_LINE)) polyline = static_cast<ccPolyline*>(m_selectedEntities[i]); } } if (!cloud || !polyline) return; doProjectCloudDistsInGrid(cloud,polyline); }
void qSRA::computeCloud2ProfileRadialDist() const { if (!m_app) { assert(false); return; } const ccHObject::Container& selectedEntities = m_app->getSelectedEntities(); if (selectedEntities.size() != 2) { assert(false); return; } //retrieve input cloud and polyline ccPointCloud* cloud = 0; ccPolyline* polyline = 0; bool tempPolyline = false; { for (unsigned i=0; i<2; ++i) { if (selectedEntities[i]->isA(CC_TYPES::POINT_CLOUD)) { cloud = static_cast<ccPointCloud*>(selectedEntities[i]); } else if (selectedEntities[i]->isA(CC_TYPES::POLY_LINE)) { polyline = static_cast<ccPolyline*>(selectedEntities[i]); } else if (!polyline && selectedEntities[i]->isKindOf(CC_TYPES::CONE)) { //special case: we can deduce the polyline from the cone/cylinder parameters ccCone* cone = static_cast<ccCone*>(selectedEntities[i]); polyline = GetConeProfile(cone); if (!polyline) { //the conversion failed?! return; } tempPolyline = true; #ifdef _DEBUG //test: apply a visual transformation to see the polyline in the right place { polyline->set2DMode(false); polyline->setWidth(2); polyline->setColor(ccColor::green); polyline->showColors(true); cone->setVisible(false); cone->addChild(polyline); m_app->addToDB(polyline); tempPolyline = false; } #endif } } } if (cloud && polyline) { if (doComputeRadialDists(cloud, polyline)) { //automatically ask the user if he wants to generate a 2D map if (QMessageBox::question( m_app ? m_app->getMainWindow() : 0, "Generate map", "Do you want to generate a 2D deviation map?", QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { doProjectCloudDistsInGrid(cloud,polyline); } } } else { if (m_app) m_app->dispToConsole(QString("Select exactly one cloud and one Surface of Revolution (polyline/profile, cone or cylinder)"),ccMainAppInterface::ERR_CONSOLE_MESSAGE); } if (polyline && tempPolyline) { delete polyline; polyline = 0; } }