Permalink
Please sign in to comment.
Browse files
Merge pull request #5578 from AnalyticalGraphicsInc/3d-tiles-demos
3D Tiles Sandcastle Demos
- Loading branch information...
Showing
with
906 additions
and 151 deletions.
- +93 −0 Apps/Sandcastle/gallery/3D Tiles Adjust Height.html
- BIN Apps/Sandcastle/gallery/3D Tiles Adjust Height.jpg
- +53 −0 Apps/Sandcastle/gallery/3D Tiles BIM.html
- BIN Apps/Sandcastle/gallery/3D Tiles BIM.jpg
- +16 −27 Apps/Sandcastle/gallery/3D Tiles Batch Table Hierarchy.html
- +161 −0 Apps/Sandcastle/gallery/3D Tiles Feature Picking.html
- BIN Apps/Sandcastle/gallery/3D Tiles Feature Picking.jpg
- +162 −0 Apps/Sandcastle/gallery/3D Tiles Feature Styling.html
- BIN Apps/Sandcastle/gallery/3D Tiles Feature Styling.jpg
- +7 −119 Apps/Sandcastle/gallery/{3D Tiles.html → 3D Tiles Formats.html}
- BIN Apps/Sandcastle/gallery/{3D Tiles.jpg → 3D Tiles Formats.jpg}
- +56 −0 Apps/Sandcastle/gallery/3D Tiles Inspector.html
- BIN Apps/Sandcastle/gallery/3D Tiles Inspector.jpg
- +196 −0 Apps/Sandcastle/gallery/3D Tiles Interactivity.html
- BIN Apps/Sandcastle/gallery/3D Tiles Interactivity.jpg
- +54 −0 Apps/Sandcastle/gallery/3D Tiles Interior.html
- BIN Apps/Sandcastle/gallery/3D Tiles Interior.jpg
- +52 −0 Apps/Sandcastle/gallery/3D Tiles Photogrammetry.html
- BIN Apps/Sandcastle/gallery/3D Tiles Photogrammetry.jpg
- +3 −5 Apps/Sandcastle/gallery/3D Tiles Point Cloud Styling.html
- +53 −0 Apps/Sandcastle/gallery/3D Tiles Point Cloud.html
- BIN Apps/Sandcastle/gallery/3D Tiles Point Cloud.jpg
| @@ -0,0 +1,93 @@ | ||
| +<!DOCTYPE html> | ||
| +<html lang="en"> | ||
| +<head> | ||
| + <meta charset="utf-8"> | ||
| + <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <!-- Use Chrome Frame in IE --> | ||
| + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | ||
| + <meta name="description" content="Adjust the height of a 3D Tiles tileset."> | ||
| + <meta name="cesium-sandcastle-labels" content="3D Tiles"> | ||
| + <title>Cesium Demo</title> | ||
| + <script type="text/javascript" src="../Sandcastle-header.js"></script> | ||
| + <script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script> | ||
| + <script type="text/javascript"> | ||
| + require.config({ | ||
| + baseUrl : '../../../Source', | ||
| + waitSeconds : 60 | ||
| + }); | ||
| + </script> | ||
| +</head> | ||
| +<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html"> | ||
| +<style> | ||
| + @import url(../templates/bucket.css); | ||
| + #toolbar { | ||
| + background: rgba(42, 42, 42, 0.8); | ||
| + padding: 4px; | ||
| + border-radius: 4px; | ||
| + } | ||
| + #toolbar input { | ||
| + vertical-align: middle; | ||
| + padding-top: 2px; | ||
| + padding-bottom: 2px; | ||
| + } | ||
| +</style> | ||
| +<div id="cesiumContainer" class="fullSize"></div> | ||
| +<div id="loadingOverlay"><h1>Loading...</h1></div> | ||
| +<div id="toolbar"> | ||
| + <div>Height</div> | ||
| + <input type="range" min="-100.0" max="100.0" step="1" data-bind="value: height, valueUpdate: 'input'"> | ||
| + <input type="text" size="5" data-bind="value: height"> | ||
| +</div> | ||
| +<script id="cesium_sandcastle_script"> | ||
| +function startup(Cesium) { | ||
| + 'use strict'; | ||
| +//Sandcastle_Begin | ||
| +var viewer = new Cesium.Viewer('cesiumContainer', { | ||
| + shadows : true | ||
| +}); | ||
| + | ||
| +viewer.scene.globe.depthTestAgainstTerrain = true; | ||
| + | ||
| +var viewModel = { | ||
| + height: 0 | ||
| +}; | ||
| + | ||
| +Cesium.knockout.track(viewModel); | ||
| + | ||
| +var toolbar = document.getElementById('toolbar'); | ||
| +Cesium.knockout.applyBindings(viewModel, toolbar); | ||
| + | ||
| +var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ | ||
| + url : '../../../Specs/Data/Cesium3DTiles/Tilesets/Tileset' | ||
| +})); | ||
| + | ||
| +tileset.readyPromise.then(function() { | ||
| + var boundingSphere = tileset.boundingSphere; | ||
| + viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius * 2)); | ||
| + viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); | ||
| +}).otherwise(function(error) { | ||
| + throw(error); | ||
| +}); | ||
| + | ||
| +Cesium.knockout.getObservable(viewModel, 'height').subscribe(function(height) { | ||
| + height = Number(height); | ||
| + if (isNaN(height)) { | ||
| + return; | ||
| + } | ||
| + | ||
| + var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center); | ||
| + var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0); | ||
| + var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height); | ||
| + var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()); | ||
| + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); | ||
| +}); | ||
| +//Sandcastle_End | ||
| +Sandcastle.finishedLoading(); | ||
| +} | ||
| +if (typeof Cesium !== "undefined") { | ||
| + startup(Cesium); | ||
| +} else if (typeof require === "function") { | ||
| + require(["Cesium"], startup); | ||
| +} | ||
| +</script> | ||
| +</body> | ||
| +</html> |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
| @@ -0,0 +1,53 @@ | ||
| +<!DOCTYPE html> | ||
| +<html lang="en"> | ||
| +<head> | ||
| + <meta charset="utf-8"> | ||
| + <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <!-- Use Chrome Frame in IE --> | ||
| + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | ||
| + <meta name="description" content="A sample BIM dataset rendered with 3D Tiles."> | ||
| + <meta name="cesium-sandcastle-labels" content="Showcases, 3D Tiles"> | ||
| + <title>Cesium Demo</title> | ||
| + <script type="text/javascript" src="../Sandcastle-header.js"></script> | ||
| + <script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script> | ||
| + <script type="text/javascript"> | ||
| + require.config({ | ||
| + baseUrl : '../../../Source', | ||
| + waitSeconds : 60 | ||
| + }); | ||
| + </script> | ||
| +</head> | ||
| +<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html"> | ||
| +<style> | ||
| + @import url(../templates/bucket.css); | ||
| +</style> | ||
| +<div id="cesiumContainer" class="fullSize"></div> | ||
| +<div id="loadingOverlay"><h1>Loading...</h1></div> | ||
| +<script id="cesium_sandcastle_script"> | ||
| +function startup(Cesium) { | ||
| + 'use strict'; | ||
| +//Sandcastle_Begin | ||
| +// Power Plant design model provided by Bentley Systems | ||
| +var viewer = new Cesium.Viewer('cesiumContainer'); | ||
| + | ||
| +var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ | ||
| + url : 'https://beta.cesium.com/api/assets/1459?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzNjUyM2I5Yy01YmRhLTQ0MjktOGI0Zi02MDdmYzBjMmY0MjYiLCJpZCI6NDQsImFzc2V0cyI6WzE0NTldLCJpYXQiOjE0OTkyNjQ3ODF9.SW_rwY-ic0TwQBeiweXNqFyywoxnnUBtcVjeCmDGef4' | ||
| +})); | ||
| + | ||
| +tileset.readyPromise.then(function() { | ||
| + var boundingSphere = tileset.boundingSphere; | ||
| + viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.5, -0.2, boundingSphere.radius * 4.0)); | ||
| + viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); | ||
| +}).otherwise(function(error) { | ||
| + throw(error); | ||
| +}); | ||
| +//Sandcastle_End | ||
| +Sandcastle.finishedLoading(); | ||
| +} | ||
| +if (typeof Cesium !== "undefined") { | ||
| + startup(Cesium); | ||
| +} else if (typeof require === "function") { | ||
| + require(["Cesium"], startup); | ||
| +} | ||
| +</script> | ||
| +</body> | ||
| +</html> |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
| @@ -0,0 +1,161 @@ | ||
| +<!DOCTYPE html> | ||
| +<html lang="en"> | ||
| +<head> | ||
| + <meta charset="utf-8"> | ||
| + <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <!-- Use Chrome Frame in IE --> | ||
| + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | ||
| + <meta name="description" content="Pick features in a 3D Tiles tileset."> | ||
| + <meta name="cesium-sandcastle-labels" content="Showcases, 3D Tiles"> | ||
| + <title>Cesium Demo</title> | ||
| + <script type="text/javascript" src="../Sandcastle-header.js"></script> | ||
| + <script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script> | ||
| + <script type="text/javascript"> | ||
| + require.config({ | ||
| + baseUrl : '../../../Source', | ||
| + waitSeconds : 60 | ||
| + }); | ||
| + </script> | ||
| +</head> | ||
| +<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html"> | ||
| +<style> | ||
| + @import url(../templates/bucket.css); | ||
| +</style> | ||
| +<div id="cesiumContainer" class="fullSize"></div> | ||
| +<div id="loadingOverlay"><h1>Loading...</h1></div> | ||
| +<script id="cesium_sandcastle_script"> | ||
| +function startup(Cesium) { | ||
| + 'use strict'; | ||
| +//Sandcastle_Begin | ||
| +// A simple demo of 3D Tiles feature picking with hover and select behavior | ||
| +// Building data courtesy of NYC OpenData portal: http://www1.nyc.gov/site/doitt/initiatives/3d-building.page | ||
| +var viewer = new Cesium.Viewer('cesiumContainer'); | ||
| + | ||
| +// Set the initial camera view to look at Manhattan | ||
| +var initialPosition = Cesium.Cartesian3.fromDegrees(-74.01881302800248, 40.69114333714821, 753); | ||
| +var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(21.27879878293835, -21.34390550872461, 0.0716951918898415); | ||
| +viewer.scene.camera.setView({ | ||
| + destination: initialPosition, | ||
| + orientation: initialOrientation, | ||
| + endTransform: Cesium.Matrix4.IDENTITY | ||
| +}); | ||
| + | ||
| +// Load the NYC buildings tileset | ||
| +var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ | ||
| + url: 'https://beta.cesium.com/api/assets/1461?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYWJmM2MzNS02OWM5LTQ3OWItYjEyYS0xZmNlODM5ZDNkMTYiLCJpZCI6NDQsImFzc2V0cyI6WzE0NjFdLCJpYXQiOjE0OTkyNjQ3NDN9.vuR75SqPDKcggvUrG_vpx0Av02jdiAxnnB1fNf-9f7s' | ||
| +})); | ||
| + | ||
| +// HTML overlay for showing feature name on mouseover | ||
| +var nameOverlay = document.createElement('div'); | ||
| +viewer.container.appendChild(nameOverlay); | ||
| +nameOverlay.className = 'backdrop'; | ||
| +nameOverlay.style.display = 'none'; | ||
| +nameOverlay.style.position = 'absolute'; | ||
| +nameOverlay.style.bottom = '0'; | ||
| +nameOverlay.style.left = '0'; | ||
| +nameOverlay.style['pointer-events'] = 'none'; | ||
| +nameOverlay.style.padding = '4px'; | ||
| +nameOverlay.style.backgroundColor = 'black'; | ||
| + | ||
| +// Information about the currently selected feature | ||
| +var selected = { | ||
| + feature: undefined, | ||
| + originalColor: new Cesium.Color() | ||
| +}; | ||
| + | ||
| +// Information about the currently highlighted feature | ||
| +var highlighted = { | ||
| + feature: undefined, | ||
| + originalColor: new Cesium.Color() | ||
| +}; | ||
| + | ||
| +// An entity object which will hold info about the currently selected feature for infobox display | ||
| +var selectedEntity = new Cesium.Entity(); | ||
| + | ||
| +// Color a feature yellow on hover. | ||
| +viewer.screenSpaceEventHandler.setInputAction(function onMouseMove(movement) { | ||
| + // If a feature was previously highlighted, undo the highlight | ||
| + if (Cesium.defined(highlighted.feature)) { | ||
| + highlighted.feature.color = highlighted.originalColor; | ||
| + highlighted.feature = undefined; | ||
| + } | ||
| + | ||
| + // Pick a new feature | ||
| + var pickedFeature = viewer.scene.pick(movement.endPosition); | ||
| + if (!Cesium.defined(pickedFeature)) { | ||
| + nameOverlay.style.display = 'none'; | ||
| + return; | ||
| + } | ||
| + | ||
| + // A feature was picked, so show it's overlay content | ||
| + nameOverlay.style.display = 'block'; | ||
| + nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + 'px'; | ||
| + nameOverlay.style.left = movement.endPosition.x + 'px'; | ||
| + var name = pickedFeature.getProperty('name'); | ||
| + if (!Cesium.defined(name)) { | ||
| + name = pickedFeature.getProperty('id'); | ||
| + } | ||
| + nameOverlay.textContent = name; | ||
| + | ||
| + // Highlight the feature if it's not already selected. | ||
| + if (pickedFeature !== selected.feature) { | ||
| + highlighted.feature = pickedFeature; | ||
| + Cesium.Color.clone(pickedFeature.color, highlighted.originalColor); | ||
| + pickedFeature.color = Cesium.Color.YELLOW; | ||
| + } | ||
| +}, Cesium.ScreenSpaceEventType.MOUSE_MOVE); | ||
| + | ||
| +// Color a feature on selection and show metadata in the InfoBox. | ||
| +var clickHandler = viewer.screenSpaceEventHandler.getInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); | ||
| +viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) { | ||
| + // If a feature was previously selected, undo the highlight | ||
| + if (Cesium.defined(selected.feature)) { | ||
| + selected.feature.color = selected.originalColor; | ||
| + selected.feature = undefined; | ||
| + } | ||
| + | ||
| + // Pick a new feature | ||
| + var pickedFeature = viewer.scene.pick(movement.position); | ||
| + if (!Cesium.defined(pickedFeature)) { | ||
| + clickHandler(movement); | ||
| + return; | ||
| + } | ||
| + | ||
| + // Select the feature if it's not already selected | ||
| + if (selected.feature === pickedFeature) { | ||
| + return; | ||
| + } | ||
| + selected.feature = pickedFeature; | ||
| + | ||
| + // Save the selected feature's original color | ||
| + if (pickedFeature === highlighted.feature) { | ||
| + Cesium.Color.clone(highlighted.originalColor, selected.originalColor); | ||
| + highlighted.feature = undefined; | ||
| + } else { | ||
| + Cesium.Color.clone(pickedFeature.color, selected.originalColor); | ||
| + } | ||
| + | ||
| + // Highlight newly selected feature | ||
| + pickedFeature.color = Cesium.Color.LIME; | ||
| + | ||
| + // Set feature infobox description | ||
| + var featureName = pickedFeature.getProperty('name'); | ||
| + selectedEntity.name = featureName; | ||
| + selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; | ||
| + viewer.selectedEntity = selectedEntity; | ||
| + selectedEntity.description = '<table class="cesium-infoBox-defaultTable"><tbody>' + | ||
| + '<tr><th>BIN</th><td>' + pickedFeature.getProperty('BIN') + '</td></tr>' + | ||
| + '<tr><th>DOITT ID</th><td>' + pickedFeature.getProperty('DOITT_ID') + '</td></tr>' + | ||
| + '<tr><th>SOURCE ID</th><td>' + pickedFeature.getProperty('SOURCE_ID') + '</td></tr>' + | ||
| + '</tbody></table>'; | ||
| +}, Cesium.ScreenSpaceEventType.LEFT_CLICK); | ||
| +//Sandcastle_End | ||
| +Sandcastle.finishedLoading(); | ||
| +} | ||
| +if (typeof Cesium !== "undefined") { | ||
| + startup(Cesium); | ||
| +} else if (typeof require === "function") { | ||
| + require(["Cesium"], startup); | ||
| +} | ||
| +</script> | ||
| +</body> | ||
| +</html> |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
0 comments on commit
5838c6f