Skip to content

Commit

Permalink
Add toggle editing and undo/redo buttons to point cloud editing toolb…
Browse files Browse the repository at this point in the history
…ar (#60357)
  • Loading branch information
uclaros authored Feb 9, 2025
1 parent e38c80e commit 327ab77
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 14 deletions.
50 changes: 38 additions & 12 deletions src/app/3d/qgs3dmapcanvaswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,31 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mEditingToolBar->setWindowTitle( tr( "Editing Toolbar" ) );
mEditingToolBar->setVisible( false );

QAction *actionPointCloudChangeAttributeTool = mEditingToolBar->addAction( QIcon( QgsApplication::iconPath( "mActionSelectPolygon.svg" ) ), tr( "Change Point Cloud Attribute" ), this, &Qgs3DMapCanvasWidget::changePointCloudAttribute );
mPointCloudEditingToolbar = new QToolBar( this );

mActionToggleEditing = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionToggleEditing.svg" ) ), tr( "Toggle editing" ), this );
mActionToggleEditing->setCheckable( true );
connect( mActionToggleEditing, &QAction::triggered, this, [] { QgisApp::instance()->toggleEditing( QgisApp::instance()->activeLayer() ); } );
mActionUndo = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionUndo.svg" ) ), tr( "Undo" ), this );
mActionRedo = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "/mActionRedo.svg" ) ), tr( "Redo" ), this );

mEditingToolBar->addAction( mActionToggleEditing );
mEditingToolBar->addAction( mActionUndo );
mEditingToolBar->addAction( mActionRedo );
mEditingToolBar->addSeparator();
mEditingToolBar->addWidget( mPointCloudEditingToolbar );

QAction *actionPointCloudChangeAttributeTool = mPointCloudEditingToolbar->addAction( QIcon( QgsApplication::iconPath( "mActionSelectPolygon.svg" ) ), tr( "Change Point Cloud Attribute" ), this, &Qgs3DMapCanvasWidget::changePointCloudAttribute );
actionPointCloudChangeAttributeTool->setCheckable( true );

mEditingToolBar->addWidget( new QLabel( tr( "Attribute" ) ) );
mPointCloudEditingToolbar->addWidget( new QLabel( tr( "Attribute" ) ) );
mCboChangeAttribute = new QComboBox();
mEditingToolBar->addWidget( mCboChangeAttribute );
mPointCloudEditingToolbar->addWidget( mCboChangeAttribute );
mSpinChangeAttributeValue = new QgsDoubleSpinBox();
mEditingToolBar->addWidget( new QLabel( tr( "Value" ) ) );
mEditingToolBar->addWidget( mSpinChangeAttributeValue );
mPointCloudEditingToolbar->addWidget( new QLabel( tr( "Value" ) ) );
mPointCloudEditingToolbar->addWidget( mSpinChangeAttributeValue );
QAction *actionEditingToolbar = toolBar->addAction( QIcon( QgsApplication::iconPath( "mIconPointCloudLayer.svg" ) ), tr( "Show Editing Toolbar" ), this, [this] { mEditingToolBar->setVisible( !mEditingToolBar->isVisible() ); } );
actionEditingToolbar->setCheckable( true );
connect( mCboChangeAttribute, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) { onPointCloudChangeAttributeSettingsChanged(); } );
connect( mSpinChangeAttributeValue, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), this, [this]( double ) { onPointCloudChangeAttributeSettingsChanged(); } );

Expand Down Expand Up @@ -437,16 +453,18 @@ void Qgs3DMapCanvasWidget::setCanvasName( const QString &name )
mDockableWidgetHelper->setWindowTitle( name );
}

void Qgs3DMapCanvasWidget::enableEditingTools( bool enable )
{
mEditingToolBar->setEnabled( enable );
}

void Qgs3DMapCanvasWidget::updateLayerRelatedActions( QgsMapLayer *layer )
{
mActionUndo->disconnect();
mActionRedo->disconnect();

if ( !layer || layer->type() != Qgis::LayerType::PointCloud )
{
enableEditingTools( false );
mPointCloudEditingToolbar->setEnabled( false );
mActionToggleEditing->setEnabled( false );
mActionToggleEditing->setChecked( false );
mActionUndo->setEnabled( false );
mActionRedo->setEnabled( false );

if ( mCanvas->mapTool() == mMapToolPointCloudChangeAttribute )
mCanvas->setMapTool( nullptr );
Expand All @@ -471,7 +489,15 @@ void Qgs3DMapCanvasWidget::updateLayerRelatedActions( QgsMapLayer *layer )
index = mCboChangeAttribute->findText( QStringLiteral( "Classification" ) );
mCboChangeAttribute->setCurrentIndex( std::max( index, 0 ) );

enableEditingTools( pcLayer->isEditable() );
mActionToggleEditing->setEnabled( pcLayer->supportsEditing() );
mActionToggleEditing->setChecked( pcLayer->isEditable() );
connect( mActionUndo, &QAction::triggered, pcLayer->undoStack(), &QUndoStack::undo );
connect( mActionRedo, &QAction::triggered, pcLayer->undoStack(), &QUndoStack::redo );
mActionUndo->setEnabled( pcLayer->undoStack()->canUndo() );
mActionRedo->setEnabled( pcLayer->undoStack()->canRedo() );
connect( pcLayer->undoStack(), &QUndoStack::canUndoChanged, mActionUndo, &QAction::setEnabled );
connect( pcLayer->undoStack(), &QUndoStack::canRedoChanged, mActionRedo, &QAction::setEnabled );
mPointCloudEditingToolbar->setEnabled( pcLayer->isEditable() );
}

bool Qgs3DMapCanvasWidget::eventFilter( QObject *watched, QEvent *event )
Expand Down
6 changes: 4 additions & 2 deletions src/app/3d/qgs3dmapcanvaswidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget

void showAnimationWidget() { mActionAnim->trigger(); }

void enableEditingTools( bool enable );

void updateLayerRelatedActions( QgsMapLayer *layer );

bool eventFilter( QObject *watched, QEvent *event ) override;
Expand Down Expand Up @@ -147,6 +145,10 @@ class APP_EXPORT Qgs3DMapCanvasWidget : public QWidget
QAction *mActionCamera = nullptr;
QAction *mActionEffects = nullptr;
QAction *mActionSetSceneExtent = nullptr;
QAction *mActionToggleEditing = nullptr;
QAction *mActionUndo = nullptr;
QAction *mActionRedo = nullptr;
QToolBar *mPointCloudEditingToolbar = nullptr;
QgsDockableWidgetHelper *mDockableWidgetHelper = nullptr;
QObjectUniquePtr<QgsRubberBand> mViewFrustumHighlight;
QObjectUniquePtr<QgsRubberBand> mViewExtentHighlight;
Expand Down

0 comments on commit 327ab77

Please sign in to comment.