Add existing to tracked
This commit is contained in:
+140
@@ -0,0 +1,140 @@
|
||||
// @ts-check
|
||||
|
||||
import defined from "../Core/defined.js";
|
||||
import BufferPrimitiveCollection from "./BufferPrimitiveCollection.js";
|
||||
import BufferPolyline from "./BufferPolyline.js";
|
||||
import renderPolylines from "./renderBufferPolylineCollection.js";
|
||||
import BufferPolylineMaterial from "./BufferPolylineMaterial.js";
|
||||
|
||||
/** @import { TypedArray } from "../Core/globalTypes.js"; */
|
||||
/** @import Matrix4 from "../Core/Matrix4.js"; */
|
||||
/** @import FrameState from "./FrameState.js" */
|
||||
|
||||
/**
|
||||
* @typedef {object} BufferPolylineOptions
|
||||
* @property {Matrix4} [modelMatrix=Matrix4.IDENTITY] Transforms geometry from model to world coordinates.
|
||||
* @property {boolean} [show=true]
|
||||
* @property {BufferPolylineMaterial} [material=BufferPolylineMaterial.DEFAULT_MATERIAL]
|
||||
* @property {number} [featureId]
|
||||
* @property {object} [pickObject]
|
||||
* @property {TypedArray} [positions]
|
||||
* @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Collection of polylines held in ArrayBuffer storage for performance and memory optimization.
|
||||
*
|
||||
* <p>Default buffer memory allocation is arbitrary, and collections cannot be resized,
|
||||
* so specific per-buffer capacities should be provided in the collection
|
||||
* constructor when available.</p>
|
||||
*
|
||||
* @example
|
||||
* const collection = new BufferPolylineCollection({
|
||||
* primitiveCountMax: 1024,
|
||||
* vertexCountMax: 4096,
|
||||
* });
|
||||
*
|
||||
* const polyline = new BufferPolyline();
|
||||
* const material = new BufferPolylineMaterial({color: Color.WHITE});
|
||||
*
|
||||
* // Create a new polyline, temporarily bound to 'polyline' local variable.
|
||||
* collection.add({
|
||||
* positions: new Float64Array([ ... ]),
|
||||
* material,
|
||||
* }, polyline);
|
||||
*
|
||||
* // Iterate over all polylines in collection, temporarily binding 'polyline'
|
||||
* // local variable to each, and updating polyline material.
|
||||
* for (let i = 0; i < collection.primitiveCount; i++) {
|
||||
* collection.get(i, polyline);
|
||||
* polyline.setMaterial(material);
|
||||
* }
|
||||
*
|
||||
* @see BufferPolyline
|
||||
* @see BufferPolylineMaterial
|
||||
* @see BufferPrimitiveCollection
|
||||
* @extends BufferPrimitiveCollection<BufferPolyline>
|
||||
* @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
|
||||
*/
|
||||
class BufferPolylineCollection extends BufferPrimitiveCollection {
|
||||
_getCollectionClass() {
|
||||
return BufferPolylineCollection;
|
||||
}
|
||||
|
||||
_getPrimitiveClass() {
|
||||
return BufferPolyline;
|
||||
}
|
||||
|
||||
_getMaterialClass() {
|
||||
return BufferPolylineMaterial;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// COLLECTION LIFECYCLE
|
||||
|
||||
/**
|
||||
* @param {BufferPolylineCollection} collection
|
||||
* @returns {BufferPolylineCollection}
|
||||
* @override
|
||||
* @ignore
|
||||
*/
|
||||
static _cloneEmpty(collection) {
|
||||
return new BufferPolylineCollection({
|
||||
primitiveCountMax: collection.primitiveCountMax,
|
||||
vertexCountMax: collection.vertexCountMax,
|
||||
positionDatatype: collection.positionDatatype,
|
||||
positionNormalized: collection.positionNormalized,
|
||||
});
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// PRIMITIVE LIFECYCLE
|
||||
|
||||
/**
|
||||
* Adds a new polyline to the collection, with the specified options. A
|
||||
* {@link BufferPolyline} instance is linked to the new polyline, using
|
||||
* the 'result' argument if given, or a new instance if not. For repeated
|
||||
* calls, prefer to reuse a single BufferPolyline instance rather than
|
||||
* allocating a new instance on each call.
|
||||
*
|
||||
* @param {BufferPolylineOptions} options
|
||||
* @param {BufferPolyline} result
|
||||
* @returns {BufferPolyline}
|
||||
* @override
|
||||
*/
|
||||
add(options, result = new BufferPolyline()) {
|
||||
super.add(options, result);
|
||||
|
||||
const vertexOffset = this._positionCount;
|
||||
result._setUint32(BufferPolyline.Layout.POSITION_OFFSET_U32, vertexOffset);
|
||||
result._setUint32(BufferPolyline.Layout.POSITION_COUNT_U32, 0);
|
||||
|
||||
if (defined(options.positions)) {
|
||||
result.setPositions(options.positions);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// RENDER
|
||||
|
||||
/**
|
||||
* @param {FrameState} frameState
|
||||
* @ignore
|
||||
*/
|
||||
update(frameState) {
|
||||
super.update(frameState);
|
||||
|
||||
const passes = frameState.passes;
|
||||
if (this.show && (passes.render || passes.pick)) {
|
||||
this._renderContext = renderPolylines(
|
||||
this,
|
||||
frameState,
|
||||
this._renderContext,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default BufferPolylineCollection;
|
||||
Reference in New Issue
Block a user