Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

ModelPrimitive.js 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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.type = Overlay.getOverlayType('model_primitive')
  18. this._state = State.INITIALIZED
  19. }
  20. get readyPromise() {
  21. return this._delegate.readyPromise
  22. }
  23. set position(position) {
  24. this._position = Parse.parsePosition(position)
  25. let origin = Transform.transformWGS84ToCartesian(this._position)
  26. this._delegate.modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(
  27. origin,
  28. new Cesium.HeadingPitchRoll(
  29. Cesium.Math.toRadians(this._position.heading),
  30. Cesium.Math.toRadians(this._position.pitch),
  31. Cesium.Math.toRadians(this._position.roll)
  32. )
  33. )
  34. return this
  35. }
  36. get position() {
  37. return this._position
  38. }
  39. set modelUrl(modelUrl) {
  40. this._modelUrl = modelUrl
  41. this._delegate = Cesium.Model.fromGltf({ url: modelUrl })
  42. this.position = this._position
  43. return this
  44. }
  45. get modelUrl() {
  46. return this._modelUrl
  47. }
  48. /**
  49. *
  50. * @private
  51. */
  52. _mountedHook() {
  53. /**
  54. * set the location
  55. */
  56. this.position = this._position
  57. }
  58. /**
  59. *
  60. * @param name
  61. */
  62. getMaterial(name) {
  63. return this._delegate.getMaterial(name)
  64. }
  65. /**
  66. *
  67. * @param name
  68. */
  69. getMesh(name) {
  70. return this._delegate.getMesh(name)
  71. }
  72. /**
  73. *
  74. * @param name
  75. * @returns {*}
  76. */
  77. getNode(name) {
  78. return this._delegate.getNode(name)
  79. }
  80. /**
  81. *
  82. * @returns {*}
  83. */
  84. getNodes() {
  85. return this._delegate._runtime.nodes
  86. }
  87. /**
  88. * Sets style
  89. * @param style
  90. * @returns {ModelPrimitive}
  91. */
  92. setStyle(style) {
  93. if (!style || Object.keys(style).length === 0) {
  94. return this
  95. }
  96. this._style = style
  97. Util.merge(this._delegate, this._style)
  98. return this
  99. }
  100. }
  101. Overlay.registerType('model_primitive')
  102. export default ModelPrimitive