Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

ModelPrimitive.js 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * @Author: Caven
  3. * @Date: 2021-05-14 00:33:27
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import State from '@dc-modules/state/State'
  7. import Parse from '@dc-modules/parse/Parse'
  8. import { Util } from '@dc-modules/utils'
  9. import { Transform } from '@dc-modules/transform'
  10. import Overlay from '../Overlay'
  11. class ModelPrimitive extends Overlay {
  12. constructor(position, modelUrl) {
  13. super()
  14. this._position = Parse.parsePosition(position)
  15. this._modelUrl = modelUrl
  16. this._delegate = Cesium.Model.fromGltf({ url: modelUrl })
  17. this._state = State.INITIALIZED
  18. }
  19. get type() {
  20. return Overlay.getOverlayType('model_primitive')
  21. }
  22. get readyPromise() {
  23. return this._delegate.readyPromise
  24. }
  25. set position(position) {
  26. this._position = Parse.parsePosition(position)
  27. let origin = Transform.transformWGS84ToCartesian(this._position)
  28. this._delegate.modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(
  29. origin,
  30. new Cesium.HeadingPitchRoll(
  31. Cesium.Math.toRadians(this._position.heading),
  32. Cesium.Math.toRadians(this._position.pitch),
  33. Cesium.Math.toRadians(this._position.roll)
  34. )
  35. )
  36. return this
  37. }
  38. get position() {
  39. return this._position
  40. }
  41. set modelUrl(modelUrl) {
  42. this._modelUrl = modelUrl
  43. this._delegate = Cesium.Model.fromGltf({ url: modelUrl })
  44. this.position = this._position
  45. return this
  46. }
  47. get modelUrl() {
  48. return this._modelUrl
  49. }
  50. /**
  51. *
  52. * @private
  53. */
  54. _mountedHook() {
  55. /**
  56. * set the location
  57. */
  58. this.position = this._position
  59. }
  60. /**
  61. *
  62. * @param name
  63. */
  64. getMaterial(name) {
  65. return this._delegate.getMaterial(name)
  66. }
  67. /**
  68. *
  69. * @param name
  70. */
  71. getMesh(name) {
  72. return this._delegate.getMesh(name)
  73. }
  74. /**
  75. *
  76. * @param name
  77. * @returns {*}
  78. */
  79. getNode(name) {
  80. return this._delegate.getNode(name)
  81. }
  82. /**
  83. *
  84. * @returns {*}
  85. */
  86. getNodes() {
  87. return this._delegate._runtime.nodes
  88. }
  89. /**
  90. * Sets style
  91. * @param style
  92. * @returns {ModelPrimitive}
  93. */
  94. setStyle(style) {
  95. if (!style || Object.keys(style).length === 0) {
  96. return this
  97. }
  98. Util.merge(this._style, style)
  99. Util.merge(this._delegate, style)
  100. return this
  101. }
  102. }
  103. Overlay.registerType('model_primitive')
  104. export default ModelPrimitive