UNPKG

kitchen-simulator

Version:

It is a kitchen simulator (self-contained micro-frontend).

279 lines (273 loc) 11.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = WallFactory; var _react = _interopRequireDefault(require("react")); var _wallFactory3d = require("./wall-factory-3d"); var SharedStyle = _interopRequireWildcard(require("../../shared-style")); var Geometry = _interopRequireWildcard(require("../../utils/geometry")); var _translator = _interopRequireDefault(require("../../translator/translator")); var _constants = require("../../constants"); var _line = _interopRequireDefault(require("../../class/line")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } // import Line from 'src/class/line'; var epsilon = 20; var STYLE_TEXT = { textAnchor: 'middle' }; var STYLE_LINE = { stroke: SharedStyle.LINE_MESH_COLOR.unselected // stroke: "red" , // strokeWidth:1 }; var STYLE_INTERIOR_LINE = { strokeWidth: 1, stroke: SharedStyle.INTERIOR_LINE.unselected }; var STYLE_INTERIOR_LINE_SELECTED = { strokeWidth: 2, stroke: SharedStyle.INTERIOR_LINE.selected, fill: SharedStyle.INTERIOR_LINE.selected, rx: '2px' }; var STYLE = { fill: '#0096fd', stroke: SharedStyle.COLORS.white, cursor: 'move' }; var STYLE_POLYGON = { strokeWidth: 1, strokeLinejoin: 'round', stroke: SharedStyle.LINE_MESH_COLOR.unselected, rx: '2px', fill: SharedStyle.LINE_MESH_COLOR.unselected }; var STYLE_POLYGON_SELECTED = { strokeWidth: 1, strokeLinejoin: 'round', rx: '2px', stroke: SharedStyle.LINE_MESH_COLOR.selected, fill: SharedStyle.LINE_MESH_COLOR.selected }; var translator = new _translator["default"](); /** Create Lines from State */ var createLineGeometry = function createLineGeometry(scene, state) { var wall_thickness = _constants.LINE_THICKNESS / 2; var layerID = scene.selectedLayer; var layer = scene.getIn(['layers', layerID]); var lines = layer.lines; lines.toArray().forEach(function (line) { var vertex0Id = line.vertices.get(0); var vertex1Id = line.vertices.get(1); var _layer$vertices$get = layer.vertices.get(vertex0Id), x0 = _layer$vertices$get.x, y0 = _layer$vertices$get.y; var _layer$vertices$get2 = layer.vertices.get(vertex1Id), x1 = _layer$vertices$get2.x, y1 = _layer$vertices$get2.y; if (x0 == x1 && y0 == y1) return; var allLines = layer.lines.toArray(); var relatedLineArray = []; var relatedLine0 = allLines.filter(function (allLine) { return allLine.vertices.toArray().includes(vertex0Id) && line.id != allLine.id; })[0]; var relatedLine1 = allLines.filter(function (allLine) { return allLine.vertices.toArray().includes(vertex1Id) && line.id != allLine.id; })[0]; var normalVertice = Geometry.getNormaline(x0, y0, x1, y1); var rx0 = x0 + normalVertice.x * wall_thickness; var ry0 = y0 + normalVertice.y * wall_thickness; var rx1 = x1 + normalVertice.x * wall_thickness; var ry1 = y1 + normalVertice.y * wall_thickness; var intersection = []; relatedLine0 ? relatedLineArray.push({ index: 0, line: relatedLine0 }) : intersection.push({ index: 0, point: { x: rx0, y: ry0 } }); relatedLine1 ? relatedLineArray.push({ index: 1, line: relatedLine1 }) : intersection.push({ index: 1, point: { x: rx1, y: ry1 } }); var originalLineFunction = Geometry.linePassingThroughTwoPoints(x0, y0, x1, y1); originalLineFunction.c -= Math.sqrt(originalLineFunction.b * originalLineFunction.b + originalLineFunction.a * originalLineFunction.a) * wall_thickness; relatedLineArray.forEach(function (lineInfo) { var vertexId, originx, originy; var index = lineInfo.index, relatedLine = lineInfo.line; index == 0 ? (vertexId = vertex0Id, originx = x0, originy = y0) : (vertexId = vertex1Id, originx = x1, originy = y1); var relatedVertices = relatedLine.vertices.toArray(); var relatedOtherVertexID = relatedVertices[0] == vertexId ? relatedVertices[1] : relatedVertices[0]; var relatedVertex = layer.getIn(['vertices', relatedOtherVertexID]); if (originx == relatedVertex.x && originy == relatedVertex.y) return; var relatedLineFunction = Geometry.linePassingThroughTwoPoints(originx, originy, relatedVertex.x, relatedVertex.y); var delta = Geometry.distancePointFromLine(relatedLineFunction.a, relatedLineFunction.b, relatedLineFunction.c, index == 0 ? x1 : x0, index == 0 ? y1 : y0); // console.log(relatedLineFunction,"relatedLinefunction") if (delta < 0.01) { // if the directions of the current line and related line, then no need to calculate the inteersection point // let rx = originx + normalVertice.x * wall_thickness; // let ry = originy + normalVertice.y * wall_thickness; var rx = originx + normalVertice.x * wall_thickness; var ry = originy + normalVertice.y * wall_thickness; intersection.push({ index: index, point: { x: rx, y: ry } }); } else { relatedLineFunction.c -= (relatedVertices[0] == vertexId ? 1 : -1) * Math.sqrt(relatedLineFunction.b * relatedLineFunction.b + relatedLineFunction.a * relatedLineFunction.a) * wall_thickness; var point = Geometry.twoLinesIntersection(originalLineFunction.a, originalLineFunction.b, originalLineFunction.c, relatedLineFunction.a, relatedLineFunction.b, relatedLineFunction.c); point && intersection.push({ index: index, point: point }); } }); state = _line["default"].setRelatedLine(state, layer.id, line.id, intersection).updatedState; }); return { updatedState: state }; }; function WallFactory(name, info, textures) { var wallElement = { name: name, prototype: 'lines', info: info, height: { label: translator.t('height'), type: 'length-measure', defaultValue: { length: 243.84 } }, thickness: { label: translator.t('thickness'), type: 'length-measure', defaultValue: { length: _constants.LINE_THICKNESS / 2 } }, properties: {}, render2D: function render2D(element, layer, scene, state) { state = createLineGeometry(scene, state).updatedState; scene = state.getIn(['scene']); layer = scene.getIn(['layers', scene.selectedLayer]); element = layer.getIn(['lines', element['id']]); // let element = layer.lines[telement.id]; var _layer$vertices$get3 = layer.vertices.get(element.vertices.get(0)), x1 = _layer$vertices$get3.x, y1 = _layer$vertices$get3.y; var _layer$vertices$get4 = layer.vertices.get(element.vertices.get(1)), x2 = _layer$vertices$get4.x, y2 = _layer$vertices$get4.y; var layertemp = state.sceneHistory.getIn(['last', 'layers', 'layer-1']); var verticesinfo = layer.vertices.get(element.vertices.get(0)); var length = Geometry.pointsDistance(x1, y1, x2, y2); var length_5 = length / 5; var thickness = _constants.LINE_THICKNESS; // let thickness = element.getIn(['properties', 'thickness', 'length']); var half_thickness = thickness / 2; var half_thickness_eps = half_thickness + epsilon; var char_height = 11; var extra_epsilon = 5; var textDistance = half_thickness + epsilon + extra_epsilon; var related0x = x1, related0y = y1, related1x = x2, related1y = y2; element.relatedVertices.forEach(function (relatedVertice, index) { if (relatedVertice.index == undefined) relatedVertice = relatedVertice.toJSON(); if (relatedVertice.index == 0) { related0x = relatedVertice.point.x; related0y = relatedVertice.point.y; } else { related1x = relatedVertice.point.x; related1y = relatedVertice.point.y; } }); //Fill a polygon with the pattern specified by the polygon's id.(For example:fill='url(#pat) =><pattern id="pat">) var outwall = /*#__PURE__*/_react["default"].createElement("defs", null, /*#__PURE__*/_react["default"].createElement("pattern", { id: "pat", x: "0", y: "0", width: "5", height: "5", patternUnits: "userSpaceOnUse" }, /*#__PURE__*/_react["default"].createElement("line", { x1: "0", y1: "0", x2: "3", y2: "3", style: STYLE_LINE }))); return !element.selected ? /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("polygon", { points: "".concat(x1, ",").concat(y1, " ").concat(related0x, ",").concat(related0y, " ").concat(related1x, ",").concat(related1y, " ").concat(x2, ",").concat(y2), fill: "url(#pat)", fillRule: "evenodd" }), outwall, /*#__PURE__*/_react["default"].createElement("line", { x1: x1, y1: y1, x2: x2, y2: y2, style: STYLE_INTERIOR_LINE })) : /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("polygon", { points: "".concat(x1, ",").concat(y1, " ").concat(related0x, ",").concat(related0y, " ").concat(related1x, ",").concat(related1y, " ").concat(x2, ",").concat(y2), fill: "url(#pat)", fillRule: "evenodd" }), outwall, /*#__PURE__*/_react["default"].createElement("line", { x1: x1, y1: y1, x2: x2, y2: y2, style: STYLE_INTERIOR_LINE_SELECTED })); }, render3D: function render3D(element, layer, scene, mode) { return (0, _wallFactory3d.buildWall)(element, layer, scene, textures, mode); }, updateRender3D: function updateRender3D(element, layer, scene, mesh, oldElement, differences, selfDestroy, selfBuild) { return (0, _wallFactory3d.updatedWall)(element, layer, scene, textures, mesh, oldElement, differences, selfDestroy, selfBuild); } }; if (textures && textures !== {}) { var textureValues = { none: 'None' }; for (var textureName in textures) { textureValues[textureName] = textures[textureName].name; } /* wallElement.properties.textureA = { label:'Fronts ' + translator.t('texture'), type: 'enum', defaultValue: textureValues.bricks ? 'bricks' : 'none', values: textureValues }; */ wallElement.properties.textureB = { //label:'Back ' + translator.t('texture'), label: 'Walls', type: 'enum', defaultValue: textureValues.bricks ? 'bricks' : 'none', values: textureValues }; } return wallElement; } module.exports = exports.default;