@@ -9940,31 +9940,38 @@ Qgs3DMapCanvasDockWidget *QgisApp::duplicate3DMapView( const QString &existingVi
9940
9940
QStringLiteral( "qgis" ), QStringLiteral( "http://mrcc.com/qgis.dtd" ), QStringLiteral( "SYSTEM" ) );
9941
9941
QDomDocument doc( documentType );
9942
9942
9943
+ Qgs3DMapSettings *map = nullptr;
9944
+
9943
9945
// If the 3D view is open, copy its configuration to the duplicate widget, otherwise just use the recorded
9944
9946
// settings from m3DMapViewsWidgets
9945
9947
if ( Qgs3DMapCanvasDockWidget *w = findChild<Qgs3DMapCanvasDockWidget *>( existingViewName + QStringLiteral( "DockObject" ) ) )
9946
9948
{
9947
- Qgs3DMapSettings * map = new Qgs3DMapSettings( *w->mapCanvas3D()->map() );
9949
+ map = new Qgs3DMapSettings( *w->mapCanvas3D()->map() );
9948
9950
mapCanvasDock3D->setMapSettings( map );
9949
9951
9950
9952
mapCanvasDock3D->mapCanvas3D()->cameraController()->readXml( w->mapCanvas3D()->cameraController()->writeXml( doc ) );
9951
9953
mapCanvasDock3D->animationWidget()->setAnimation( w->animationWidget()->animation() );
9952
-
9953
- connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
9954
- {
9955
- map->setTransformContext( QgsProject::instance()->transformContext() );
9956
- } );
9957
9954
}
9958
9955
else
9959
9956
{
9960
- Qgs3DMapSettings * map = new Qgs3DMapSettings;
9957
+ map = new Qgs3DMapSettings;
9961
9958
mapCanvasDock3D->setMapSettings( map );
9962
9959
9963
9960
QDomElement elem = QgsProject::instance()->views3DManager()->get3DViewSettings( existingViewName );
9964
9961
elem.setAttribute( QStringLiteral( "name" ), newViewName );
9965
9962
read3DMapViewSettings( mapCanvasDock3D, elem );
9966
9963
}
9967
9964
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
+
9968
9975
setupDockWidget( mapCanvasDock3D, true );
9969
9976
9970
9977
QDomElement elem3DMap;
@@ -13961,6 +13968,7 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
13961
13968
13962
13969
connect( map3DWidget, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
13963
13970
{
13971
+ qDebug() << "Qgs3DMapCanvasDockWidget::closed";
13964
13972
QDomImplementation DomImplementation;
13965
13973
QDomDocumentType documentType =
13966
13974
DomImplementation.createDocumentType(
@@ -13970,9 +13978,9 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
13970
13978
QDomElement elem3DMap;
13971
13979
elem3DMap = doc.createElement( QStringLiteral( "view" ) );
13972
13980
write3DMapViewSettings( map3DWidget, doc, elem3DMap );
13973
-
13974
13981
QString viewName = map3DWidget->mapCanvas3D()->objectName();
13975
13982
QgsProject::instance()->views3DManager()->viewClosed( viewName, elem3DMap );
13983
+ qDebug() << "Qgs3DMapCanvasDockWidget::closed" << "finished";
13976
13984
} );
13977
13985
13978
13986
return map3DWidget;
@@ -14048,10 +14056,16 @@ void QgisApp::new3DMapCanvas()
14048
14056
map->setDirectionalLights( QList<QgsDirectionalLightSettings>() << QgsDirectionalLightSettings() );
14049
14057
map->setOutputDpi( QgsApplication::desktop()->logicalDpiX() );
14050
14058
14051
- connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
14059
+ QMetaObject::Connection conn = connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
14052
14060
{
14053
14061
map->setTransformContext( QgsProject::instance()->transformContext() );
14054
14062
} );
14063
+
14064
+ connect( dock, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
14065
+ {
14066
+ disconnect( conn );
14067
+ } );
14068
+
14055
14069
dock->setMapSettings( map );
14056
14070
14057
14071
QgsRectangle extent = mMapCanvas->extent();
0 commit comments