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

@wework/floormap.gl

Package Overview
Dependencies
Maintainers
21
Versions
124
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wework/floormap.gl

[![CircleCI](https://circleci.com/gh/WeConnect/floormap.gl/tree/develop.svg?style=svg&circle-token=7a454df358fec7f29d420d750aeeaa0b5a10c8bd)](https://circleci.com/gh/WeConnect/floormap.gl/tree/develop) [![Coverage Status](https://coveralls.io/repos/github

  • 1.0.0
  • npm
  • Socket score

Version published
Weekly downloads
55
increased by1733.33%
Maintainers
21
Weekly downloads
 
Created
Source

floormap.gl

CircleCI Coverage Status

A javascript rendering engine that provides a simple interface to draw shapes, image, text and line on the screen.

Get Started

Clone the project

git clone git@github.com:WeConnect/floormap.gl.git
cd floormap.gl

Install dependencies

yarn install

Note: For those users who encounters error like https://registry.yarnpkg.com/@wework%2ffloormap-utils: Not found after this step, he or she may need to yarn login first to the wework npm registry and then yarn install again. Alternatively, you can manually build and link the floormap-utils library.

Building the library

yarn build

A dist folder will be created, and outputs files are floormap.gl.min.js, index.js and index.es.js files

Note: In order to use this floormap.gl library in your own node application, you may yarn link first and it will register @wework/floormap.gl in your local development. Then yarn link '@wework/floormap.gl' in your node application

Example usage in HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>FloorMapGL</title>
</head>
<body>
  <div id="floormap"></div>
  <script type="text/javascript" src="dist/floormap.gl.min.js" ></script>
  <script>
    // create a renderer
    var renderer = new FloorMapGL({
      target: document.getElementById('floormap'),
      size: {
        width: 500,
        height: 500
      },
      backgroundColor: 'grey',
      antialias: true,
      pixelRatio: 2
    })

    // draw a simple mesh
    renderer.draw({
      id: '001',
      tags: ['hello'],
      type: 'MESH',
      style: {
        color: 'rgb(155, 255, 55)',
        side: 'FRONT',
        outline: {
          color: 'rgb(255, 0, 0)',
          only: false
        }
      },
      points: [
        { x: -1, y: -1 },
        { x: 1, y: -1 },
        { x: 1, y: 1 },
        { x: -1, y: 1 }
      ],
      interactable: true,
      extrude: 0,
      position: { x: 0, y: 0, z: 0 },
      rotation: { x: 0, y: 0, z: 0 },
      scale: { x: 10, y: 10, z: 10 }
    },
    false,
    (success) => {
      console.log(success)
    },
    (error) => {
      console.log(e)
    })
  </script>
</body>
</html>

Example usage in ReactJs application

link the floormap.gl package in your node application

yarn link '@wework/floormap.gl'

or download the package directly from the npm

yarn add '@wework/floormap.gl'

Example usage in a react application

import React, { Component } from 'react'
import FloorMapGL from '@wework/floormap.gl'

class FloorMap extends Component {
  componentDidMount() {
    this.renderer = new FloorMapGL({
      target: this.mount,
      size: {
        width: 500,
        height: 500
      },
      backgroundColor: 'grey',
      antialias: true,
      pixelRatio: 2
    })

    this.renderer.draw(
      {
        id: '001',
        tags: ['hello'],
        type: 'MESH',
        style: {
          color: 'rgb(155, 255, 55)',
          side: 'FRONT',
          outline: {
            color: 'rgb(255, 0, 0)',
            only: false
          }
        },
        points: [
          { x: -1, y: -1 },
          { x: 1, y: -1 },
          { x: 1, y: 1 },
          { x: -1, y: 1 }
        ],
        interactable: true,
        extrude: 0,
        position: { x: 0, y: 0, z: 0 },
        rotation: { x: 0, y: 0, z: 0 },
        scale: { x: 10, y: 10, z: 10 }
      },
      false,
      (success) => {
        console.log(success)
      },
      (error) => {
        console.log(e)
      }
    )
  }

  render() {
    return (
      <div
        ref={(mount) => {
          this.mount = mount
        }}
      />
    )
  }
}

export default FloorMap

Sample Applications

We have created sample applications that make use of the floormap.gl library, you may run it by entering the command below

yarn start:demo

  • Floormap : example of rendering a floormap

alt text


alt text


  • Streaming : example of rendering the scene by using streaming data

alt text


  • Wayfinding : example of rendering line and points in a floormap

alt text


  • Instancing : example of using instancing rendering method to draw chairs and tables

alt text


alt text


alt text



Creating a new Renderer

import FloorMapGL from '@wework/floormap.gl'

var renderer = new FloorMapGL({
  target: domElement,
  size: {
    width: 720,
    height: 480
  },
  backgroundColor: 'black',
  antialias: true,
  pixelRatio: 2,
  camera: {
    maxPolarAngle: 90,
    enableRotate: true,
    zoomLevel: 1
  },
  groundPlane: true
})
NameTypeDescription
targetobjectdomElement, it is required
sizesizeObjectwindow size of the renderer
backgroundColorstringbackground color of the renderer, default is 'black'
antialiasbooleanOptions to smooth the jagged line, default is true
pixelRationumberThe rendering resolution, default is 2
cameracameraObjectcamera settings
groundPlanebooleaninvisible ground plane for the mouse interaction, default is false
sizeObject
NameTypeDescription
widthnumberthe width of the renderer window, by default is 700
heightnumberthe height of the renderer window, by default is 400
cameraObject
NameTypeDescription
zoomLevelnumberzoom level of the camera view, default is 1
enableRotatebooleanto enable to control and rotate the camera view angle, default is true
maxPolarAnglenumbermax horizontal rotation of the camera in degree, default is 90. If you set it to 0 it will disable the camera to rotate in 3D view

List of APIs in floormap.gl

draw

Draw the list of renderObjects onto the screen

.draw(renderObjects: array, transparentUpdate: boolean, onSuccess: function, onError: function)

ParametersTypeDescription
arrayOfParamsarrayarray of RenderObjects
transparentUpdatebooleanflag to enable clearing and re-render the scene again for transparent object
onSuccessfunctioncallback function when successfully render this draw call
onErrorfunctioncallback function when there is an error occur in this draw call
Example:
// create your renderObjects and push into your array first
const renderObjects = []
renderObjects.push({
  id: '001',
  tags: '',
  type: 'MESH',
  style: {
    color: 'rgb(155, 255, 55)',
    side: 'FRONT',
    outline: {
      color: 'rgb(255, 0, 0)',
      only: false
    }
  },
  points: [{ x: -1, y: -1 }, { x: 1, y: -1 }, { x: 1, y: 1 }, { x: -1, y: 1 }],
  interactable: true,
  visible: true,
  extrude: 0,
  position: { x: 0, y: 0, z: 0 },
  rotation: { x: 0, y: 0, z: 0 },
  scale: { x: 1, y: 1, z: 1 },
  draw: true
})

// draw all the renderObjects using .draw
renderer.draw(
  renderObjects,
  false,
  (success) => {
    console.log(success)
  },
  (errors) => {
    console.log(errors)
  }
)

// to update the renderObjects in the future
// using the same .draw() api to update the specific renderObject by id
renderer.draw(
  [
    {
      id: '001',
      style: {
        color: 'rgb(155, 255, 55)'
      },
      position: { x: 10, y: 0, z: 0 }
    }
  ],
  false,
  (success) => {
    console.log(success)
  },
  (errors) => {
    console.log(errors)
  }
)

updateWindowDimension

Update the size of the renderer window

.updateWindowDimension({ width: Number, height: Number })

ParametersTypeDescription
widthnumbernew width for the renderer window
heightnumbernew height for the renderer window
Example:
renderer.updateWindowDimension({ width, height })

setCameraViewPoint

Set the camera panning position

.setCameraViewPoint({ position: { x: Number, y: Number, z: Number } })

Example:
renderer.setCameraViewPoint({
  position: { x: 2, y: 0, z: 5 }
})

setCameraViewAngle

Set the camera rotation view angle

.setCameraViewAngle({ polarAngle: Number, azimuthAngle: Number })

ParametersTypeDescription
polarAnglenumberrotation angle in 3d view, default is 0 degree
azimuthAnglenumberrotation angle in 2d view, default is 0 degree
Example:
renderer.setCameraViewAngle({ polarAngle: 45, azimuthAngle: -45 })

setMaxCameraViewAngle

Set the maximum camera rotation view angle

.setMaxCameraViewAngle({ maxPolarAngle: Number, maxAzimuthAngle: Number })

ParametersTypeDescription
maxPolarAnglenumberhow far you can rotate in 3d view, default is 90 degree
maxAzimuthAnglenumberhow far you can rotate in 2d view, default is 360 degree
Example:
renderer.setMaxCameraViewAngle({ maxPolarAngle: 90, maxAzimuthAngle: 360 })
renderer.setMaxCameraViewAngle({ maxPolarAngle: 0 }) // Here is one way to disable 3D view

getIdsByTags

Get all the renderObjects id by tags

.getIdsByTags(tags: Array)

Example:
renderer.getIdsByTags(['tag1', 'tag2'])

fitContent

Adjust the renderer camera view frustum to fit the content space / given drawn boundaries

.fitContent(params: Object)

ParametersTypeDescription
idstringrenderObject id, default is the whole renderScene boundary
paddingnumberadd the padding for the camera view, default is 0
pointsarraycustom boundary shape, optional
Example:
this.renderer.fitContent()
this.renderer.fitContent({ padding: 50 })
this.renderer.fitContent({ id: '07-124', padding: 50 })
this.renderer.fitContent({ points: points, padding: 50 })

createInstancedMesh

.createInstancedMesh(renderObject: object)

Example:
renderer.createInstancedMesh({
  id: 'MESH_GROUP_1',
  mesh: {
    style: {
      color: 'rgb(155, 255, 55)',
      side: 'FRONT',
      outline: {
        color: 'rgb(255, 0, 0)',
        width: 0.2,
        only: false
      }
    },
    points: [...],
    extrude: 5
  },
})

addToInstancedMesh

.addToInstancedMesh(params: object)

Example:
renderer.addToInstancedMesh({
  id: 'UUID',
  instancingId: 'MESH_GROUP_1',
  style: {
    color: 'rgb(100,101,102)'
  },
  position: { x: 0, y: 0, z: 0 },
  rotation: { z: 0 },
  scale: { x: 1, y: 1, z: 1 }
})

drawInstancedMesh

.drawInstancedMesh(params: object)

Example:
renderer.drawInstancedMesh({ id: 'MESH_GROUP_1' })

addEventListener

subscribe to a renderer event

.addEventListener(eventName: String, callback: Function)

Example:
renderer.addEventListener(renderer.Events.ONMOUSEOVER, mouseEnterCallback)
renderer.addEventListener(renderer.Events.ONMOUSEOUT, mouseLeaveCallback)
renderer.addEventListener(renderer.Events.ONCLICK, onClickCallback)

removeEventListener

unsubscribe to a renderer event

.removeEventListener(eventName: String, callback: Function)

Example:
renderer.removeEventListener(renderer.Events.ONMOUSEOVER, mouseEnterCallback)
renderer.removeEventListener(renderer.Events.ONMOUSEOUT, mouseLeaveCallback)
renderer.removeEventListener(renderer.Events.ONCLICK, onClickCallback)

removeAllEventListeners

unsubscribe all the renderer event listeners

.removeAllEventListeners()


remove

remove specific renderObject by id

.remove(id: String)

Example:
renderer.remove(id)

removeAll

remove all the renderObjects in the renderer

.removeAll()

Example:
renderer.removeAll()

Events

NameValueDescription
ONCLICK'onclick'when the user select the interactable renderObject by clicking/touching
ONHOVER'onmousehover'when the user mouse hovering the interactable renderObject
ONMOUSEOVER'onmouseover'when moving the mouse pointer onto a renderObject
ONMOUSEOUT'onmouseout'when moving the mouse pointer out of a renderObject
ONMOUSEMOVE'onmousemove'when moving the mouse pointer
ONRENDER'onrender'when .draw api successfully sent all the data to the gpu to render
ONERROR'onerror'when floormap.gl renderer encounters any internal errors
ONTEXTURELOAD'ontextureload'when texture is loaded and sent to the gpu
ONCLICK
PayloadTypeDescription
idstringid of the renderObject
pointobjectintersection point in the world space, x y z value
mousePosobjectthe mouse position in screen space, x y value
ONHOVER
PayloadTypeDescription
idstringid of the renderObject
pointobjectintersection point in the world space, x y z value
mousePosobjectthe mouse position in screen space, x y value
ONMOUSEOVER
PayloadTypeDescription
idstringid of the renderObject
pointobjectintersection point in the world space, x y z value
mousePosobjectthe mouse position in screen space, x y value
ONMOUSEOUT
PayloadTypeDescription
idstringid of the renderObject
pointobjectintersection point in the world space, x y z value
mousePosobjectthe mouse position in screen space, x y value
ONMOUSEMOVE
PayloadTypeDescription
idstringid of the renderObject
pointobjectintersection point in the world space, x y z value
mousePosobjectthe mouse position in screen space, x y value
ONRENDER
PayloadTypeDescription
frameTimenumberthe time taken to complete this draw call
memoryobjectgpu memory info
renderobjectrender info
renderObjectsarraylist of renderObjects to render in the draw call
ONERROR
PayloadTypeDescription
errorobjectError() object
ONTEXTURELOAD
PayloadTypeDescription
frameTimenumberthe time taken to complete this draw call
memoryobjectgpu memory info
renderobjectrender info
renderObjectsarraylist of renderObjects to render in the draw call

RenderObjects

Mesh

ParametersTypeDescription
idstringid of the renderObject required
tagsarrayrenderObject tags
typestringrenderObject type, 'MESH', 'SPRITE', 'TEXT' or 'LINE' required
stylemeshStyleObjectstyle of the renderObject
pointsarraypoints to construct a shape required
geometryTranslatetransformObjecttranslation for the geometry in object space
interactablebooleaninteraction of this object disable or enable
visiblebooleanvisibility flag
extrudenumberextrude level for the mesh
positiontransformObjectposition of the renderObject
rotationtransformObjectrotation of the renderObject
scaletransformObjectscale of the renderObject
Example:
{
  id: '001', // required
  tags: ['level 3'],
  type: 'MESH',
  style: {
    color: 'rgb(155, 255, 55)',
    side: 'FRONT',
    texture: {
      img: '',
      repeat: 0.5
    }
    outline: {
      color: 'rgb(255, 0, 0)',
      width: 0.2,
      only: false
    }
  },
  points: [
    { x: -1, y: -1 },
    { x: 1, y: -1 },
    { x: 1, y: 1 },
    { x: -1, y: 1 }
  ],
  geometryTranslate: {x: -1, y: -1, z: 0},
  interactable: true,
  visible: true,
  extrude: 2,
  position: { x: 0, y: 0, z: 0 },
  rotation: { x: 0, y: 0, z: 0 },
  scale: { x: 1, y: 1, z: 1 }
}
Draw Outcome:

Text

ParametersTypeDescription
idstringid of the renderObject required
tagsarrayrenderObject tags
typestringrenderObject type, 'MESH', 'SPRITE', 'TEXT' or 'LINE' required
styletextStyleObjectstyle of the renderObject
textstringtext to draw on the screen required
interactablebooleaninteraction of this object disable or enable
visiblebooleanvisibility flag
positiontransformObjectposition of the renderObject
scalarnumbertext size
Example:
{
  id: '002',
  tags: ['nothing'],
  type: 'TEXT',
  position: { x: 0, y: 0, z: 0 },
  scalar: 1.0,
  center: { x: 0.5, y: 0.5 },
  style: {
    color: 'rgb(255, 255, 255)',
    fontFamily: 'Arial, Helvetica, sans-serif',
    textAlign: 'center',
    fontWeight: 'normal', // normal, bold, bolder, lighter
    fontStyle: 'italic' // normal, italic, oblique
  },
  text: 'hello world',
  interactable: false,
  visible: true
}
Draw Outcome:

Sprite

ParametersTypeDescription
idstringid of the renderObject required
tagsarrayrenderObject tags
typestringrenderObject type, 'MESH', 'SPRITE', 'TEXT' or 'LINE' required
positiontransformObjectposition of the renderObject
styletextStyleObjectstyle of the renderObject
interactablebooleaninteraction of this object disable or enable
visiblebooleanvisibility flag
Example:
{
  id: '003',
  tags: ['level 3'],
  type: 'SPRITE',
  position: { x: 2, y: 0 },
  center: { x: 0.5, y: 0.5 },
  style: {
    color: 'rgb(255, 255, 255)',
    img: 'https://cdn.spacemob.co/img/meeting_room@2x.png',
    width: 'auto',
    height: 'auto',
    maxWidth: 3,
    maxHeight: 3
  },
  interactable: false,
  visible: true
}
Draw Outcome:

Line

ParametersTypeDescription
idstringid of the renderObject required
tagsarrayrenderObject tags
typestringrenderObject type, 'MESH', 'SPRITE', 'TEXT' or 'LINE' required
lineWidthnumberthe width of the line
pointsarraypoints for constructing the line required
positiontransformObjectposition of the renderObject
stylelineStyleObjectstyle of the renderObject
interactablebooleaninteraction of this object disable or enable
visiblebooleanvisibility flag
Example:
{
  id: '004',
  tags: ['level 3'],
  type: 'LINE',
  lineWidth: 1.0,
  points: [
    { x: 0, y: 0 },
    { x: 100, y: 0 },
    { x: 100, y: 90 },
    { x: 200, y: 20 }
  ],
  style: {
    color: 'rgb(255, 0, 255)',
    opacity: 0.7
  },
  interactable: false,
  visible: true
}
Draw Outcome:

Type Definitions

transformObject

ParametersTypeDescription
xnumberset value in x-axis
ynumberset value in y-axis
znumberset value in z-axis

meshStyleObject

ParametersTypeDescription
colorstringcolor of the object
sidestring'FRONT', 'BACK' or 'DOUBLE', default is 'FRONT'
texturenumbertexture setting of the renderObject
texture.imgstringimg path or url
texture.repeatnumberhow many times to repeat the image on the object
outlinenumberoutline setting of the renderObject
outline.colornumberoutline color of the object
outline.onlynumberif true then will be outline only object

textStyleObject

ParametersTypeDescription
colorstringcolor of the text
fontFamilystringdefault is 'Arial, Helvetica, sans-serif'
textAlignnumbertext alignment, 'center', 'left' or 'right', default is 'center'
fontWeightstring'normal', 'bold', 'bolder' or 'lighter', default is 'normal'
fontStylenumber'normal', 'italic' or 'oblique', default is 'normal'

spriteStyleObject

ParametersTypeDescription
colorstringcolor of the sprite
imgstringimage path or url
widthnumber or stringwidth of the sprite, default is 'auto'
heightnumber or stringheight of the sprite, default is 'auto'
maxWidthnumbermaximum width of the sprite
maxHeightnumbermaximum height of the sprite

lineStyleObject

ParametersTypeDescription
colorstringcolor of the line
opacitynumbertransparency of the line

FAQs

Package last updated on 15 Mar 2019

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