Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@cognite/3d-viewer

Package Overview
Dependencies
Maintainers
16
Versions
104
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cognite/3d-viewer

> Visualize Cognite's 3D models in a web browser with [WebGL](https://en.wikipedia.org/wiki/WebGL).

  • 3.0.0-rc2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
46
increased by12.2%
Maintainers
16
Weekly downloads
 
Created
Source

Cognite's 3D Viewer

Visualize Cognite's 3D models in a web browser with WebGL.

Table of Contents

Install

$ npm install @cognite/3d-viewer

Usage

With import

import { Cognite3DViewer } from '@cognite/3d-viewer';
const viewer = new Cognite3DViewer();

With script tag

<script src="{path to this folder}/lib/cognite.bundle.js"></script> // Now you have 'cognite' as a global object
<script>
  var viewer = new cognite.Cognite3DViewer();
</script>

Sample code

const viewer = new Cognite3DViewer();

// The viewer will render to a canvas.
// Add this canvas to your DOM
document.body.appendChild(viewer.canvas);

// start rendering
viewer.start();

// At this point you will only see a black canvas.

// So let's add a 3D model:
const options = {
  projectName, // Project name (tenant) in Cognite's Data Platform
  modelId,     // 3D model id (has to be under the same project)
  revisionId,  // The model's revision id
};
viewer.addModel(options).then(function(model) {
  // Move camera to look at the model
  viewer.fitCameraToModel(model, 0);
});

Note: you may need additional styling to the canvas to make it fit your use-case

canvas {
  width: 100%;
  height: 100%;
}
Add progress listeners
function onProgress(progress) {
  console.log(progress);
}

function onComplete() {
  console.log('Model loaded');
}

const options = {
  projectName,
  modelId,
  revisionId,
  onProgress, // optional
  onComplete, // optional
};
viewer.addModel(options)...
Make the model clickable
viewer.on('click', function(event) {
  const { offsetX, offsetY } = event;
  const nodeId = model.getNodeIdFromPixel(viewer.camera, viewer.renderer, offsetX, offsetY);
  if (nodeId != null) {
    // highlight the object
    model.selectNode(nodeId);
    // make the camera zoom to the object
    const boundingBox = model.getBoundingBox(nodeId);
    viewer.fitCameraToBoundingBox(boundingBox, 2000); // 2 sec
  } else {
    // Clicked outside the 3D model
  }
});

API Reference

Table of Contents

Cognite3DViewer

Cognite3DViewer is the root class of a Cognite 3D viewer. It controls all aspects of the 3D viewer.

Parameters
  • options Object (optional, default {})
    • options.noBackground boolean -- Transparent background or not (optional, default false)
Examples
const viewer = new Cognite3DViewer({
  noBackground: true,
});
isSupported

Check if the viewer supports the current browser

Examples
if (!viewer.isSupported()) {
  // create an error message to the user?
}
start

Start viewer, or resume after calling stop().

Examples
viewer.start();
stop

Stop the viewer. When stopped, the viewer will not do work, but it's state will be kept so it can restart immediately after start() is called.

Examples
viewer.stop();
on

Add event listener to the viewer call off to remove an event listener

Parameters
  • type "click"
  • func function (event:MouseEvent) -- The callback function
Examples
const onClick = event => { ... };
viewer.on('click', onClick);
off

Remove event listener from the viewer call on to add an event listener

Parameters
  • type ("click")
  • func function -- The callback function used in on
Examples
viewer.off('click', onClick);
addModel

Add a new 3D model to the viewer. call fitCameraToModel to see the model after the model has loaded

Parameters
  • options Object
    • options.projectName string -- The Cognite project the 3D model belongs to
    • options.modelId number -- The model's id
    • options.revisionId number -- The model's revision id
    • options.sceneId string -- Default to the latest scene (optional, default 'latest')
    • options.onProgress function (progress: Object)? -- Callback for progress events
    • options.onComplete function? -- Callback when the model is fully loaded
Examples
const options = {
  projectName: 'COGNITE_TENANT_NAME',
  modelId:     'COGNITE_3D_MODEL_ID',
  revisionId:  'COGNITE_3D_REVISION_ID',
};
viewer.addModel(options).then(model => {
  viewer.fitCameraToModel(model, 0);
});

Returns Promise<Cognite3DModel>

getCameraPosition

Returns camera's position

Examples
const position = viewer.getCameraPosition();

Returns THREE.Vector3 Position in global space

getCameraTarget

Returns camera's target

Examples
const target = viewer.getCameraTarget();

Returns THREE.Vector3 Target in global space

setCameraPosition

Set camera's position

Parameters
  • position THREE.Vector3 -- Position in global space
Examples
// store position, target
const position = viewer.getCameraPosition();
const target = viewer.getCameraTarget();
// restore position, target
viewer.setCameraPosition(position);
viewer.setCameraTarget(target);
setCameraTarget

Set camera's target

Parameters
  • target THREE.Vector3 -- Target in global space
Examples
// store position, target
const position = viewer.getCameraPosition();
const target = viewer.getCameraTarget();
// restore position, target
viewer.setCameraPosition(position);
viewer.setCameraTarget(target);
fitCameraToBoundingBox

Move camera to a place where the content of a bounding box is visible to the camera

Parameters
  • box THREE.Box3 -- The bounding box
  • duration number? -- The duration of the animation moving the camera. Set this to 0 (zero) to disable animation.
  • radiusFactor number? -- The the ratio of the distance from camera to center of box and radius of the box (optional, default 4)
enableKeyboardNavigation

Enables camera navigation with the keyboard.

disableKeyboardNavigation

Disables camera navigation with the keyboard.

fitCameraToModel

Move camera to a place where the 3D model is visible. It uses the bounding box of the 3D model and calls fitCameraToBoundingBox

Parameters
getScreenshot

Take screenshot from the current camera position.

Parameters
  • width number? -- Width of the final image. Default is current canvas size.
  • height number? -- Height of the final image. Default is current canvas size.

Returns Promise<string> A Blob URL to the image ('image/png')

Cognite3DModel

Extends THREE.Object3D

Cognite3DModel is the class represeting a Cognite 3D model and it's state

getBoundingBox

Get bounding box of a node

Parameters
  • nodeId number -- The node's id
  • box THREE.Box3? -- Optional target. Specify this to increase performance if the box can be reused.
Examples
const box = model.getBoundingBox(nodeId);
const reusableBox = new THREE.Box3();
const box = model.getBoundingBox(nodeId, reusableBox);
// box === reusableBox

Returns THREE.Box3

getNodeIdFromPixel

Raycasting for nodes

Parameters
  • camera THREE.Camera -- The camera to project from
  • renderer THREE.WebGLRenderer -- A renderer. The raycaster will render an image to memory for efficiency.
  • x number -- X coordinate in pixels
  • y number -- Y coordinate in pixels
Examples
const box = model.getBoundingBox(nodeId);
const reusableBox = new THREE.Box3();
const box = model.getBoundingBox(nodeId, reusableBox);
// box === reusableBox

Returns (number | null) -- If there was a hit then returns the node id

getNodeColor

Return the color on a node

Parameters
  • nodeId number -- The node's id

Returns {r: number, g: number, b: number, a: number}

setNodeColor

Set the color on a node

Parameters
  • nodeId number -- The node's id
  • r number -- The red color value (0-255)
  • g number -- The green color value (0-255)
  • b number -- The blue color value (0-255)
  • a number -- The alpha value (0-255) (optional, default 255)
selectNode

Mark a node as selected

Parameters
  • nodeId number -- The node's id
deselectNode

Mark a node as deselected

Parameters
  • nodeId number -- The node's id
deselectAllNodes

Mark all selected nodes as deselected

AssetMapping

Type: object

Properties

getAssetInfoFromNodeId

Get the assets associated with a given node.

Parameters
  • projectName strigng -- The Cognite project that the 3D model belongs to
  • modelId any -- The ID of the 3D model
  • revisionId any -- The ID of the 3D model revision
  • nodeId any -- The ID of the node to get the associated assets of

Returns Promise<Array<AssetMapping>>

Cognite3DModelLoader

Cognite3DModelLoader is the class used to load a Cognite 3D model to Three.js.

load
Parameters
  • options Object? (optional, default {})
    • options.projectName string -- The Cognite project the 3D model belongs to
    • options.modelId number -- The model's id
    • options.revisionId number -- The model's revision id
    • options.sceneId string -- Default to the latest scene (optional, default 'latest')
    • options.onProgress function (progress: Object)? -- Callback for progress events
    • options.onComplete function? -- Callback when the model is fully loaded
Examples
const options = {
  projectName: 'COGNITE_TENANT_NAME',
  modelId:     'COGNITE_3D_MODEL_ID',
  revisionId:  'COGNITE_3D_REVISION_ID',
};
Cognite3DModelLoader.load(options).then(model => {
  // if we have a THREE.Scene then:
  scene.add(model);
});

Returns Promise<Cognite3DModel>

Development Usage

How to build

  • Install yarn (npm install -g yarn).
  • Run yarn to install packages.
  • Run yarn run start and go to http://localhost:3000 where the index.html file is hosted.

Check out scripts in package.json for more commands.

How to publish

  • Run yarn publish, make sure you have bumped the version first!

Update protobuf schema

  • Run yarn run pbjs -t json -o src/proto/web_scene.json {path to web_scene.proto}

FAQs

Package last updated on 07 Sep 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc