A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developers.arcgis.com/qt/cpp/sample-code/feature-layer-extrusion/ below:

Feature layer extrusion | ArcGIS Maps SDK for Qt

View on GitHub Sample viewer app

Extrude features based on their attributes.

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.
  1. Apply a SimpleRenderer to the feature layer.
  2. Set ExtrusionMode of render, renderer::sceneProperties()::setExtrusionMode(ExtrusionMode::AbsoluteHeight).
  3. Set extrusion expression of renderer, renderer::getSceneProperties()::setExtrusionExpression("[POP2007] / 10").
Relevant API

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

Sample Code

FeatureLayerExtrusion.cpp FeatureLayerExtrusion.cpp FeatureLayerExtrusion.h FeatureLayerExtrusion.qml

Use dark colors for code blocks Copy

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// [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]

#ifdef PCH_BUILD
#include "pch.hpp"
#endif // PCH_BUILD

// sample headers
#include "FeatureLayerExtrusion.h"

// ArcGIS Maps SDK headers
#include "ArcGISTiledElevationSource.h"
#include "Camera.h"
#include "ElevationSourceListModel.h"
#include "FeatureLayer.h"
#include "LayerListModel.h"
#include "MapTypes.h"
#include "Point.h"
#include "RendererSceneProperties.h"
#include "Scene.h"
#include "SceneQuickView.h"
#include "SceneViewTypes.h"
#include "ServiceFeatureTable.h"
#include "SimpleFillSymbol.h"
#include "SimpleLineSymbol.h"
#include "SimpleRenderer.h"
#include "SpatialReference.h"
#include "Surface.h"
#include "SymbolTypes.h"
#include "Viewpoint.h"

using namespace Esri::ArcGISRuntime;

FeatureLayerExtrusion::FeatureLayerExtrusion(QQuickItem* parent /* = nullptr */):
  QQuickItem(parent),
  // define line and fill symbols for a simple renderer
  m_lineSymbol(new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor("Black"), 1.0f, this)),
  m_fillSymbol(new SimpleFillSymbol(SimpleFillSymbolStyle::Solid, QColor("Blue"), m_lineSymbol, this)),
  m_renderer(new SimpleRenderer(m_fillSymbol, this))
{
  // set renderer extrusion mode to absolute to prevent clipping
  RendererSceneProperties props = m_renderer->sceneProperties();
  props.setExtrusionMode(ExtrusionMode::AbsoluteHeight);
  props.setExtrusionExpression("[POP2007] / 10");
  m_renderer->setSceneProperties(props);
}

void FeatureLayerExtrusion::init()
{
  // Register classes for QML
  qmlRegisterType<SceneQuickView>("Esri.Samples", 1, 0, "SceneView");
  qmlRegisterType<FeatureLayerExtrusion>("Esri.Samples", 1, 0, "FeatureLayerExtrusionSample");
}

void FeatureLayerExtrusion::componentComplete()
{
  QQuickItem::componentComplete();

  // Create the feature service to use
  m_featureTable = new ServiceFeatureTable(QUrl("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3"), this);

  // add the service feature table to a feature layer
  m_featureLayer = new FeatureLayer(m_featureTable, this);

  // set the feature layer to render dynamically to allow extrusion
  m_featureLayer->setRenderingMode(FeatureRenderingMode::Dynamic);

  // set the simple renderer to the feature layer
  m_featureLayer->setRenderer(m_renderer);

  // Create a scene and give it to the SceneView
  m_sceneView = findChild<SceneQuickView*>("sceneView");
  Scene* scene = new Scene(BasemapStyle::ArcGISImageryStandard, this);
  Surface* surface = new Surface(this);
  surface->elevationSources()->append(
        new ArcGISTiledElevationSource(
          QUrl("https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"),
          this));
  scene->setBaseSurface(surface);
  scene->operationalLayers()->append(m_featureLayer);

  // set initial viewpoint
  const double distance = 12940924;
  const Point lookAtPoint(-99.659448, 20.513652, distance, SpatialReference::wgs84());
  const Camera camera(lookAtPoint, 0, 15, 0);
  const Viewpoint initialVp(lookAtPoint, distance, camera);
  scene->setInitialViewpoint(initialVp);

  // apply initial extrusion
  totalPopulation();

  m_sceneView->setArcGISScene(scene);
}

void FeatureLayerExtrusion::popDensity()
{
  // multiply population density by 5000 to make data legible
  RendererSceneProperties props = m_renderer->sceneProperties();
  props.setExtrusionExpression("([POP07_SQMI] * 5000) + 100000");
  m_renderer->setSceneProperties(props);
}

void FeatureLayerExtrusion::totalPopulation()
{
  // divide total population by 10 to make data legible
  RendererSceneProperties props = m_renderer->sceneProperties();
  props.setExtrusionExpression("[POP2007] / 10");
  m_renderer->setSceneProperties(props);
}

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4