void ccVolumeCalcTool::updateGridAndDisplay() { bool success = updateGrid(); if (success && m_glWindow) { //convert grid to point cloud if (m_rasterCloud) { m_glWindow->removeFromOwnDB(m_rasterCloud); delete m_rasterCloud; m_rasterCloud = 0; } m_rasterCloud = convertGridToCloud(false); if (m_rasterCloud) { m_glWindow->addToOwnDB(m_rasterCloud); ccBBox box = m_rasterCloud->getDisplayBB_recursive(false, m_glWindow); update2DDisplayZoom(box); } else { ccLog::Error("Not enough memory!"); m_glWindow->redraw(); } } gridIsUpToDate(success); }
void ccVolumeCalcTool::groundFillEmptyCellStrategyChanged(int) { EmptyCellFillOption fillEmptyCellsStrategy = getFillEmptyCellsStrategy(fillGroundEmptyCellsComboBox); groundEmptyValueDoubleSpinBox->setEnabled( groundComboBox->currentIndex() == 0 || fillEmptyCellsStrategy == FILL_CUSTOM_HEIGHT); gridIsUpToDate(false); }
void ccRasterizeTool::fillEmptyCellStrategyChanged(int) { EmptyCellFillOption fillEmptyCellsStrategy = getFillEmptyCellsStrategy(fillEmptyCellsComboBox); emptyValueDoubleSpinBox->setEnabled( fillEmptyCellsStrategy == FILL_CUSTOM_HEIGHT || fillEmptyCellsStrategy == INTERPOLATE ); gridIsUpToDate(false); }
void ccVolumeCalcTool::ceilFillEmptyCellStrategyChanged(int) { ccRasterGrid::EmptyCellFillOption fillEmptyCellsStrategy = getFillEmptyCellsStrategy(fillCeilEmptyCellsComboBox); ceilEmptyValueDoubleSpinBox->setEnabled( ceilComboBox->currentIndex() == 0 || fillEmptyCellsStrategy == ccRasterGrid::FILL_CUSTOM_HEIGHT); gridIsUpToDate(false); }
void ccVolumeCalcTool::updateGridAndDisplay() { bool success = updateGrid(); if (success && m_window) { //convert grid to point cloud if (m_rasterCloud) { m_window->removeFromOwnDB(m_rasterCloud); delete m_rasterCloud; m_rasterCloud = 0; } std::vector<ExportableFields> exportedFields; try { //we only compute the default 'height' layer exportedFields.push_back(PER_CELL_HEIGHT); m_rasterCloud = cc2Point5DimEditor::convertGridToCloud( exportedFields, false, false, false, 0, false, std::numeric_limits<double>::quiet_NaN()); if (m_rasterCloud && m_rasterCloud->hasScalarFields()) { m_rasterCloud->showSF(true); m_rasterCloud->setCurrentDisplayedScalarField(0); m_rasterCloud->getScalarField(0)->setName("Height above ground"); m_rasterCloud->showSFColorsScale(true); } } catch (const std::bad_alloc&) { //see below } if (m_rasterCloud) { m_window->addToOwnDB(m_rasterCloud); ccBBox box = m_rasterCloud->getDisplayBB_recursive(false,m_window); update2DDisplayZoom(box); } else { ccLog::Error("Not enough memory!"); m_window->redraw(); } } gridIsUpToDate(success); }
void ccRasterizeTool::updateGridAndDisplay() { bool activeLayerIsSF = activeLayerComboBox->currentIndex() != 0; bool interpolateSF = activeLayerIsSF || (getTypeOfSFInterpolation() != INVALID_PROJECTION_TYPE); bool success = updateGrid(interpolateSF); if (success && m_window) { //convert grid to point cloud if (m_rasterCloud) { m_window->removeFromOwnDB(m_rasterCloud); delete m_rasterCloud; m_rasterCloud = 0; } std::vector<ExportableFields> exportedFields; try { //we always compute the default 'height' layer exportedFields.push_back(PER_CELL_HEIGHT); //but we may also have to compute the 'original SF(s)' layer(s) QString activeLayerName = activeLayerComboBox->currentText(); m_rasterCloud = convertGridToCloud(exportedFields,activeLayerIsSF,activeLayerName); } catch (const std::bad_alloc&) { //see below } if (m_rasterCloud) { m_window->addToOwnDB(m_rasterCloud); ccBBox box = m_rasterCloud->getDisplayBB_recursive(false,m_window); update2DDisplayZoom(box); //update activeLayerChanged(activeLayerComboBox->currentIndex(),false); } else { ccLog::Error("Not enough memory!"); m_window->redraw(); } } gridIsUpToDate(success); }
bool cc2Point5DimEditor::showGridBoxEditor() { if (m_bbEditorDlg) { unsigned char projDim = getProjectionDimension(); assert(projDim < 3); m_bbEditorDlg->set2DMode(true,projDim); if (m_bbEditorDlg->exec()) { gridIsUpToDate(false); return true; } } return false; }
void ccVolumeCalcTool::swapRoles() { int sourceIndex = ceilComboBox->currentIndex(); int emptyCellStrat = fillCeilEmptyCellsComboBox->currentIndex(); double emptyCellValue = ceilEmptyValueDoubleSpinBox->value(); ceilComboBox->setCurrentIndex(groundComboBox->currentIndex()); fillCeilEmptyCellsComboBox->setCurrentIndex(fillGroundEmptyCellsComboBox->currentIndex()); ceilEmptyValueDoubleSpinBox->setValue(groundEmptyValueDoubleSpinBox->value()); groundComboBox->setCurrentIndex(sourceIndex); fillGroundEmptyCellsComboBox->setCurrentIndex(emptyCellStrat); groundEmptyValueDoubleSpinBox->setValue(emptyCellValue); gridIsUpToDate(false); }
void ccRasterizeTool::activeLayerChanged(int layerIndex, bool autoRedraw/*=true*/) { if (layerIndex != 0) { interpolateSFCheckBox->setChecked(true); interpolateSFCheckBox->setEnabled(false); } else { interpolateSFCheckBox->setEnabled(true); } if (m_rasterCloud) { //does the selected 'layer' exist? int sfIndex = m_rasterCloud->getScalarFieldIndexByName(qPrintable(activeLayerComboBox->itemText(layerIndex))); m_rasterCloud->setCurrentDisplayedScalarField(sfIndex); if (sfIndex >= 0) { ccScalarField* activeLayer = m_rasterCloud->getCurrentDisplayedScalarField(); if (activeLayer) { const ccScalarField::Range& layerValues = activeLayer->displayRange(); gridLayerRangeLabel->setText(QString("%1 (%2 - %3)").arg(layerValues.range()).arg(layerValues.min()).arg(layerValues.max())); contourStartDoubleSpinBox->setValue(layerValues.min()); contourStepDoubleSpinBox->setValue(layerValues.range() / 10.0); } else { assert(false); gridLayerRangeLabel->setText("no active layer?!"); } } else { gridIsUpToDate(false); } if (m_window && autoRedraw) m_window->redraw(); } }
void ccRasterizeTool::projectionTypeChanged(int index) { //we can't use the 'resample origin cloud' option with 'average height' projection resampleCloudCheckBox->setEnabled(index != PROJ_AVERAGE_VALUE); gridIsUpToDate(false); }
ccVolumeCalcTool::ccVolumeCalcTool(ccGenericPointCloud* cloud1, ccGenericPointCloud* cloud2, QWidget* parent/*=0*/) : QDialog(parent, Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint) , cc2Point5DimEditor() , Ui::VolumeCalcDialog() , m_cloud1(cloud1) , m_cloud2(cloud2) { setupUi(this); connect(buttonBox, SIGNAL(accepted()), this, SLOT(saveSettingsAndAccept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(gridStepDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateGridInfo())); connect(gridStepDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(gridOptionChanged())); connect(groundEmptyValueDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(gridOptionChanged())); connect(ceilEmptyValueDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(gridOptionChanged())); connect(projDimComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(projectionDirChanged(int))); connect(updatePushButton, SIGNAL(clicked()), this, SLOT(updateGridAndDisplay())); connect(heightProjectionComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(gridOptionChanged())); connect(fillGroundEmptyCellsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(groundFillEmptyCellStrategyChanged(int))); connect(fillCeilEmptyCellsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(ceilFillEmptyCellStrategyChanged(int))); connect(swapToolButton, SIGNAL(clicked()), this, SLOT(swapRoles())); connect(groundComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(groundSourceChanged(int))); connect(ceilComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(ceilSourceChanged(int))); connect(clipboardPushButton, SIGNAL(clicked()), this, SLOT(exportToClipboard())); connect(exportGridPushButton, SIGNAL(clicked()), this, SLOT(exportGridAsCloud())); connect(precisionSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setDisplayedNumberPrecision(int))); if (m_cloud1 && !m_cloud2) { //the existing cloud is always the second by default std::swap(m_cloud1, m_cloud2); } assert(m_cloud2); //custom bbox editor ccBBox gridBBox = m_cloud1 ? m_cloud1->getOwnBB() : ccBBox(); if (m_cloud2) { gridBBox += m_cloud2->getOwnBB(); } if (gridBBox.isValid()) { createBoundingBoxEditor(gridBBox, this); connect(editGridToolButton, SIGNAL(clicked()), this, SLOT(showGridBoxEditor())); } else { editGridToolButton->setEnabled(false); } groundComboBox->addItem("Constant"); ceilComboBox->addItem("Constant"); if (m_cloud1) { groundComboBox->addItem(m_cloud1->getName()); ceilComboBox->addItem(m_cloud1->getName()); } if (m_cloud2) { groundComboBox->addItem(m_cloud2->getName()); ceilComboBox->addItem(m_cloud2->getName()); } assert(groundComboBox->count() >= 2); groundComboBox->setCurrentIndex(groundComboBox->count()-2); ceilComboBox->setCurrentIndex(ceilComboBox->count()-1); //add window create2DView(mapFrame); if (m_glWindow) { ccGui::ParamStruct params = m_glWindow->getDisplayParameters(); params.colorScaleShowHistogram = false; params.displayedNumPrecision = precisionSpinBox->value(); m_glWindow->setDisplayParameters(params, true); } loadSettings(); updateGridInfo(); gridIsUpToDate(false); }
void ccRasterizeTool::projectionDirChanged(int dir) { updateGridInfo(); gridIsUpToDate(false); }
void ccVolumeCalcTool::gridOptionChanged() { gridIsUpToDate(false); }
void ccVolumeCalcTool::projectionDirChanged(int dir) { updateGridInfo(); gridIsUpToDate(false); }
void ccVolumeCalcTool::sfProjectionTypeChanged(int index) { gridIsUpToDate(false); }
void ccRasterizeTool::sfProjectionTypeChanged(int index) { gridIsUpToDate(false); }
void ccRasterizeTool::gridOptionChanged() { gridIsUpToDate(false); }
ccRasterizeTool::ccRasterizeTool(ccGenericPointCloud* cloud, QWidget* parent/*=0*/) : QDialog(parent, Qt::WindowMaximizeButtonHint) , cc2Point5DimEditor() , Ui::RasterizeToolDialog() , m_cloud(cloud) { setupUi(this); #ifndef CC_GDAL_SUPPORT generateRasterPushButton->setDisabled(true); generateRasterPushButton->setChecked(false); #endif connect(buttonBox, SIGNAL(accepted()), this, SLOT(testAndAccept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(testAndReject())); connect(gridStepDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateGridInfo())); connect(gridStepDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(gridOptionChanged())); connect(emptyValueDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(gridOptionChanged())); connect(resampleCloudCheckBox, SIGNAL(toggled(bool)), this, SLOT(gridOptionChanged())); connect(dimensionComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(projectionDirChanged(int))); connect(heightProjectionComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(projectionTypeChanged(int))); connect(scalarFieldProjection, SIGNAL(currentIndexChanged(int)), this, SLOT(sfProjectionTypeChanged(int))); connect(fillEmptyCellsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(fillEmptyCellStrategyChanged(int))); connect(updateGridPushButton, SIGNAL(clicked()), this, SLOT(updateGridAndDisplay())); connect(generateCloudPushButton, SIGNAL(clicked()), this, SLOT(generateCloud())); connect(generateImagePushButton, SIGNAL(clicked()), this, SLOT(generateImage())); connect(generateRasterPushButton, SIGNAL(clicked()), this, SLOT(generateRaster())); connect(generateASCIIPushButton, SIGNAL(clicked()), this, SLOT(generateASCIIMatrix())); connect(generateMeshPushButton, SIGNAL(clicked()), this, SLOT(generateMesh())); connect(generateContoursPushButton, SIGNAL(clicked()), this, SLOT(generateContours())); connect(exportContoursPushButton, SIGNAL(clicked()), this, SLOT(exportContourLines())); connect(clearContoursPushButton, SIGNAL(clicked()), this, SLOT(removeContourLines())); connect(activeLayerComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(activeLayerChanged(int))); //custom bbox editor ccBBox gridBBox = m_cloud ? m_cloud->getOwnBB() : ccBBox(); if (gridBBox.isValid()) { createBoundingBoxEditor(gridBBox, this); connect(editGridToolButton, SIGNAL(clicked()), this, SLOT(showGridBoxEditor())); } else { editGridToolButton->setEnabled(false); } if (m_cloud) { cloudNameLabel->setText(m_cloud->getName()); pointCountLabel->setText(QString::number(m_cloud->size())); interpolateSFFrame->setEnabled(cloud->hasScalarFields()); //populate layer box activeLayerComboBox->addItem(GetDefaultFieldName(PER_CELL_HEIGHT)); if (cloud->isA(CC_TYPES::POINT_CLOUD) && cloud->hasScalarFields()) { ccPointCloud* pc = static_cast<ccPointCloud*>(cloud); for (unsigned i=0; i<pc->getNumberOfScalarFields(); ++i) activeLayerComboBox->addItem(pc->getScalarField(i)->getName()); } else { activeLayerComboBox->setEnabled(false); } //add window create2DView(mapFrame); } loadSettings(); updateGridInfo(); gridIsUpToDate(false); }