CircleObject.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /* 引入Cesium */
  2. // import * as Cesium from 'Cesium';
  3. import {
  4. setSessionid
  5. } from "./common/common.js";
  6. /**
  7. *流动纹理
  8. */
  9. import CircleMaterialProperty from "./CircleObject/CircleMaterialProperty.js";
  10. import CircleRippleMaterialProperty from "./CircleObject/CircleRippleMaterialProperty.js";
  11. /**
  12. * 墙体对象
  13. */
  14. class CircleObject {
  15. /**
  16. * 默认初始化
  17. */
  18. constructor(viewer) {
  19. if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
  20. this._viewer = viewer;
  21. }
  22. }
  23. /**
  24. * 通用对外公开函数
  25. */
  26. Object.assign(CircleObject.prototype, /** @lends CircleObject.prototype */ {
  27. /**
  28. * @description 绘制动态圆
  29. * @param {String} centerPoint 圆心坐标
  30. * @param {String} radius 圆半径
  31. * @param {Object} [options] 圆的样式,具有以下属性:
  32. * @param {Number} [options.id] 用于移除
  33. * @param {Number} [options.clampToGround=true] 是否贴地
  34. * @param {String} [options.color="#FF0000"] 指定圆的颜色
  35. * @param {String} [options.outlineColor="#FFFF00"] 指定点轮廓的颜色
  36. * @param {Number} [options.outlineWidth=0] 指定点轮廓的宽度
  37. *
  38. * @param {Number} [options.CircleType='ColorCircle'] ColorCircle / DynamicCircle
  39. * @param {Number} [options.duration=3000] 持续时间 毫秒,越小越快
  40. * @param {Number} [options.count=1] 重复次数
  41. */
  42. drawCircle: function(centerPoint, radius, options) {
  43. return new Promise((resolve, reject) => {
  44. let _self = this;
  45. let viewer = this._viewer;
  46. if (!Cesium.defined(centerPoint)) {
  47. throw new Cesium.DeveloperError("centerPoint is required.");
  48. }
  49. if (!Cesium.defined(radius)) {
  50. throw new Cesium.DeveloperError("radius is required.");
  51. }
  52. //坐标位置
  53. let position;
  54. if (centerPoint instanceof Cesium.Cartesian3) {
  55. position = centerPoint;
  56. } else {
  57. position = Cesium.Cartesian3.fromDegrees(centerPoint[0], centerPoint[1], centerPoint[2] || 0);
  58. }
  59. //半径
  60. if (typeof radius === 'number' && radius > 0) {
  61. radius = radius;
  62. } else {
  63. radius = 100
  64. }
  65. options = options || {};
  66. options.id = options.id || setSessionid();
  67. options.clampToGround = Cesium.defaultValue(options.clampToGround, true);
  68. options.CircleType = Cesium.defaultValue(options.CircleType, 'ColorCircle');
  69. options.duration = Cesium.defaultValue(options.duration, 3000);
  70. options.count = Cesium.defaultValue(options.count, 1);
  71. if (options.color) {
  72. if (options.color instanceof Array) {
  73. options.color = new Cesium.Color(options.color[0] / 255, options.color[1] / 255, options.color[2] / 255, options.color[3]);
  74. } else if (typeof(options.color) === 'string') {
  75. options.color = new Cesium.Color.fromCssColorString(options.color);
  76. } else {
  77. options.color = new Cesium.Color.fromCssColorString("#FFFF00");
  78. }
  79. }
  80. if (options.outlineColor) {
  81. if (options.outlineColor instanceof Array) {
  82. options.outlineColor = new Cesium.Color(options.outlineColor[0] / 255, options.outlineColor[1] / 255, options.outlineColor[2] / 255, options.outlineColor[3]);
  83. } else if (typeof(options.outlineColor) === 'string') {
  84. options.outlineColor = new Cesium.Color.fromCssColorString(options.outlineColor);
  85. } else {
  86. options.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00");
  87. }
  88. }
  89. options.outlineWidth = Cesium.defaultValue(options.outlineWidth, 0);
  90. /* 创建面材质 */
  91. let polygonMaterial = options.color;
  92. /* 创建线材质 */
  93. // let outlineMaterial = new Cesium.PolylineDashMaterialProperty({//虚线
  94. // dashLength: 16,
  95. // color: options.outlineColor
  96. // });
  97. let outlineMaterial = options.outlineColor;
  98. if (options.CircleType === 'DynamicCircle') {
  99. // polygonMaterial = new CircleMaterialProperty({
  100. // viewer: viewer,
  101. // duration: options.duration,
  102. // color: options.color,
  103. // count: options.count,
  104. // });
  105. polygonMaterial = new Cesium.CircleRippleMaterialProperty({
  106. color: options.color,
  107. speed: options.duration/1000,
  108. count: options.count,
  109. gradient: 0.2
  110. })
  111. }
  112. let entity = new Cesium.Entity({
  113. id: options.id,
  114. //位置
  115. position: position,
  116. //椭圆
  117. ellipse: {
  118. //半短轴(画圆:半短轴和半长轴一致即可)
  119. semiMinorAxis: radius,
  120. // 半长轴
  121. semiMajorAxis: radius,
  122. // 填充色
  123. material: polygonMaterial,
  124. // 是否有边框
  125. outline: true,
  126. // 边框颜色
  127. outlineColor: options.outlineColor,
  128. // 边框宽度
  129. outlineWidth: options.outlineWidth
  130. }
  131. });
  132. // let flyEntity = viewer.entities.add(entity);
  133. resolve(entity)
  134. });
  135. },
  136. });
  137. export default CircleObject;