136
136
#include "qgs3dapputils.h"
137
137
#include "qgs3doptions.h"
138
138
#include "qgsmapviewsmanager.h"
139
+ #include "qgs3dmapcanvaswidget.h"
139
140
#endif
140
141
141
142
#ifdef HAVE_GEOREFERENCER
@@ -9944,11 +9945,11 @@ Qgs3DMapCanvasDockWidget *QgisApp::duplicate3DMapView( const QString &existingVi
9944
9945
// settings from m3DMapViewsWidgets
9945
9946
if ( Qgs3DMapCanvasDockWidget *w = get3DMapViewDock( existingViewName ) )
9946
9947
{
9947
- Qgs3DMapSettings *map = new Qgs3DMapSettings( *w->mapCanvas3D()->map() );
9948
- mapCanvasDock3D->setMapSettings( map );
9948
+ Qgs3DMapSettings *map = new Qgs3DMapSettings( *w->widget()-> mapCanvas3D()->map() );
9949
+ mapCanvasDock3D->widget()-> setMapSettings( map );
9949
9950
9950
- mapCanvasDock3D->mapCanvas3D()->cameraController()->readXml( w->mapCanvas3D()->cameraController()->writeXml( doc ) );
9951
- mapCanvasDock3D->animationWidget()->setAnimation( w->animationWidget()->animation() );
9951
+ mapCanvasDock3D->widget()-> mapCanvas3D()->cameraController()->readXml( w->widget() ->mapCanvas3D()->cameraController()->writeXml( doc ) );
9952
+ mapCanvasDock3D->widget()-> animationWidget()->setAnimation( w->widget() ->animationWidget()->animation() );
9952
9953
9953
9954
QMetaObject::Connection conn = connect( QgsProject::instance(), &QgsProject::transformContextChanged, map, [map]
9954
9955
{
@@ -13248,7 +13249,7 @@ void QgisApp::showOptionsDialog( QWidget *parent, const QString ¤tPage, in
13248
13249
const QList< Qgs3DMapCanvasDockWidget * > canvases3D = findChildren< Qgs3DMapCanvasDockWidget * >();
13249
13250
for ( Qgs3DMapCanvasDockWidget *canvas3D : canvases3D )
13250
13251
{
13251
- canvas3D->measurementLineTool()->updateSettings();
13252
+ canvas3D->widget()-> measurementLineTool()->updateSettings();
13252
13253
}
13253
13254
#endif
13254
13255
@@ -13974,9 +13975,9 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
13974
13975
Qgs3DMapCanvasDockWidget *map3DWidget = new Qgs3DMapCanvasDockWidget( this );
13975
13976
mOpen3DDocks.insert( map3DWidget );
13976
13977
map3DWidget->setWindowTitle( name );
13977
- map3DWidget->mapCanvas3D()->setObjectName( name );
13978
- map3DWidget->setMainCanvas( mMapCanvas );
13979
- map3DWidget->mapCanvas3D()->setTemporalController( mTemporalControllerWidget->temporalController() );
13978
+ map3DWidget->widget()-> mapCanvas3D()->setObjectName( name );
13979
+ map3DWidget->widget()-> setMainCanvas( mMapCanvas );
13980
+ map3DWidget->widget()-> mapCanvas3D()->setTemporalController( mTemporalControllerWidget->temporalController() );
13980
13981
13981
13982
connect( map3DWidget, &Qgs3DMapCanvasDockWidget::closed, [ = ]()
13982
13983
{
@@ -13986,7 +13987,7 @@ Qgs3DMapCanvasDockWidget *QgisApp::createNew3DMapCanvasDock( const QString &name
13986
13987
QStringLiteral( "qgis" ), QStringLiteral( "http://mrcc.com/qgis.dtd" ), QStringLiteral( "SYSTEM" ) );
13987
13988
QDomDocument doc( documentType );
13988
13989
13989
- QString viewName = map3DWidget->mapCanvas3D()->objectName();
13990
+ QString viewName = map3DWidget->widget()-> mapCanvas3D()->objectName();
13990
13991
if ( !QgsProject::instance()->getViewsManager()->get3DViewSettings( viewName ).isNull() )
13991
13992
{
13992
13993
QDomElement elem3DMap;
@@ -14086,15 +14087,15 @@ void QgisApp::new3DMapCanvas()
14086
14087
disconnect( conn );
14087
14088
} );
14088
14089
14089
- dock->setMapSettings( map );
14090
+ dock->widget()-> setMapSettings( map );
14090
14091
14091
14092
QgsRectangle extent = mMapCanvas->extent();
14092
14093
float dist = static_cast< float >( std::max( extent.width(), extent.height() ) );
14093
- dock->mapCanvas3D()->setViewFromTop( mMapCanvas->extent().center(), dist, static_cast< float >( mMapCanvas->rotation() ) );
14094
+ dock->widget()-> mapCanvas3D()->setViewFromTop( mMapCanvas->extent().center(), dist, static_cast< float >( mMapCanvas->rotation() ) );
14094
14095
14095
14096
const QgsCameraController::VerticalAxisInversion axisInversion = settings.enumValue( QStringLiteral( "map3d/axisInversion" ), QgsCameraController::WhenDragging, QgsSettings::App );
14096
- if ( dock->mapCanvas3D()->cameraController() )
14097
- dock->mapCanvas3D()->cameraController()->setVerticalAxisInversion( axisInversion );
14097
+ if ( dock->widget()-> mapCanvas3D()->cameraController() )
14098
+ dock->widget()-> mapCanvas3D()->cameraController()->setVerticalAxisInversion( axisInversion );
14098
14099
14099
14100
QDomImplementation DomImplementation;
14100
14101
QDomDocumentType documentType =
@@ -16710,25 +16711,25 @@ void QgisApp::write3DMapViewSettings( Qgs3DMapCanvasDockWidget *w, QDomDocument
16710
16711
{
16711
16712
QgsReadWriteContext readWriteContext;
16712
16713
readWriteContext.setPathResolver( QgsProject::instance()->pathResolver() );
16713
- elem3DMap.setAttribute( QStringLiteral( "name" ), w->mapCanvas3D()->objectName() );
16714
- QDomElement elem3DMapSettings = w->mapCanvas3D()->map()->writeXml( doc, readWriteContext );
16714
+ elem3DMap.setAttribute( QStringLiteral( "name" ), w->widget()-> mapCanvas3D()->objectName() );
16715
+ QDomElement elem3DMapSettings = w->widget()-> mapCanvas3D()->map()->writeXml( doc, readWriteContext );
16715
16716
elem3DMap.appendChild( elem3DMapSettings );
16716
- QDomElement elemCamera = w->mapCanvas3D()->cameraController()->writeXml( doc );
16717
+ QDomElement elemCamera = w->widget()-> mapCanvas3D()->cameraController()->writeXml( doc );
16717
16718
elem3DMap.appendChild( elemCamera );
16718
- QDomElement elemAnimation = w->animationWidget()->animation().writeXml( doc );
16719
+ QDomElement elemAnimation = w->widget()-> animationWidget()->animation().writeXml( doc );
16719
16720
elem3DMap.appendChild( elemAnimation );
16720
16721
16722
+ elem3DMap.setAttribute( QStringLiteral( "isDocked" ), w->isDocked() );
16723
+
16721
16724
QgsDockWidget *dw = w->dockWidget();
16722
16725
if ( dw )
16723
16726
{
16724
- elem3DMap.setAttribute( QStringLiteral( "isDock" ), QStringLiteral( "1" ) );
16725
16727
writeDockWidgetSettings( dw, elem3DMap );
16726
16728
}
16727
16729
16728
16730
QDialog *d = w->dialog();
16729
16731
if ( d )
16730
16732
{
16731
- elem3DMap.setAttribute( QStringLiteral( "isDialog" ), QStringLiteral( "1" ) );
16732
16733
elem3DMap.setAttribute( QStringLiteral( "d_x" ), d->x() );
16733
16734
elem3DMap.setAttribute( QStringLiteral( "d_y" ), d->y() );
16734
16735
elem3DMap.setAttribute( QStringLiteral( "d_width" ), d->width() );
@@ -16769,20 +16770,20 @@ void QgisApp::read3DMapViewSettings( Qgs3DMapCanvasDockWidget *w, QDomElement &e
16769
16770
}
16770
16771
map->setOutputDpi( QgsApplication::desktop()->logicalDpiX() );
16771
16772
16772
- w->setMapSettings( map );
16773
+ w->widget()-> setMapSettings( map );
16773
16774
16774
16775
QDomElement elemCamera = elem3DMap.firstChildElement( QStringLiteral( "camera" ) );
16775
16776
if ( !elemCamera.isNull() )
16776
16777
{
16777
- w->mapCanvas3D()->cameraController()->readXml( elemCamera );
16778
+ w->widget()-> mapCanvas3D()->cameraController()->readXml( elemCamera );
16778
16779
}
16779
16780
16780
16781
QDomElement elemAnimation = elem3DMap.firstChildElement( QStringLiteral( "animation3d" ) );
16781
16782
if ( !elemAnimation.isNull() )
16782
16783
{
16783
16784
Qgs3DAnimationSettings animationSettings;
16784
16785
animationSettings.readXml( elemAnimation );
16785
- w->animationWidget()->setAnimation( animationSettings );
16786
+ w->widget()-> animationWidget()->setAnimation( animationSettings );
16786
16787
}
16787
16788
16788
16789
QgsDockWidget *dw = w->dockWidget();
@@ -16791,15 +16792,21 @@ void QgisApp::read3DMapViewSettings( Qgs3DMapCanvasDockWidget *w, QDomElement &e
16791
16792
readDockWidgetSettings( dw, elem3DMap );
16792
16793
}
16793
16794
16794
- // QDialog *d = w->dialog();
16795
- // if ( d )
16796
- // {
16797
- // elem3DMap.setAttribute( QStringLiteral( "isDialog" ), QStringLiteral( "1" ) );
16798
- // elem3DMap.setAttribute( QStringLiteral( "d_x" ), d->x() );
16799
- // elem3DMap.setAttribute( QStringLiteral( "d_y" ), d->y() );
16800
- // elem3DMap.setAttribute( QStringLiteral( "d_width" ), d->width() );
16801
- // elem3DMap.setAttribute( QStringLiteral( "d_height" ), d->height() );
16802
- // }
16795
+ QDialog *d = w->dialog();
16796
+ if ( d )
16797
+ {
16798
+ int dx = elem3DMap.attribute( QStringLiteral( "d_x" ), "0" ).toInt();
16799
+ int dy = elem3DMap.attribute( QStringLiteral( "d_x" ), "0" ).toInt();
16800
+ int dw = elem3DMap.attribute( QStringLiteral( "d_width" ), "0" ).toInt();
16801
+ int dh = elem3DMap.attribute( QStringLiteral( "d_height" ), "0" ).toInt();
16802
+ d->setGeometry( dx, dy, dw, dh );
16803
+ }
16804
+
16805
+ bool isDocked = elem3DMap.attribute( QStringLiteral( "isDocked" ), "1" ).toInt() == 1;
16806
+ if ( !isDocked )
16807
+ {
16808
+ w->switchToWindowMode();
16809
+ }
16803
16810
}
16804
16811
#endif
16805
16812
@@ -16845,7 +16852,7 @@ void QgisApp::writeProject( QDomDocument &doc )
16845
16852
#ifdef HAVE_3D
16846
16853
for ( Qgs3DMapCanvasDockWidget *widget : findChildren< Qgs3DMapCanvasDockWidget * >() )
16847
16854
{
16848
- QString viewName = widget->mapCanvas3D()->objectName();
16855
+ QString viewName = widget->widget()-> mapCanvas3D()->objectName();
16849
16856
QDomElement elem3DMap = doc.createElement( QStringLiteral( "view" ) );
16850
16857
elem3DMap.setAttribute( QStringLiteral( "isOpen" ), 1 );
16851
16858
write3DMapViewSettings( widget, doc, elem3DMap );
0 commit comments