Source: components/PlanePointsHelperComponent.js

import { Utils } from '../common/Utils';
import { MathUtils } from '../math/MathUtils';
import { BaseLineSegmentsHelperComponent } from './BaseLineSegmentsHelperComponent';

/**
 * @class PlanePointsHelperComponent
 * The plane points helper component.
 * @memberof THING
 * @extends THING.BaseLineSegmentsHelperComponent
 * @public
 */
class PlanePointsHelperComponent extends BaseLineSegmentsHelperComponent {

	/**
	 * The helper of base points object in plane.
	 * @param {Object} param The initial parameters.
	 */
	constructor(param = {}) {
		super();
	}

	// #region Private

	_addLines(points, color) {
		if (!points.length) {
			return;
		}

		let originPoint = [points[0][0], 0, points[0][1]];
		let startPoint = originPoint;
		for (let i = 1; i < points.length; i++) {
			let point = points[i];

			let position = [point[0], 0, point[1]];
			this.addLine(startPoint, position, color);

			startPoint = position;
		}

		this.addLine(startPoint, originPoint, color);
	}

	// #endregion

	// #region BaseComponent Interface

	onAdd(object) {
		super.onAdd(object);
	}

	// #endregion

	refresh() {
		// Begin to build lines
		this.begin();

		// Make little higher to let it can be seen
		this.lineSegments.setPosition([0, 0.001, 0]);

		// Make hole(s) lines
		this.object.selfPlaneHoles.forEach(points => {
			this._addLines(points, [1, 0, 0]);
		});

		// Make point(s) lines
		this._addLines(this.object.localPoints, [0, 1, 0]);

		// End to build lines
		this.end();
	}

	// #region Accessors

	/**
	 * Show/Hide helper.
	 * @type {Boolean}
	 * @public
	 */
	get visible() {
		return this.lineSegments.getVisible();
	}
	set visible(value) {
		this.lineSegments.setVisible(value);

		this.refresh();
	}

	// #endregion

}

export { PlanePointsHelperComponent }