/******************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module.
**
** $QT_BEGIN_LICENSE:COMM$
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** $QT_END_LICENSE$
**
******************************************************************************/

/*!
    \example qmlsurfacelayers
    \title Qt Quick 2 Surface Multiseries Example
    \ingroup qtdatavisualization_examples
    \brief Using multiple series with Surface3D in a QML application.

    The Qt Quick 2 surface example shows how to make a 3D surface plot displaying 3 layers using
    Surface3D with Qt Quick 2.

    \image qmlsurfacelayers-example.png

    The focus in this example is on generating a multiseries surface plot from 3 different height
    map images, so in this section we skip explaining the application creation. For a more detailed
    QML example documentation, see \l{Qt Quick 2 Scatter Example}.

    \section1 Adding data to the graph

    This example shows how to add several surface series to one graph using using
    HeightMapSurfaceDataProxies and how to control their visibilities individually.

    Let's start by creating a specific gradient for each layer:

    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 0

    Then we'll create the series themselves. It happens simply by adding 3 separate Surface3DSeries
    to the Surface3D graph as children:

    \dots 0
    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 1
    \dots 0

    You'll notice we added the created gradients to the \c baseGradient properties of the series.
    We could have added them to the \c baseGradients property of the Theme3D in Surface3D instead,
    but doing it this way ensures each gradient is applied to a correct series:

    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 2
    \dots

    \section1 Controlling the graph

    Let's add some checkboxes to control the visibility of layers:

    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 3

    We don't need to do anything on the \c onCheckedChanged as we bound the \c checked state to
    the \c visible property of the series directly:

    \dots 0
    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 4
    \dots 0

    Let's add some more checkboxes to control how the layers are displayed, when visible:

    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 5

    In addition to these we have three buttons, one of which is of special interest to us. It is
    used to control whether we want to slice into only one layer, or all of them:

    \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 6

    \section1 Example contents
*/
