Skip to content

Commit a2150e5

Browse files
NEDJIMAbelgacemnyalldawson
authored andcommittedJan 12, 2022
fix crash
1 parent 6fc734c commit a2150e5

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed
 

‎src/app/3d/qgs3dviewsmanagerdialog.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ void Qgs3DViewsManagerDialog::duplicateClicked()
103103
QString existingViewName = m3DViewsListView->selectionModel()->selectedRows().at( 0 ).data( Qt::DisplayRole ).toString();
104104
QString newViewName = askUserForATitle( existingViewName, tr( "Duplicate" ), false );
105105

106+
if ( newViewName.isEmpty() )
107+
return;
108+
106109
QgisApp::instance()->duplicate3DMapView( existingViewName, newViewName );
107110

108111
QgsProject::instance()->setDirty();

‎src/app/qgisapp.cpp

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9940,31 +9940,38 @@ Qgs3DMapCanvasDockWidget *QgisApp::duplicate3DMapView( const QString &existingVi
99409940
QStringLiteral( "qgis" ), QStringLiteral( "http://mrcc.com/qgis.dtd" ), QStringLiteral( "SYSTEM" ) );
99419941
QDomDocument doc( documentType );
99429942

9943+
Qgs3DMapSettings *map = nullptr;
9944+
99439945
// If the 3D view is open, copy its configuration to the duplicate widget, otherwise just use the recorded
99449946
// settings from m3DMapViewsWidgets
99459947
if ( Qgs3DMapCanvasDockWidget *w = findChild<Qgs3DMapCanvasDockWidget *>( existingViewName + QStringLiteral( "DockObject" ) ) )
99469948
{
9947-
Qgs3DMapSettings *map = new Qgs3DMapSettings( *w->mapCanvas3D()->map() );
9949+
map = new Qgs3DMapSettings( *w->mapCanvas3D()->map() );
99489950
mapCanvasDock3D->setMapSettings( map );
99499951

99509952
mapCanvasDock3D->mapCanvas3D()->cameraController()->readXml( w->mapCanvas3D()->cameraController()->writeXml( doc ) );
99519953
mapCanvasDock3D->animationWidget()->setAnimation( w->animationWidget()->animation() );
9952-
9953-
connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
9954-
{
9955-
map->setTransformContext( QgsProject::instance()->transformContext() );
9956-
} );
99579954
}
99589955
else
99599956
{
9960-
Qgs3DMapSettings *map = new Qgs3DMapSettings;
9957+
map = new Qgs3DMapSettings;
99619958
mapCanvasDock3D->setMapSettings( map );
99629959

99639960
QDomElement elem = QgsProject::instance()->views3DManager()->get3DViewSettings( existingViewName );
99649961
elem.setAttribute( QStringLiteral( "name" ), newViewName );
99659962
read3DMapViewSettings( mapCanvasDock3D, elem );
99669963
}
99679964

9965+
QMetaObject::Connection conn = connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
9966+
{
9967+
map->setTransformContext( QgsProject::instance()->transformContext() );
9968+
} );
9969+
9970+
connect( mapCanvasDock3D, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
9971+
{
9972+
disconnect( conn );
9973+
} );
9974+
99689975
setupDockWidget( mapCanvasDock3D, true );
99699976

99709977
QDomElement elem3DMap;
@@ -13961,6 +13968,7 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
1396113968

1396213969
connect( map3DWidget, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
1396313970
{
13971+
qDebug() << "Qgs3DMapCanvasDockWidget::closed";
1396413972
QDomImplementation DomImplementation;
1396513973
QDomDocumentType documentType =
1396613974
DomImplementation.createDocumentType(
@@ -13970,9 +13978,9 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
1397013978
QDomElement elem3DMap;
1397113979
elem3DMap = doc.createElement( QStringLiteral( "view" ) );
1397213980
write3DMapViewSettings( map3DWidget, doc, elem3DMap );
13973-
1397413981
QString viewName = map3DWidget->mapCanvas3D()->objectName();
1397513982
QgsProject::instance()->views3DManager()->viewClosed( viewName, elem3DMap );
13983+
qDebug() << "Qgs3DMapCanvasDockWidget::closed" << "finished";
1397613984
} );
1397713985

1397813986
return map3DWidget;
@@ -14048,10 +14056,16 @@ void QgisApp::new3DMapCanvas()
1404814056
map->setDirectionalLights( QList<QgsDirectionalLightSettings>() << QgsDirectionalLightSettings() );
1404914057
map->setOutputDpi( QgsApplication::desktop()->logicalDpiX() );
1405014058

14051-
connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
14059+
QMetaObject::Connection conn = connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
1405214060
{
1405314061
map->setTransformContext( QgsProject::instance()->transformContext() );
1405414062
} );
14063+
14064+
connect( dock, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
14065+
{
14066+
disconnect( conn );
14067+
} );
14068+
1405514069
dock->setMapSettings( map );
1405614070

1405714071
QgsRectangle extent = mMapCanvas->extent();

0 commit comments

Comments
 (0)
Please sign in to comment.