awv3
Version:
⚡ AWV3 embedded CAD
200 lines (162 loc) • 7.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DimensionsVisualizer = exports.Dimension = undefined;
var _get2 = require("babel-runtime/helpers/get");
var _get3 = _interopRequireDefault(_get2);
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 _three = require("three");
var THREE = _interopRequireWildcard(_three);
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 Dimension = exports.Dimension = function (_THREE$Object3D) {
(0, _inherits3.default)(Dimension, _THREE$Object3D);
function Dimension() {
(0, _classCallCheck3.default)(this, Dimension);
var _this = (0, _possibleConstructorReturn3.default)(this, (Dimension.__proto__ || (0, _getPrototypeOf2.default)(Dimension)).call(this));
_this.clear();
return _this;
}
(0, _createClass3.default)(Dimension, [{
key: "clear",
value: function clear() {
while (this.children.length > 0) {
this.children.remove(this.children[this.children.length - 1]);
}this.lines = [];
this.texts = [];
this.arrows = [];
}
}, {
key: "addLine",
value: function addLine(startPos, endPos) {
var geom = new THREE.Geometry();
geom.vertices = [startPos, endPos];
var mat = new THREE.LineBasicMaterial({ color: 0xFF4444 });
var line = new THREE.LineSegments(geom, mat);
this.lines.push(line);
this.add(line);
}
}, {
key: "addText",
value: function addText(point, dir, text) {
if (!text) {
text = this.paramName + ": ";
text += this.getParamValue();
}
//TODO:
}
}, {
key: "addArrow",
value: function addArrow(point, dir) {
//TODO
}
}, {
key: "update",
value: function update(ccData) {
this.paramName = ccData.paramName;
}
}, {
key: "getParamValue",
value: function getParamValue() {
return 0.0;
}
}]);
return Dimension;
}(THREE.Object3D);
var LinearDimension = function (_Dimension) {
(0, _inherits3.default)(LinearDimension, _Dimension);
function LinearDimension() {
(0, _classCallCheck3.default)(this, LinearDimension);
return (0, _possibleConstructorReturn3.default)(this, (LinearDimension.__proto__ || (0, _getPrototypeOf2.default)(LinearDimension)).call(this));
}
(0, _createClass3.default)(LinearDimension, [{
key: "getParamValue",
value: function getParamValue() {
return this.startFootPos.distanceTo(this.endFootPos);
}
}, {
key: "update",
value: function update(ccData) {
(0, _get3.default)(LinearDimension.prototype.__proto__ || (0, _getPrototypeOf2.default)(LinearDimension.prototype), "update", this).call(this, ccData);
this.startPos = ccData.startPt;
this.endPos = ccData.endPt;
this.textPos = ccData.dimPt;
this.angle = ccData.angle;
var ori = ccData.orientationType; //TODO
//all points assumed to be on {Z = 0} plane
this.lineDir = new THREE.Vector3(Math.cos(this.angle), Math.sin(this.angle), 0.0);
if (this.endPos.clone().sub(this.startPos).dot(this.lineDir) < 0.0) this.lineDir.negate();
this.startFootPos = this.startPos.clone().sub(this.textPos).projectOnVector(this.lineDir).add(this.textPos);
this.endFootPos = this.endPos.clone().sub(this.textPos).projectOnVector(this.lineDir).add(this.textPos);
this.clear();
this.addLine(this.startFootPos, this.endFootPos);
this.addLine(this.startPos, this.startFootPos);
this.addLine(this.endPos, this.endFootPos);
this.addArrow(this.startFootPos, this.lineDir.clone().negate());
this.addArrow(this.endFootPos, this.lineDir);
this.addText(this.textPos, this.lineDir);
}
}]);
return LinearDimension;
}(Dimension);
var CircularDimension = function (_Dimension2) {
(0, _inherits3.default)(CircularDimension, _Dimension2);
function CircularDimension() {
(0, _classCallCheck3.default)(this, CircularDimension);
return (0, _possibleConstructorReturn3.default)(this, (CircularDimension.__proto__ || (0, _getPrototypeOf2.default)(CircularDimension)).call(this));
}
return CircularDimension;
}(Dimension);
//TODO: other types
/*class RadiusDimension extends Dimension {
constructor() {
super();
}
}
class DiameterDimension extends Dimension {
constructor() {
super();
}
}*/
var DimensionTypes = [["CC_LinearFeatureDimension", LinearDimension], ["CC_CircularFeatureDimension", CircularDimension]];
var DimensionsVisualizer = exports.DimensionsVisualizer = function () {
function DimensionsVisualizer() {
(0, _classCallCheck3.default)(this, DimensionsVisualizer);
}
(0, _createClass3.default)(DimensionsVisualizer, [{
key: "update",
//update old dimension object or create new (if type have changed)
//returns updated dimension object
value: function update(dimension, ccData) {
var typeChanged = true;
for (var i = 0; i < DimensionTypes.length; i++) {
if (ccData.type === DimensionTypes[i][0] && dimension.constructor === DimensionTypes[i][1]) typeChanged = false;
}if (typeChanged) return create(ccData);
dimension.update(ccData);
return dimension;
}
//create new dimension object
}, {
key: "create",
value: function create(ccData) {
var constr = undefined;
for (var i = 0; i < DimensionTypes.length; i++) {
if (ccData.type === DimensionTypes[i][0]) constr = DimensionTypes[i][1];
}if (!constr) return undefined;
var dimension = new constr();
dimension.update(ccData);
return dimension;
}
}]);
return DimensionsVisualizer;
}();