TimelineTrack.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { Color, defined, JulianDate } from "@cesium/engine";
  2. /**
  3. * @private
  4. */
  5. function TimelineTrack(interval, pixelHeight, color, backgroundColor) {
  6. this.interval = interval;
  7. this.height = pixelHeight;
  8. this.color = color || new Color(0.5, 0.5, 0.5, 1.0);
  9. this.backgroundColor = backgroundColor || new Color(0.0, 0.0, 0.0, 0.0);
  10. }
  11. TimelineTrack.prototype.render = function (context, renderState) {
  12. const startInterval = this.interval.start;
  13. const stopInterval = this.interval.stop;
  14. const spanStart = renderState.startJulian;
  15. const spanStop = JulianDate.addSeconds(
  16. renderState.startJulian,
  17. renderState.duration,
  18. new JulianDate()
  19. );
  20. if (
  21. JulianDate.lessThan(startInterval, spanStart) &&
  22. JulianDate.greaterThan(stopInterval, spanStop)
  23. ) {
  24. //The track takes up the entire visible span.
  25. context.fillStyle = this.color.toCssColorString();
  26. context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);
  27. } else if (
  28. JulianDate.lessThanOrEquals(startInterval, spanStop) &&
  29. JulianDate.greaterThanOrEquals(stopInterval, spanStart)
  30. ) {
  31. //The track only takes up some of the visible span, compute that span.
  32. let x;
  33. let start, stop;
  34. for (x = 0; x < renderState.timeBarWidth; ++x) {
  35. const currentTime = JulianDate.addSeconds(
  36. renderState.startJulian,
  37. (x / renderState.timeBarWidth) * renderState.duration,
  38. new JulianDate()
  39. );
  40. if (
  41. !defined(start) &&
  42. JulianDate.greaterThanOrEquals(currentTime, startInterval)
  43. ) {
  44. start = x;
  45. } else if (
  46. !defined(stop) &&
  47. JulianDate.greaterThanOrEquals(currentTime, stopInterval)
  48. ) {
  49. stop = x;
  50. }
  51. }
  52. context.fillStyle = this.backgroundColor.toCssColorString();
  53. context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);
  54. if (defined(start)) {
  55. if (!defined(stop)) {
  56. stop = renderState.timeBarWidth;
  57. }
  58. context.fillStyle = this.color.toCssColorString();
  59. context.fillRect(
  60. start,
  61. renderState.y,
  62. Math.max(stop - start, 1),
  63. this.height
  64. );
  65. }
  66. }
  67. };
  68. export default TimelineTrack;