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
JSX
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);
}
};