Feature layer extrusion

View inQMLC++
View on GitHub
Sample viewer app

Extrude features based on their attributes.

screenshot

Use case

Extrusion is the process of stretching a flat, 2D shape vertically to create a 3D object in a scene. For example, you can extrude building polygons by a height value to create three-dimensional building shapes.

How to use the sample

Press the button to switch between using population density and total population for extrusion. Higher extrusion directly corresponds to higher attribute values.

How it works

  1. Create a ServiceFeatureTable from a URL.
  2. Create a feature layer from the service feature table.
  3. Make sure to set the rendering mode to dynamic, setRenderingMode(FeatureRenderingMode::Dynamic).
  4. Apply a SimpleRenderer to the feature layer.
  5. Set ExtrusionMode of render, renderer::sceneProperties()::setExtrusionMode(ExtrusionMode::AbsoluteHeight).
  6. Set extrusion expression of renderer, renderer::getSceneProperties()::setExtrusionExpression("[POP2007] / 10").

Relevant API

  • ExtrusionExpression
  • ExtrusionMode
  • FeatureLayer
  • FeatureRenderingMode
  • SceneProperties
  • ServiceFeatureTable
  • SimpleRenderer

Tags

3D, extrude, extrusion, extrusion expression, height, renderer, scene

Sample Code

FeatureLayerExtrusion.qmlFeatureLayerExtrusion.cppFeatureLayerExtrusion.h
                                                                  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// [WriteFile Name=FeatureLayerExtrusion, Category=Scenes]
// [Legal]
// Copyright 2017 Esri.

// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// [Legal]

import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.Samples 1.0

FeatureLayerExtrusionSample {
    id: rootRectangle
    clip: true
    width: 800
    height: 600

    SceneView {
        id: sceneView
        objectName: "sceneView"
        anchors.fill: parent


        // combo box to update the extrusion
        ComboBox {
            id: popCombo
            anchors {
                top: parent.top
                left: parent.left
                margins: 10
            }

            property int modelWidth: 0
            width: modelWidth + leftPadding + rightPadding + indicator.width

            model: ["TOTAL POPULATION", "POPULATION DENSITY"]

            onCurrentTextChanged: {
                if (currentText === "TOTAL POPULATION")
                    totalPopulation();
                else
                    popDensity();
            }

            Component.onCompleted : {
                for (let i = 0; i < model.length; ++i) {
                    metrics.text = model[i];
                    modelWidth = Math.max(modelWidth, metrics.width);
                }
            }
            TextMetrics {
                id: metrics
                font: popCombo.font
            }
        }
    }
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.