import { Utils } from '../common/Utils';
import { HelperComponent } from './HelperComponent';
import { NodeUserDataType, InheritType } from '../const';
const __ = {
private: Symbol('private'),
}
/**
* @class BaseLineSegmentsHelperComponent
* The base line seguments helper component.
* @memberof THING
* @extends THING.HelperComponent
*/
class BaseLineSegmentsHelperComponent extends HelperComponent {
/**
* The base line segments helper to show points, you can inherit from it when you need to show drawing points.
*/
constructor() {
super();
this[__.private] = {};
let _private = this[__.private];
_private.points = [];
_private.colors = [];
_private.lineSegments = null;
}
// #region BaseComponent Interface
onAdd(object) {
super.onAdd(object);
let _private = this[__.private];
// Initialize points and colors
// Create helper lines for camera
_private.lineSegments = Utils.createObject('LineSegments');
_private.lineSegments.setAttribute('Pickable', false);
_private.lineSegments.getUserData()[NodeUserDataType.BoundingBoxInheritType] = InheritType.Stop;
// Hide it as default
_private.lineSegments.setVisible(false);
// Add as renderable node
this.object.body.createRootNode();
this.object.node.add(_private.lineSegments);
}
onRemove() {
super.onRemove();
let _private = this[__.private];
_private.lineSegments.dispose();
}
// #endregion
addPoint(point, color) {
let _private = this[__.private];
_private.points.push(point);
_private.colors.push(color);
}
addLine(a, b, color) {
this.addPoint(a, color);
this.addPoint(b, color);
}
begin() {
}
end() {
let object = this.object;
object.body.createRootNode();
object.node.add(this.lineSegments);
this.lineSegments.setSize(this.points.length * 3);
this.lineSegments.setPoints(this.points);
this.lineSegments.setColors(this.colors);
}
/**
* Show/Hide lines.
* @type {Boolean}
*/
get visible() {
let _private = this[__.private];
return _private.lineSegments.getVisible();
}
set visible(value) {
let _private = this[__.private];
_private.lineSegments.setVisible(value);
}
/**
* Get points of line(s).
* @type {Array<Array<Number>>}
*/
get points() {
let _private = this[__.private];
return _private.points;
}
/**
* Get colors of line(s).
* @type {Array<Array<Number>>}
*/
get colors() {
let _private = this[__.private];
return _private.colors;
}
get lineSegments() {
let _private = this[__.private];
return _private.lineSegments;
}
}
export { BaseLineSegmentsHelperComponent }