123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839 |
- import Cartographic from "../Core/Cartographic.js";
- import Color from "../Core/Color.js";
- import defaultValue from "../Core/defaultValue.js";
- import defined from "../Core/defined.js";
- import createBillboardPointCallback from "./createBillboardPointCallback.js";
- function Cesium3DTilePointFeature(
- content,
- batchId,
- billboard,
- label,
- polyline
- ) {
- this._content = content;
- this._billboard = billboard;
- this._label = label;
- this._polyline = polyline;
- this._batchId = batchId;
- this._billboardImage = undefined;
- this._billboardColor = undefined;
- this._billboardOutlineColor = undefined;
- this._billboardOutlineWidth = undefined;
- this._billboardSize = undefined;
- this._pointSize = undefined;
- this._color = undefined;
- this._pointSize = undefined;
- this._pointOutlineColor = undefined;
- this._pointOutlineWidth = undefined;
- this._heightOffset = undefined;
- this._pickIds = new Array(3);
- setBillboardImage(this);
- }
- var scratchCartographic = new Cartographic();
- Object.defineProperties(Cesium3DTilePointFeature.prototype, {
-
- show: {
- get: function () {
- return this._label.show;
- },
- set: function (value) {
- this._label.show = value;
- this._billboard.show = value;
- this._polyline.show = value;
- },
- },
-
- color: {
- get: function () {
- return this._color;
- },
- set: function (value) {
- this._color = Color.clone(value, this._color);
- setBillboardImage(this);
- },
- },
-
- pointSize: {
- get: function () {
- return this._pointSize;
- },
- set: function (value) {
- this._pointSize = value;
- setBillboardImage(this);
- },
- },
-
- pointOutlineColor: {
- get: function () {
- return this._pointOutlineColor;
- },
- set: function (value) {
- this._pointOutlineColor = Color.clone(value, this._pointOutlineColor);
- setBillboardImage(this);
- },
- },
-
- pointOutlineWidth: {
- get: function () {
- return this._pointOutlineWidth;
- },
- set: function (value) {
- this._pointOutlineWidth = value;
- setBillboardImage(this);
- },
- },
-
- labelColor: {
- get: function () {
- return this._label.fillColor;
- },
- set: function (value) {
- this._label.fillColor = value;
- this._polyline.show = this._label.show && value.alpha > 0.0;
- },
- },
-
- labelOutlineColor: {
- get: function () {
- return this._label.outlineColor;
- },
- set: function (value) {
- this._label.outlineColor = value;
- },
- },
-
- labelOutlineWidth: {
- get: function () {
- return this._label.outlineWidth;
- },
- set: function (value) {
- this._label.outlineWidth = value;
- },
- },
-
- font: {
- get: function () {
- return this._label.font;
- },
- set: function (value) {
- this._label.font = value;
- },
- },
-
- labelStyle: {
- get: function () {
- return this._label.style;
- },
- set: function (value) {
- this._label.style = value;
- },
- },
-
- labelText: {
- get: function () {
- return this._label.text;
- },
- set: function (value) {
- if (!defined(value)) {
- value = "";
- }
- this._label.text = value;
- },
- },
-
- backgroundColor: {
- get: function () {
- return this._label.backgroundColor;
- },
- set: function (value) {
- this._label.backgroundColor = value;
- },
- },
-
- backgroundPadding: {
- get: function () {
- return this._label.backgroundPadding;
- },
- set: function (value) {
- this._label.backgroundPadding = value;
- },
- },
-
- backgroundEnabled: {
- get: function () {
- return this._label.showBackground;
- },
- set: function (value) {
- this._label.showBackground = value;
- },
- },
-
- scaleByDistance: {
- get: function () {
- return this._label.scaleByDistance;
- },
- set: function (value) {
- this._label.scaleByDistance = value;
- this._billboard.scaleByDistance = value;
- },
- },
-
- translucencyByDistance: {
- get: function () {
- return this._label.translucencyByDistance;
- },
- set: function (value) {
- this._label.translucencyByDistance = value;
- this._billboard.translucencyByDistance = value;
- },
- },
-
- distanceDisplayCondition: {
- get: function () {
- return this._label.distanceDisplayCondition;
- },
- set: function (value) {
- this._label.distanceDisplayCondition = value;
- this._polyline.distanceDisplayCondition = value;
- this._billboard.distanceDisplayCondition = value;
- },
- },
-
- heightOffset: {
- get: function () {
- return this._heightOffset;
- },
- set: function (value) {
- var offset = defaultValue(this._heightOffset, 0.0);
- var ellipsoid = this._content.tileset.ellipsoid;
- var cart = ellipsoid.cartesianToCartographic(
- this._billboard.position,
- scratchCartographic
- );
- cart.height = cart.height - offset + value;
- var newPosition = ellipsoid.cartographicToCartesian(cart);
- this._billboard.position = newPosition;
- this._label.position = this._billboard.position;
- this._polyline.positions = [this._polyline.positions[0], newPosition];
- this._heightOffset = value;
- },
- },
-
- anchorLineEnabled: {
- get: function () {
- return this._polyline.show;
- },
- set: function (value) {
- this._polyline.show = value;
- },
- },
-
- anchorLineColor: {
- get: function () {
- return this._polyline.material.uniforms.color;
- },
- set: function (value) {
- this._polyline.material.uniforms.color = Color.clone(
- value,
- this._polyline.material.uniforms.color
- );
- },
- },
-
- image: {
- get: function () {
- return this._billboardImage;
- },
- set: function (value) {
- var imageChanged = this._billboardImage !== value;
- this._billboardImage = value;
- if (imageChanged) {
- setBillboardImage(this);
- }
- },
- },
-
- disableDepthTestDistance: {
- get: function () {
- return this._label.disableDepthTestDistance;
- },
- set: function (value) {
- this._label.disableDepthTestDistance = value;
- this._billboard.disableDepthTestDistance = value;
- },
- },
-
- horizontalOrigin: {
- get: function () {
- return this._billboard.horizontalOrigin;
- },
- set: function (value) {
- this._billboard.horizontalOrigin = value;
- },
- },
-
- verticalOrigin: {
- get: function () {
- return this._billboard.verticalOrigin;
- },
- set: function (value) {
- this._billboard.verticalOrigin = value;
- },
- },
-
- labelHorizontalOrigin: {
- get: function () {
- return this._label.horizontalOrigin;
- },
- set: function (value) {
- this._label.horizontalOrigin = value;
- },
- },
-
- labelVerticalOrigin: {
- get: function () {
- return this._label.verticalOrigin;
- },
- set: function (value) {
- this._label.verticalOrigin = value;
- },
- },
-
- content: {
- get: function () {
- return this._content;
- },
- },
-
- tileset: {
- get: function () {
- return this._content.tileset;
- },
- },
-
- primitive: {
- get: function () {
- return this._content.tileset;
- },
- },
-
- pickIds: {
- get: function () {
- var ids = this._pickIds;
- ids[0] = this._billboard.pickId;
- ids[1] = this._label.pickId;
- ids[2] = this._polyline.pickId;
- return ids;
- },
- },
- });
- Cesium3DTilePointFeature.defaultColor = Color.WHITE;
- Cesium3DTilePointFeature.defaultPointOutlineColor = Color.BLACK;
- Cesium3DTilePointFeature.defaultPointOutlineWidth = 0.0;
- Cesium3DTilePointFeature.defaultPointSize = 8.0;
- function setBillboardImage(feature) {
- var b = feature._billboard;
- if (defined(feature._billboardImage) && feature._billboardImage !== b.image) {
- b.image = feature._billboardImage;
- return;
- }
- if (defined(feature._billboardImage)) {
- return;
- }
- var newColor = defaultValue(
- feature._color,
- Cesium3DTilePointFeature.defaultColor
- );
- var newOutlineColor = defaultValue(
- feature._pointOutlineColor,
- Cesium3DTilePointFeature.defaultPointOutlineColor
- );
- var newOutlineWidth = defaultValue(
- feature._pointOutlineWidth,
- Cesium3DTilePointFeature.defaultPointOutlineWidth
- );
- var newPointSize = defaultValue(
- feature._pointSize,
- Cesium3DTilePointFeature.defaultPointSize
- );
- var currentColor = feature._billboardColor;
- var currentOutlineColor = feature._billboardOutlineColor;
- var currentOutlineWidth = feature._billboardOutlineWidth;
- var currentPointSize = feature._billboardSize;
- if (
- Color.equals(newColor, currentColor) &&
- Color.equals(newOutlineColor, currentOutlineColor) &&
- newOutlineWidth === currentOutlineWidth &&
- newPointSize === currentPointSize
- ) {
- return;
- }
- feature._billboardColor = Color.clone(newColor, feature._billboardColor);
- feature._billboardOutlineColor = Color.clone(
- newOutlineColor,
- feature._billboardOutlineColor
- );
- feature._billboardOutlineWidth = newOutlineWidth;
- feature._billboardSize = newPointSize;
- var centerAlpha = newColor.alpha;
- var cssColor = newColor.toCssColorString();
- var cssOutlineColor = newOutlineColor.toCssColorString();
- var textureId = JSON.stringify([
- cssColor,
- newPointSize,
- cssOutlineColor,
- newOutlineWidth,
- ]);
- b.setImage(
- textureId,
- createBillboardPointCallback(
- centerAlpha,
- cssColor,
- cssOutlineColor,
- newOutlineWidth,
- newPointSize
- )
- );
- }
- Cesium3DTilePointFeature.prototype.hasProperty = function (name) {
- return this._content.batchTable.hasProperty(this._batchId, name);
- };
- Cesium3DTilePointFeature.prototype.getPropertyNames = function (results) {
- return this._content.batchTable.getPropertyNames(this._batchId, results);
- };
- Cesium3DTilePointFeature.prototype.getProperty = function (name) {
- return this._content.batchTable.getProperty(this._batchId, name);
- };
- Cesium3DTilePointFeature.prototype.setProperty = function (name, value) {
- this._content.batchTable.setProperty(this._batchId, name, value);
-
-
-
- this._content.featurePropertiesDirty = true;
- };
- Cesium3DTilePointFeature.prototype.isExactClass = function (className) {
- return this._content.batchTable.isExactClass(this._batchId, className);
- };
- Cesium3DTilePointFeature.prototype.isClass = function (className) {
- return this._content.batchTable.isClass(this._batchId, className);
- };
- Cesium3DTilePointFeature.prototype.getExactClassName = function () {
- return this._content.batchTable.getExactClassName(this._batchId);
- };
- export default Cesium3DTilePointFeature;
|