react-planner-viewer
Version:
react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode
86 lines (71 loc) • 9.09 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { pointsDistance, angleBetweenTwoPointsAndOrigin } from '../../utils/geometry';
import Ruler from './ruler';
export default function Line(_ref) {
var line = _ref.line,
layer = _ref.layer,
scene = _ref.scene,
catalog = _ref.catalog,
fontSize = _ref.fontSize;
var vertex0 = layer.vertices.get(line.vertices.get(0));
var vertex1 = layer.vertices.get(line.vertices.get(1));
if (vertex0.id === vertex1.id) return null; //avoid 0-length lines
if (vertex0.x === vertex1.x && vertex0.y === vertex1.y) return null;
var x1 = vertex0.x,
y1 = vertex0.y;
var x2 = vertex1.x,
y2 = vertex1.y;
if (x1 > x2) {
x1 = vertex1.x;
y1 = vertex1.y;
x2 = vertex0.x;
y2 = vertex0.y;
}
var length = pointsDistance(x1, y1, x2, y2);
var angle = angleBetweenTwoPointsAndOrigin(x1, y1, x2, y2);
var renderedHoles = line.holes.map(function (holeID) {
var hole = layer.holes.get(holeID);
var startAt = length * hole.offset;
var renderedHole = catalog.getElement(hole.type).render2D(hole, layer, scene, fontSize);
return React.createElement(
'g',
{
key: holeID,
transform: 'translate(' + startAt + ', 0)',
'data-element-root': true,
'data-prototype': hole.prototype,
'data-id': hole.id,
'data-selected': hole.selected,
'data-layer': layer.id
},
' ',
renderedHole,
' '
);
});
var unit = scene.unit;
var renderedLine = catalog.getElement(line.type).render2D(line, layer);
var renderedRuler = line.selected ? React.createElement(Ruler, { unit: unit, length: length, transform: 'translate(0, 15)' }) : null;
return React.createElement(
'g',
{
transform: 'translate(' + x1 + ', ' + y1 + ') rotate(' + angle + ', 0, 0)',
'data-element-root': true,
'data-prototype': line.prototype,
'data-id': line.id,
'data-selected': line.selected,
'data-layer': layer.id,
style: line.selected ? { cursor: "move" } : {}
},
renderedLine,
renderedHoles
);
}
Line.propTypes = {
line: PropTypes.object.isRequired,
layer: PropTypes.object.isRequired,
scene: PropTypes.object.isRequired,
catalog: PropTypes.object.isRequired
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdlcjJkL2xpbmUuanN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHJvcFR5cGVzIiwicG9pbnRzRGlzdGFuY2UiLCJhbmdsZUJldHdlZW5Ud29Qb2ludHNBbmRPcmlnaW4iLCJSdWxlciIsIkxpbmUiLCJsaW5lIiwibGF5ZXIiLCJzY2VuZSIsImNhdGFsb2ciLCJmb250U2l6ZSIsInZlcnRleDAiLCJ2ZXJ0aWNlcyIsImdldCIsInZlcnRleDEiLCJpZCIsIngiLCJ5IiwieDEiLCJ5MSIsIngyIiwieTIiLCJsZW5ndGgiLCJhbmdsZSIsInJlbmRlcmVkSG9sZXMiLCJob2xlcyIsIm1hcCIsImhvbGUiLCJob2xlSUQiLCJzdGFydEF0Iiwib2Zmc2V0IiwicmVuZGVyZWRIb2xlIiwiZ2V0RWxlbWVudCIsInR5cGUiLCJyZW5kZXIyRCIsInByb3RvdHlwZSIsInNlbGVjdGVkIiwidW5pdCIsInJlbmRlcmVkTGluZSIsInJlbmRlcmVkUnVsZXIiLCJjdXJzb3IiLCJwcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixZQUF0QjtBQUNBLFNBQVFDLGNBQVIsRUFBd0JDLDhCQUF4QixRQUE2RCxzQkFBN0Q7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLFNBQWxCOztBQUVBLGVBQWUsU0FBU0MsSUFBVCxPQUF1RDtBQUFBLE1BQXhDQyxJQUF3QyxRQUF4Q0EsSUFBd0M7QUFBQSxNQUFsQ0MsS0FBa0MsUUFBbENBLEtBQWtDO0FBQUEsTUFBM0JDLEtBQTJCLFFBQTNCQSxLQUEyQjtBQUFBLE1BQXBCQyxPQUFvQixRQUFwQkEsT0FBb0I7QUFBQSxNQUFYQyxRQUFXLFFBQVhBLFFBQVc7OztBQUVwRSxNQUFJQyxVQUFVSixNQUFNSyxRQUFOLENBQWVDLEdBQWYsQ0FBbUJQLEtBQUtNLFFBQUwsQ0FBY0MsR0FBZCxD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O0FBWEgsR0FERjtBQWdCRDs7QUFFRG5CLEtBQUtvQyxTQUFMLEdBQWlCO0FBQ2ZuQyxRQUFNTCxVQUFVeUMsTUFBVixDQUFpQkMsVUFEUjtBQUVmcEMsU0FBT04sVUFBVXlDLE1BQVYsQ0FBaUJDLFVBRlQ7QUFHZm5DLFNBQU9QLFVBQVV5QyxNQUFWLENBQWlCQyxVQUhUO0FBSWZsQyxXQUFTUixVQUFVeUMsTUFBVixDQUFpQkM7QUFKWCxDQUFqQiIsImZpbGUiOiJsaW5lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQge3BvaW50c0Rpc3RhbmNlLCBhbmdsZUJldHdlZW5Ud29Qb2ludHNBbmRPcmlnaW59IGZyb20gJy4uLy4uL3V0aWxzL2dlb21ldHJ5JztcbmltcG9ydCBSdWxlciBmcm9tICcuL3J1bGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGluZSh7bGluZSwgbGF5ZXIsIHNjZW5lLCBjYXRhbG9nLCBmb250U2l6ZX0pIHtcblxuICBsZXQgdmVydGV4MCA9IGxheWVyLnZlcnRpY2VzLmdldChsaW5lLnZlcnRpY2VzLmdldCgwKSk7XG4gIGxldCB2ZXJ0ZXgxID0gbGF5ZXIudmVydGljZXMuZ2V0KGxpbmUudmVydGljZXMuZ2V0KDEpKTtcblxuICBpZiAodmVydGV4MC5pZCA9PT0gdmVydGV4MS5pZCkgcmV0dXJuIG51bGw7IC8vYXZvaWQgMC1sZW5ndGggbGluZXNcbiAgaWYgKHZlcnRleDAueCA9PT0gdmVydGV4MS54ICYmIHZlcnRleDAueSA9PT0gdmVydGV4MS55KSByZXR1cm4gbnVsbDtcblxuICBsZXQge3g6IHgxLCB5OiB5MX0gPSB2ZXJ0ZXgwO1xuICBsZXQge3g6IHgyLCB5OiB5Mn0gPSB2ZXJ0ZXgxO1xuXG4gIGlmICh4MSA+IHgyKSB7XG4gICAgKHt4OiB4MSwgeTogeTF9ID0gdmVydGV4MSk7XG4gICAgKHt4OiB4MiwgeTogeTJ9ID0gdmVydGV4MCk7XG4gIH1cblxuICBsZXQgbGVuZ3RoID0gcG9pbnRzRGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIpO1xuICBsZXQgYW5nbGUgPSBhbmdsZUJldHdlZW5Ud29Qb2ludHNBbmRPcmlnaW4oeDEsIHkxLCB4MiwgeTIpO1xuXG4gIGxldCByZW5kZXJlZEhvbGVzID0gbGluZS5ob2xlcy5tYXAoaG9sZUlEID0+IHtcbiAgICBsZXQgaG9sZSA9IGxheWVyLmhvbGVzLmdldChob2xlSUQpO1xuICAgIGxldCBzdGFydEF0ID0gbGVuZ3RoICogaG9sZS5vZmZzZXQ7XG4gICAgbGV0IHJlbmRlcmVkSG9sZSA9IGNhdGFsb2cuZ2V0RWxlbWVudChob2xlLnR5cGUpLnJlbmRlcjJEKGhvbGUsIGxheWVyLCBzY2VuZSwgZm9udFNpemUpO1xuXG4gICAgcmV0dXJuIDxnXG4gICAgICBrZXk9e2hvbGVJRH1cbiAgICAgIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke3N0YXJ0QXR9LCAwKWB9XG4gICAgICBkYXRhLWVsZW1lbnQtcm9vdFxuICAgICAgZGF0YS1wcm90b3R5cGU9e2hvbGUucHJvdG90eXBlfVxuICAgICAgZGF0YS1pZD17aG9sZS5pZH1cbiAgICAgIGRhdGEtc2VsZWN0ZWQ9e2hvbGUuc2VsZWN0ZWR9XG4gICAgICBkYXRhLWxheWVyPXtsYXllci5pZH1cbiAgICA+IHtyZW5kZXJlZEhvbGV9IDwvZz47XG4gIH0pO1xuXG4gIGxldCB7dW5pdH0gPSBzY2VuZTtcblxuICBsZXQgcmVuZGVyZWRMaW5lID0gY2F0YWxvZy5nZXRFbGVtZW50KGxpbmUudHlwZSkucmVuZGVyMkQobGluZSwgbGF5ZXIpO1xuICBsZXQgcmVuZGVyZWRSdWxlciA9IGxpbmUuc2VsZWN0ZWQgPyA8UnVsZXIgdW5pdD17dW5pdH0gbGVuZ3RoPXtsZW5ndGh9IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLCAxNSlcIi8+IDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxnXG4gICAgICB0cmFuc2Zvcm09e2B0cmFuc2xhdGUoJHt4MX0sICR7eTF9KSByb3RhdGUoJHthbmdsZX0sIDAsIDApYH1cbiAgICAgIGRhdGEtZWxlbWVudC1yb290XG4gICAgICBkYXRhLXByb3RvdHlwZT17bGluZS5wcm90b3R5cGV9XG4gICAgICBkYXRhLWlkPXtsaW5lLmlkfVxuICAgICAgZGF0YS1zZWxlY3RlZD17bGluZS5zZWxlY3RlZH1cbiAgICAgIGRhdGEtbGF5ZXI9e2xheWVyLmlkfVxuICAgICAgc3R5bGU9e2xpbmUuc2VsZWN0ZWQgPyB7Y3Vyc29yOiBcIm1vdmVcIn0gOiB7fX1cbiAgICA+XG4gICAgICB7LypyZW5kZXJlZFJ1bGVyKi99XG4gICAgICB7cmVuZGVyZWRMaW5lfVxuICAgICAge3JlbmRlcmVkSG9sZXN9XG4gICAgPC9nPlxuICApO1xuXG59XG5cbkxpbmUucHJvcFR5cGVzID0ge1xuICBsaW5lOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGxheWVyOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHNjZW5lOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNhdGFsb2c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbn07XG4iXX0=