UNPKG

awv3

Version:
178 lines (134 loc) 7.56 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _three = require('three'); var THREE = _interopRequireWildcard(_three); var _object = require('awv3/three/object3'); var _object2 = _interopRequireDefault(_object); var _region = require('awv3/three/region'); var _region2 = _interopRequireDefault(_region); var _plugin = require('../../session/plugin'); var _plugin2 = _interopRequireDefault(_plugin); var _observablemap = require('./observablemap'); var _observablemap2 = _interopRequireDefault(_observablemap); var _elements = require('../../session/elements'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var resources = ["help"].reduce(function (prev, item) { return (0, _extends4.default)({}, prev, (0, _defineProperty3.default)({}, item, require('url-loader!./resources/' + item + '.png'))); }, {}); var Selection = function (_Plugin) { (0, _inherits3.default)(Selection, _Plugin); function Selection(session, args) { (0, _classCallCheck3.default)(this, Selection); var _this = (0, _possibleConstructorReturn3.default)(this, (Selection.__proto__ || (0, _getPrototypeOf2.default)(Selection)).call(this, session, (0, _extends4.default)({ type: "Selection", icon: "help", resources: resources }, args))); _this.button = new _elements.Button(_this, { name: "Select", color: "blue" }); _this.addElement(_this.button); _this.labels = new _elements.Group(_this, { format: _elements.Group.Format.Default }); _this.addElement(_this.labels); return _this; } (0, _createClass3.default)(Selection, [{ key: 'onDisabled', value: function onDisabled() { this.points.destroy(); this.selected.forEach(function (item) { item._selected = false; item.animate(item._original).start(500); }); this.selected.clear(); this.session.pool.removeInteraction(); } }, { key: 'onEnabled', value: function onEnabled() { var _this2 = this; this.resetElements(); this.button.observe(function (state) { return state.lastEvent; }, function (what) { // Create new group for points _this2.points = new _object2.default(); _this2.session.pool.temporary.add(_this2.points); var createPoint = function createPoint(point, meta) { var geometry = new THREE.SphereBufferGeometry(1, 32, 32); var material = new THREE.MeshBasicMaterial({ color: 0x676767 }); var sphere = new THREE.Mesh(geometry, material); sphere.userData.meta = material.meta = meta; sphere.position.copy(point); _this2.points.add(sphere); }; // 1: Create points, midpoints, etc _this2.session.pool.traverse(function (item) { if (item.type === 'Region') item.points.forEach(function (obj) { return createPoint(obj.meta.position, (0, _extends4.default)({}, obj.meta, { id: obj.id })); });else if (item.type === 'LineSegments') { item.material.materials.forEach(function (line) { switch (line.meta.type) { case 'arc': createPoint(line.meta.center, (0, _extends4.default)({}, line.meta, { type: 'point' })); break; } }); } }); // 2: Observable map catching all results ... _this2.selected = new _observablemap2.default(); _this2.selected.on("changed", function () { _this2.labels.removeAllChilds(); _this2.labels.children = (0, _from2.default)(_this2.selected.values()).map(function (item) { var label = new _elements.Label(_this2, { value: item.meta.id }); return label.id; }); }); // 3: Interaction on pool _this2.session.pool.createInteraction({ recursive: true, types: ['Mesh', 'LineSegments'] }); _this2.session.pool.on({ Hovered: function Hovered(event) { console.log(event); _this2.session.pool.view.setCursor('pointer'); if (event.material._selected) return; var anim = event.material.animate({ color: new THREE.Color(0x28d79f) }); if (!event.material._original) event.material._original = event.material.animate({ color: new THREE.Color('green') }).getProperties(); anim.start(0); }, Unhovered: function Unhovered(event) { if (event.material._selected) return; event.material.animate(event.material._original).start(500); }, Clicked: function Clicked(event) { event.material._selected = event.material._selected ? !event.material._selected : true; if (event.material._selected) _this2.selected.set(event.material.id, event.material);else _this2.selected.delete(event.material.id); event.material.animate({ color: new THREE.Color(event.material._selected ? 0xc23369 : 0x28d79f) }).start(500); }, Missed: function Missed(event) { _this2.selected.forEach(function (item) { item._selected = false; item.animate(item._original).start(500); }); _this2.selected.clear(); } }); }); } }]); return Selection; }(_plugin2.default); exports.default = Selection;