UNPKG

react-planner

Version:

react-planner is a React Component for plans design. Draw a 2D floorplan and navigate it in 3D mode.

88 lines (76 loc) 2.19 kB
import React from 'react'; import { BoxGeometry, MeshBasicMaterial, Mesh, BoxHelper } from 'three'; import { ReactPlannerSharedStyle } from 'react-planner'; export default { name: 'cube', prototype: 'items', info: { title: 'cube', tag: ['demo'], description: 'Demo item', image: require('./cube.png') }, properties: { color: { label: 'Color', type: 'color', defaultValue: ReactPlannerSharedStyle.AREA_MESH_COLOR.unselected }, width: { label: 'Width', type: 'length-measure', defaultValue: { length: 100, unit: 'cm' } }, height: { label: 'Height', type: 'length-measure', defaultValue: { length: 100, unit: 'cm' } }, depth: { label: 'Depth', type: 'length-measure', defaultValue: { length: 100, unit: 'cm' } }, }, render2D: (element, layer, scene) => { let style = { stroke: !element.selected ? ReactPlannerSharedStyle.LINE_MESH_COLOR.unselected : ReactPlannerSharedStyle.MESH_SELECTED, strokeWidth: 2, fill: element.properties.get('color') }; let w = element.properties.getIn(['width', 'length']); let d = element.properties.getIn(['depth', 'length']); let w2 = w / 2; let d2 = d / 2; return ( <g transform={`translate(-${w2}, -${d2})`}> <rect x="0" y="0" width={w} height={d} style={style} /> </g> ); }, render3D: (element, layer, scene) => { let w = element.properties.getIn(['width', 'length']); let h = element.properties.getIn(['height', 'length']); let d = element.properties.getIn(['depth', 'length']); let geometry = new BoxGeometry(w, h, d); let material = new MeshBasicMaterial({ color: element.properties.get('color') }); let mesh = new Mesh(geometry, material); let box = new BoxHelper(mesh, !element.selected ? ReactPlannerSharedStyle.LINE_MESH_COLOR.unselected : ReactPlannerSharedStyle.MESH_SELECTED ); box.material.linewidth = 2; box.renderOrder = 1000; mesh.add(box); mesh.position.y = (h / 2); return Promise.resolve(mesh); } };