eggSliderData.cxx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /**
  2. * PANDA 3D SOFTWARE
  3. * Copyright (c) Carnegie Mellon University. All rights reserved.
  4. *
  5. * All use of this software is subject to the terms of the revised BSD
  6. * license. You should have received a copy of this license along
  7. * with this source code in a file named "LICENSE."
  8. *
  9. * @file eggSliderData.cxx
  10. * @author drose
  11. * @date 2001-02-26
  12. */
  13. #include "eggSliderData.h"
  14. #include "eggVertexPointer.h"
  15. #include "eggScalarTablePointer.h"
  16. #include "eggSliderPointer.h"
  17. #include "dcast.h"
  18. #include "eggPrimitive.h"
  19. #include "eggVertex.h"
  20. #include "eggSAnimData.h"
  21. #include "indent.h"
  22. TypeHandle EggSliderData::_type_handle;
  23. /**
  24. *
  25. */
  26. EggSliderData::
  27. EggSliderData(EggCharacterCollection *collection,
  28. EggCharacterData *char_data) :
  29. EggComponentData(collection, char_data)
  30. {
  31. }
  32. /**
  33. * Returns the value corresponding to this slider position in the nth frame in
  34. * the indicated model.
  35. */
  36. double EggSliderData::
  37. get_frame(int model_index, int n) const {
  38. EggBackPointer *back = get_model(model_index);
  39. if (back == nullptr) {
  40. return 0.0;
  41. }
  42. EggSliderPointer *slider;
  43. DCAST_INTO_R(slider, back, 0.0);
  44. return slider->get_frame(n);
  45. }
  46. /**
  47. * Adds the indicated vertex, primitive, or morph table to the data.
  48. */
  49. void EggSliderData::
  50. add_back_pointer(int model_index, EggObject *egg_object) {
  51. if (egg_object->is_of_type(EggPrimitive::get_class_type())) {
  52. // A primitive!
  53. EggBackPointer *back = get_model(model_index);
  54. if (back == nullptr) {
  55. back = new EggVertexPointer(egg_object);
  56. set_model(model_index, back);
  57. }
  58. } else if (egg_object->is_of_type(EggVertex::get_class_type())) {
  59. // A vertex!
  60. EggBackPointer *back = get_model(model_index);
  61. if (back == nullptr) {
  62. back = new EggVertexPointer(egg_object);
  63. set_model(model_index, back);
  64. }
  65. } else if (egg_object->is_of_type(EggSAnimData::get_class_type())) {
  66. // A slider animation table! Woo hoo!
  67. EggBackPointer *back = get_model(model_index);
  68. if (back == nullptr) {
  69. back = new EggScalarTablePointer(egg_object);
  70. set_model(model_index, back);
  71. }
  72. } else {
  73. nout << "Invalid object added to slider for back pointer.\n";
  74. }
  75. }
  76. /**
  77. *
  78. */
  79. void EggSliderData::
  80. write(std::ostream &out, int indent_level) const {
  81. indent(out, indent_level)
  82. << "Slider " << get_name()
  83. << " (models:";
  84. int num_models = get_num_models();
  85. for (int model_index = 0; model_index < num_models; model_index++) {
  86. if (has_model(model_index)) {
  87. out << " " << model_index;
  88. }
  89. }
  90. out << ")\n";
  91. }