A camera represents an observer's location and their perspective of a Scene within a SceneView. More...
Header: | #include <Camera.h> |
Since: | Esri::ArcGISRuntime 100.0 |
Public Functions
Camera() | |
Camera(double latitude, double longitude, double altitude, double heading, double pitch, double roll) | |
Camera(const Esri::ArcGISRuntime::Point &locationPoint, double heading, double pitch, double roll) | |
Camera(const Esri::ArcGISRuntime::Point &lookAtPoint, double distance, double heading, double pitch, double roll) | |
Camera(Esri::ArcGISRuntime::TransformationMatrix *transformationMatrix) | |
Camera(const Esri::ArcGISRuntime::Camera &other) | |
Camera(Esri::ArcGISRuntime::Camera &&other) | |
~Camera() | |
Esri::ArcGISRuntime::Camera | elevate(double deltaAltitude) const |
double | heading() const |
bool | isEmpty() const |
Esri::ArcGISRuntime::Point | location() const |
Esri::ArcGISRuntime::Camera | moveForward(double distance) const |
Esri::ArcGISRuntime::Camera | moveTo(const Esri::ArcGISRuntime::Point &location) const |
Esri::ArcGISRuntime::Camera | moveToward(const Esri::ArcGISRuntime::Point &targetPoint, double distance) const |
double | pitch() const |
double | roll() const |
Esri::ArcGISRuntime::Camera | rotateAround(const Esri::ArcGISRuntime::Point &targetPoint, double deltaHeading, double deltaPitch, double deltaRoll) const |
Esri::ArcGISRuntime::Camera | rotateTo(double heading, double pitch, double roll) const |
Esri::ArcGISRuntime::TransformationMatrix * | transformationMatrix(QObject *parent = nullptr) const |
Esri::ArcGISRuntime::Camera | zoomToward(const Esri::ArcGISRuntime::Point &targetPoint, double factor) const |
bool | operator!=(const Esri::ArcGISRuntime::Camera &other) const |
Esri::ArcGISRuntime::Camera & | operator=(const Esri::ArcGISRuntime::Camera &other) |
Esri::ArcGISRuntime::Camera & | operator=(Esri::ArcGISRuntime::Camera &&other) |
bool | operator==(const Esri::ArcGISRuntime::Camera &other) const |
Detailed Description
A Camera object can be thought of as a camera that you look through to see a viewable area of a scene. What you see depends on how you orientate the camera and how far it is above the Surface. A camera has four main configurable properties:
- Location - The 3D point in space where the camera is located.
- Heading - The angle around the z-axis the camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East.
- Pitch - The angle around the y-axis the camera is rotated. The value is between 0 to 180. 0 is looking straight down, 180 is looking straight up.
- Roll - The angle around the x-axis the camera is rotated. The value is between 0 to 360. 0 is horizontal, 180 is upside down.
You can construct a Camera based on these values or you can obtain it from the scene view's current viewpoint using SceneView::currentViewpointCamera. The Camera is immutable which means that once it is created it you cannot modify it.
You can define the user's camera interactions using the scene view's camera controller. The default camera controller (GlobeCameraController) allows users to freely move and focus the camera anywhere in the scene. Other camera controllers provide specialized behavior, such as:
- The OrbitGeoElementCameraController locks the camera to maintain focus on a (possibly moving) GeoElement.
- The OrbitLocationCameraController locks the camera to orbit and to maintain focus on a fixed location.
Example:
Create a Camera to be used for setting the viewpoint on a SceneView:
// create a camera const double latitude = 28.4; const double longitude = 83.9; const double altitude = 10010.0; const double heading = 10.0; const double pitch = 80.0; const double roll = 0.0; Camera camera(latitude, longitude, altitude, heading, pitch, roll); // set the viewpoint m_sceneView->setViewpointCameraAndWait(camera);
Relevant samples:
- Animate 3D symbols: Demonstrates how to animate a graphic's position and rotation and follow it using a `OrbitGeoElementCameraController`.
- Choose camera controller: Control the behavior of the camera in a scene.
- Viewshed (camera): This sample demonstrates how to calculate a Viewshed from a SceneView's current Camera Viewpoint.
Member Function Documentation
Camera::Camera()
Default constructor. Creates an empty Camera.
Camera::Camera(double latitude, double longitude, double altitude, double heading, double pitch, double roll)
Creates a camera with the specified latitude, longitude, altitude, heading, pitch, and roll.
- latitude - The latitude of the camera position in degrees.
- longitude - The longitude of the camera position in degrees.
- altitude - The altitude of the camera position in meters. If the altitude is below the Scene::baseSurface and the Surface::navigationConstraint is set to NavigationConstraint::StayAbove, the camera will be located at the Surface. Note: that the default is NavigationConstraint::StayAbove.
- heading - The angle around the z-axis the camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East. Values are wrapped around so that they fall within 0 to 360.
- pitch - The angle around the y-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 180. 0 is looking straight down and 180 is looking straight up. A negative value defaults to 0 and a value greater than 180 defaults to 180. If the behavior of a negative pitch is required, then the corresponding transformation with positive pitch can be set instead. For example, if heading:0 pitch:-20 roll:0 is required then heading:180 pitch:20 roll:180 can be used instead.
- roll - The angle around the x-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is horizontal, 180 is upside down. Values are wrapped so that they fall within 0 to 360.
Camera::Camera(const Esri::ArcGISRuntime::Point &locationPoint , double heading, double pitch, double roll)
Creates a camera with the specified location, heading, pitch, and roll.
- locationPoint - A point geometry containing the location and altitude at which to place the camera. If the altitude is below the Scene::baseSurface and the Surface::navigationConstraint is set to NavigationConstraint::StayAbove, the camera will be located at the Surface. Note: that the default is NavigationConstraint::StayAbove. If the point has a spatial reference, the point projects to WGS84. Otherwise, a point spatial reference of WGS84 is assumed.
- heading - The angle around the z-axis the camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East. Values are wrapped around so that they fall within 0 to 360.
- pitch - The angle around the y-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 180. 0 is looking straight down and 180 is looking straight up. A negative value defaults to 0 and a value greater than 180 defaults to 180. If the behavior of a negative pitch is required, then the corresponding transformation with positive pitch can be set instead. For example, if heading:0 pitch:-20 roll:0 is required then heading:180 pitch:20 roll:180 can be used instead.
- roll - The angle around the x-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is horizontal, 180 is upside down. Values are wrapped so that they fall within 0 to 360.
Camera::Camera(const Esri::ArcGISRuntime::Point &lookAtPoint , double distance, double heading, double pitch, double roll)
Creates a camera based on a point to look at, the distance to this point, heading, pitch, and roll.
- lookAtPoint - The point in space the camera will be pointing at.
- distance - The distance in meters between the lookAtPoint and the camera location.
- heading - The angle around the z-axis the camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East. Values are wrapped around so that they fall within 0 to 360.
- pitch - The angle around the y-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 180. 0 is looking straight down and 180 is looking straight up. A negative value defaults to 0 and a value greater than 180 defaults to 180. If the behavior of a negative pitch is required, then the corresponding transformation with positive pitch can be set instead. For example, if heading:0 pitch:-20 roll:0 is required then heading:180 pitch:20 roll:180 can be used instead.
- roll - The angle around the x-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is horizontal, 180 is upside down. Values are wrapped so that they fall within 0 to 360.
Note: the given values may mean that the point is not visible on screen. You can check its visibility using SceneView::locationToScreen(const Esri::ArcGISRuntime::Point&).
[explicit, since Esri::ArcGISRuntime 100.6]
Camera::Camera(Esri::ArcGISRuntime::TransformationMatrix *transformationMatrix )
Creates a camera from a transformation matrix. The TransformationMatrix describes the camera's location and direction it is looking.
- transformationMatrix - The TransformationMatrix used to create the camera. The TransformationMatrix describes the camera's location and the direction it is looking. Using this constructor with the location provided by ARKit/ARCore is necessary for enabling augmented reality.
This function was introduced in Esri::ArcGISRuntime 100.6.
Camera::Camera(const Esri::ArcGISRuntime::Camera &other)
Copy constructor from other Camera.
Camera::Camera(Esri::ArcGISRuntime::Camera &&other)
Move constructor from other Camera.
Camera::~Camera()
Destructor.
Esri::ArcGISRuntime::Camera Camera::elevate(double deltaAltitude ) const
Returns a copy of the camera with the change in altitude applied.
- deltaAltitude - The altitude delta to apply to the output camera.
See also Camera.
double Camera::heading() const
Returns the heading of the camera.
The angle around the z-axis the camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East.
See also Camera.
bool Camera::isEmpty () const
Returns whether this object is empty.
Esri::ArcGISRuntime::Point Camera::location() const
Returns the point geometry containing the location and altitude of the camera.
See also Camera.
Esri::ArcGISRuntime::Camera Camera::moveForward (double distance) const
Returns a copy of the camera with its location moved by the specified distance in the direction the camera is facing.
- distance - The distance in meters.
Esri::ArcGISRuntime::Camera Camera::moveTo (const Esri::ArcGISRuntime::Point &location) const
Returns a copy of the camera with a new location.
- location - The location to move the output camera to.
See also Camera.
Esri::ArcGISRuntime::Camera Camera::moveToward (const Esri::ArcGISRuntime::Point &targetPoint , double distance) const
Returns a copy of the camera with the camera moved in the direction of a target point by the specified distance.
- targetPoint - The point location towards which the camera will move.
- distance - The distance in meters the output camera will be moved.
See also Camera.
double Camera::pitch() const
Returns the pitch of the camera.
The angle around the y-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 180. 0 is looking straight down and 180 is looking straight up.
See also Camera.
double Camera::roll() const
Returns the roll of the camera.
The angle around the x-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is horizontal, 180 is upside down.
See also Camera.
Esri::ArcGISRuntime::Camera Camera::rotateAround (const Esri::ArcGISRuntime::Point &targetPoint , double deltaHeading , double deltaPitch , double deltaRoll ) const
Returns a copy of the camera with the heading and pitch rotated from a given target point by a given delta angles in degrees.
- targetPoint - The point location around which the camera will move.
- deltaHeading - The delta angle in degrees by which the output camera heading will be rotated around the targetPoint.
- deltaPitch - The delta angle in degrees by which the output camera pitch will be rotated around the targetPoint.
- deltaRoll - The delta angle in degrees by which the output camera roll will be rotated around the targetPoint.
See also Camera.
Esri::ArcGISRuntime::Camera Camera::rotateTo (double heading, double pitch, double roll) const
Returns a copy of the camera with the specified heading, pitch and roll values.
- heading - The angle around the z-axis the new camera is rotated. The angle is clockwise from north in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is looking North and 90 is looking East. Values are wrapped around so that they fall within 0 to 360.
- pitch - The angle around the y-axis the camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 180. 0 is looking straight down and 180 is looking straight up. A negative value defaults to 0 and a value greater than 180 defaults to 180. If the behavior of a negative pitch is required, then the corresponding transformation with positive pitch can be set instead. For example, if heading:0 pitch:-20 roll:0 is required then heading:180 pitch:20 roll:180 can be used instead.
- roll - The angle around the x-axis the new camera is rotated in the East, North, Up (ENU) ground reference frame. The value is between 0 to 360. 0 is horizontal, 180 is upside down. Values are wrapped so that they fall within 0 to 360.
See also Camera.
[since Esri::ArcGISRuntime 100.6]
Esri::ArcGISRuntime::TransformationMatrix *Camera::transformationMatrix (QObject *parent = nullptr) const
Returns the camera's TransformationMatrix.
- parent - The parent QObject-derived object (optional).
It does not matter if the camera was created with a TransformationMatrix, the camera's location and orientation will always be converted into a TransformationMatrix.
This function was introduced in Esri::ArcGISRuntime 100.6.
See also Camera.
Esri::ArcGISRuntime::Camera Camera::zoomToward (const Esri::ArcGISRuntime::Point &targetPoint , double factor) const
Returns a copy of the camera with its location moved in the direction of a target point by the specified zoom factor.
- targetPoint - The point location the new camera zooms towards.
- factor - The zoom factor the camera will be moved by based on the distance between the current camera location and the target point. For example, a factor of
2
will divide the distance in half for the new camera. Negative values will have no effect.
See also Camera.
[since Esri::ArcGISRuntime 200.2]
bool Camera::operator!=(const Esri::ArcGISRuntime::Camera &other) const
Inequality operator. Returns true
if this object and other are not equal.
This function was introduced in Esri::ArcGISRuntime 200.2.
See also Camera::operator==.
Esri::ArcGISRuntime::Camera &Camera::operator=(const Esri::ArcGISRuntime::Camera &other)
Assignment operator from other Camera.
Esri::ArcGISRuntime::Camera &Camera::operator=(Esri::ArcGISRuntime::Camera &&other)
Move operator from other Camera.
bool Camera::operator==(const Esri::ArcGISRuntime::Camera &other) const
Returns a bool that tests if this object is equal to a second Camera object.
- other - The other camera object.
See also Camera.