awv3
Version:
⚡ AWV3 embedded CAD
178 lines (134 loc) • 7.56 kB
JavaScript
;
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;