77 Commits

Author SHA1 Message Date
Martin Dobias
c40d25ade9 Add 3D scene mode enum 2025-03-24 10:29:33 +01:00
Martin Dobias
e98bf79f1a Initial implementation of globe camera controller
This is a new navigation mode for QgsCameraController which is meant to work
just like the terrain-based navigation mode, but for 3D scenes with globe.

Initially, the new navigation mode can handle:
- zooming in/out with mouse wheel
- orbit around globe when dragging with left mouse button pressed
- left/right/up/down keys to orbit around globe
- shift + left/right keys to change heading angle
- shift + up/down keys to change pitch angle
- page up/page down keys to increase/decrease elevation

For camera pose, we use QgsCameraPose as for "flat" scenes, but the QCamera
is positioned/rotated slightly differently - the main change is that in case
of globe, we use ECEF coordinates of the camera pose's center point, convert
them to lat/lon coordinates in order to set up initial rotation of the camera
so that it is perpendicular to the tangent plane at the given ECEF coordinate.
2025-03-24 10:29:33 +01:00
Martin Dobias
c744d96ec1 Large scene support: shift scene's origin if the camera got too far
This should greatly improve our capability to handle large scenes (e.g. more than 50km across)

Also add a checkbox to the debug panel to allow devs temporarily turn it off.
2025-03-06 13:40:29 +01:00
Withalion
4a232bb9ac Fix review issues 2025-03-06 09:35:31 +01:00
Withalion
c5b74ed242 Fix review issues 2025-03-06 09:29:01 +01:00
Withalion
a3694b3ed2 Refactor includes 2025-03-06 09:29:01 +01:00
Withalion
72c6762b37 Add movement state for paintbrush tool 2025-03-06 09:29:01 +01:00
Withalion
e9a8dea22c Add VPC zoom out behavior for 3D rendering 2025-01-17 22:51:46 +01:00
Stefanos Natsis
e728a526fb
Added 3d map tool to change point cloud attribute values (#60172)
* Added 3d map tool to change point cloud attribute values

* remove unused variable

* rename vars, remove colons, use QgsPointXY, const
2025-01-17 11:50:31 +02:00
Martin Dobias
22702aa689 review and test fixes 2025-01-15 10:43:30 +01:00
Martin Dobias
4c654c88fd Simplify code for camera zoom using a pivot point 2025-01-15 10:43:30 +01:00
Martin Dobias
8bd623b724 Simplify rotation around a pivot point 2025-01-15 10:43:30 +01:00
Jean Felder
1c48cfd07f qgs3dmapscene: : Return export operation success state 2024-12-18 09:07:28 +01:00
Julien Cabieces
4eab5313e6 fix(Sip): update sip since rebase 2024-12-17 09:07:41 +01:00
Julien Cabieces
ed64834106 api(deprecated): add message to deprecated SIP annotation 2024-12-17 09:06:42 +01:00
Nyall Dawson
3a649fbc81 Rename file to qgsabstractterrainsettings.h/cpp 2024-12-13 14:21:51 +10:00
Nyall Dawson
f9f2aa40f0 Move symbol to QgsMeshTerrainSettings 2024-12-13 14:21:51 +10:00
Nyall Dawson
e550ea7670 Move configurateTerrainFromProject to registry 2024-12-13 14:21:51 +10:00
Nyall Dawson
be19042d1d Terrain settings can create generators 2024-12-13 14:21:51 +10:00
Nyall Dawson
25313dd530 Registry can create terrain generators 2024-12-13 14:21:51 +10:00
Nyall Dawson
c1bd66a54d Online DEM 2024-12-13 14:21:51 +10:00
Nyall Dawson
ed9b2784b0 Quantized mesh settings 2024-12-13 14:21:51 +10:00
Nyall Dawson
293b7afadd Implement a registry for terrain objects 2024-12-13 14:21:51 +10:00
Nyall Dawson
8af23b1002 Initial framework for terrain settings refactoring 2024-12-13 14:21:51 +10:00
Denis Rouzaud
30ea619861
sipify 2024-12-10 14:52:35 +01:00
Nyall Dawson
0dbf6e730b Add equality operator for QgsMesh3DSymbol 2024-11-27 10:53:53 +10:00
Nyall Dawson
eb750fb7a8 Use doubles for properties in QgsAbstractMaterialSettings subclasses
These classes are supposed to store the original setting values,
so doubles are more appropriate as they won't slightly change
eg when round-tripping through qgis project XML.

(The actual 3d material classes still use floats, this is just
for the settings classes)
2024-11-26 20:05:30 +10:00
Nyall Dawson
0dc89613df Expose equals method for QgsAbstractMaterialSettings subclasses 2024-11-26 20:05:30 +10:00
Nyall Dawson
373b48ce10
Expose QgsMesh3DSymbol to Python 2024-11-26 14:42:21 +10:00
Martin Dobias
6defbc68c4 Review: add missing \since 2024-11-25 17:16:28 +01:00
Martin Dobias
60554195dc Add possibility to shift origin of 3D map scenes
This introduces a new class QgsGeoTransform (derived from QTransform)
that keeps chunk's translation vector as a QgsVector3D (i.e. in double
coordinates) and if there is a shift of the origin, 3D map scene and
chunk entities react to it by adjusting the underlying QTransform.
2024-11-25 17:16:28 +01:00
Jean Felder
dfce7dc231 qgs3dmapscene: Compute max clip planes
The number of available clip planes depends on the OpenGL
implementation.

This change Introduces a new function in Qgs3DUtils function called
`Qgs3DUtils::getOpenGLMaxClipPlanes` to compute this
number (`GL_MAX_CLIP_PLANES`) and use it in the 3D scene.

See: https://registry.khronos.org/OpenGL-Refpages/gl2.1/xhtml/glClipPlane.xml
2024-11-21 17:08:41 +01:00
Withalion
5f6259ac10 Fix issues found in review 2024-11-21 09:30:45 +01:00
Withalion
1551449df3 Move debug panel icon from toolbar
Debug panel in 3d map view can be set in advanced settings or by
keyboard shortcut CTRL + SHIFT + d
2024-11-21 09:30:45 +01:00
Withalion
c76455bcc6 Add stop updates checkbox in 3D View options 2024-11-21 09:30:45 +01:00
Nyall Dawson
aaf4b90911
Fix malformed docstrings (#59244)
* Fix malformed docstrings

Fixes https://github.com/qgis/pyqgis-api-docs-builder/issues/188

* Fix malformed docstrings

* Fix more malformed docs
2024-10-28 14:29:21 +01:00
Martin Dobias
ec02d36890 nuch -> much 2024-10-26 04:35:12 +10:00
Martin Dobias
04d5369d4d Fix sip bindings 2024-10-26 04:35:12 +10:00
Jean Felder
e38ac6c7b9 qgs3dmapscene: Add support to setup clipping
This adds two functions to setup clip planes on a 3d scene:
- enableClipping() to enable opengl clipping
- disableClipping() to disable opengl clipping

The `enableClipping()` function achieves 3 things:
- it stores the clipping plane equations
- it adds clip planes to the framegraph
- it enables the clipping on the material of the existing entities

`disableClipping()` does the opposite things.

The clip planes equations need to be stored to handle the dynamic
addition of new entities. Indeed, when a new entity is added, clipping
needs to be enabled on its material if necessary. This is achieved
in `finalizeNewEntity` which is called on all new entities.
However, this is not true for the terrain entity. That's why,
`mTerrain` now listens to the `newEntityCreated` signal to call
`handleClippingOnEntity()`.
2024-10-17 10:31:40 +02:00
Martin Dobias
b02813e657 Add API to temporarily disable updates in 3D map scene
This is useful for debugging 3D views, to pause scene updates and
inspect some parts of the scene in detail.
2024-10-03 08:09:04 +10:00
Nyall Dawson
534ca73c59 Fix missing see also trailing notes in PyQGIS documentation 2024-09-04 06:32:03 +10:00
Nyall Dawson
0f1daa11f3 Fix formatting of some \see links 2024-09-04 06:32:03 +10:00
Nyall Dawson
ef0289f3ec Fix formatting of Python ..deprecated annotations in docstrings
Fixes https://github.com/qgis/pyqgis-api-docs-builder/issues/174
2024-09-02 11:42:12 +10:00
Nyall Dawson
765cbb32db Standardise some deprecated annotations 2024-09-02 11:42:12 +10:00
Nyall Dawson
e161d0bd60 Enforce thread safety for Qgs3DMapSettings 2024-08-28 12:38:16 +10:00
Nyall Dawson
9391a62664 Refactor so Qgs3DMapSettings is a member of Qgs3DSceneEntity 2024-08-28 12:38:16 +10:00
Nyall Dawson
1f94f9bc4e Rework to use Qgs3DRenderContext instead 2024-08-28 12:38:16 +10:00
Nyall Dawson
5e33ee4a57 Add some thread safety to Qgs3DMapSettings usage
Create a small, cheap to copy (non-qobject) class
Qgs3DMapSettingsSnapshot which is designed to store
just cheap properties of Qgs3DMapSettings. Then use this
object wherever possible to avoid accessing the (non-thread
safe) Qgs3DMapSettings object for retrieval of simple
map properties (eg crs, extent, ...)

Refs https://github.com/qgis/QGIS-Enhancement-Proposals/issues/301
2024-08-28 12:38:16 +10:00
Nyall Dawson
bc52832b47 Lazily hack around markdown title underline not being long enough
Causes a bunch of warnings when building the PyQGIS docs
2024-08-28 11:58:21 +10:00
Nyall Dawson
6a936472d4 Remove incorrect 'not available in python' note 2024-08-28 11:58:21 +10:00