Source: objects/PlaneRegion.js

import { Utils } from '../common/Utils';
import { BasePlanePoints } from './BasePlanePoints';

let _originalQuat = [0, 0, 0, 1];

/**
 * @class PlaneRegion
 * The plane region object.
 * @memberof THING
 * @extends THING.BasePlanePoints
 * @public
 */
class PlaneRegion extends BasePlanePoints {

	static defaultTagArray = ['Region'];

	/**
	 * The plane region with points in scene.
	 * @param {Object} param The initial parameters.
	 */
	constructor(param = {}) {
		super(param);

		this._syncOptions(param);
	}

	// #region Private

	_syncOptions(param) {
		let bodyNode = this.bodyNode;

		bodyNode.begin();
		{
			super.onSyncOptions(param);
		}
		bodyNode.end();
	}

	// #endregion

	// #region Overrides

	onBeforeSetup(param) {
		if (!param['renderableNode']) {
			param['renderableNode'] = Utils.createObject('ExtrudeShape');

			// Use as horz-flat plane shape(Y-axis is up)
			param['renderableNode'].setQuaternion(_originalQuat);
		}

		super.onBeforeSetup(param);
	}

	onCreateBodyNode() {
		let shape = Utils.createObject('ExtrudeShape');
		if (!shape) {
			return null;
		}

		// We will show region as very very thin plane
		shape.setHeight(Number.MIN_VALUE);

		return shape;
	}

	onImportExternalData(external, options) {
		super.onImportExternalData(external, options);
		if (external) {
			this._syncOptions(external);
		}
	}

	// #endregion

	// #region Accessor

	// #endregion

	/**
	 * Check whether it's PlaneRegion type or inherit from it.
	 * @type {Boolean}
	 */
	get isPlaneRegion() {
		return true;
	}

}

export { PlaneRegion }