package.render.Box.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ol Show documentation
Show all versions of ol Show documentation
OpenLayers mapping library
The newest version!
/**
* @module ol/render/Box
*/
import Disposable from '../Disposable.js';
import Polygon from '../geom/Polygon.js';
class RenderBox extends Disposable {
/**
* @param {string} className CSS class name.
*/
constructor(className) {
super();
/**
* @type {import("../geom/Polygon.js").default}
* @private
*/
this.geometry_ = null;
/**
* @type {HTMLDivElement}
* @private
*/
this.element_ = document.createElement('div');
this.element_.style.position = 'absolute';
this.element_.style.pointerEvents = 'auto';
this.element_.className = 'ol-box ' + className;
/**
* @private
* @type {import("../Map.js").default|null}
*/
this.map_ = null;
/**
* @private
* @type {import("../pixel.js").Pixel}
*/
this.startPixel_ = null;
/**
* @private
* @type {import("../pixel.js").Pixel}
*/
this.endPixel_ = null;
}
/**
* Clean up.
* @override
*/
disposeInternal() {
this.setMap(null);
}
/**
* @private
*/
render_() {
const startPixel = this.startPixel_;
const endPixel = this.endPixel_;
const px = 'px';
const style = this.element_.style;
style.left = Math.min(startPixel[0], endPixel[0]) + px;
style.top = Math.min(startPixel[1], endPixel[1]) + px;
style.width = Math.abs(endPixel[0] - startPixel[0]) + px;
style.height = Math.abs(endPixel[1] - startPixel[1]) + px;
}
/**
* @param {import("../Map.js").default|null} map Map.
*/
setMap(map) {
if (this.map_) {
this.map_.getOverlayContainer().removeChild(this.element_);
const style = this.element_.style;
style.left = 'inherit';
style.top = 'inherit';
style.width = 'inherit';
style.height = 'inherit';
}
this.map_ = map;
if (this.map_) {
this.map_.getOverlayContainer().appendChild(this.element_);
}
}
/**
* @param {import("../pixel.js").Pixel} startPixel Start pixel.
* @param {import("../pixel.js").Pixel} endPixel End pixel.
*/
setPixels(startPixel, endPixel) {
this.startPixel_ = startPixel;
this.endPixel_ = endPixel;
this.createOrUpdateGeometry();
this.render_();
}
/**
* Creates or updates the cached geometry.
*/
createOrUpdateGeometry() {
if (!this.map_) {
return;
}
const startPixel = this.startPixel_;
const endPixel = this.endPixel_;
const pixels = [
startPixel,
[startPixel[0], endPixel[1]],
endPixel,
[endPixel[0], startPixel[1]],
];
const coordinates = pixels.map(
this.map_.getCoordinateFromPixelInternal,
this.map_,
);
// close the polygon
coordinates[4] = coordinates[0].slice();
if (!this.geometry_) {
this.geometry_ = new Polygon([coordinates]);
} else {
this.geometry_.setCoordinates([coordinates]);
}
}
/**
* @return {import("../geom/Polygon.js").default} Geometry.
*/
getGeometry() {
return this.geometry_;
}
}
export default RenderBox;