ShapeTransformManager.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import Matrix from '../../../3rd_party/transformation-matrix';
  2. function ShapeTransformManager() {
  3. this.sequences = {};
  4. this.sequenceList = [];
  5. this.transform_key_count = 0;
  6. }
  7. ShapeTransformManager.prototype = {
  8. addTransformSequence: function (transforms) {
  9. var i;
  10. var len = transforms.length;
  11. var key = '_';
  12. for (i = 0; i < len; i += 1) {
  13. key += transforms[i].transform.key + '_';
  14. }
  15. var sequence = this.sequences[key];
  16. if (!sequence) {
  17. sequence = {
  18. transforms: [].concat(transforms),
  19. finalTransform: new Matrix(),
  20. _mdf: false,
  21. };
  22. this.sequences[key] = sequence;
  23. this.sequenceList.push(sequence);
  24. }
  25. return sequence;
  26. },
  27. processSequence: function (sequence, isFirstFrame) {
  28. var i = 0;
  29. var len = sequence.transforms.length;
  30. var _mdf = isFirstFrame;
  31. while (i < len && !isFirstFrame) {
  32. if (sequence.transforms[i].transform.mProps._mdf) {
  33. _mdf = true;
  34. break;
  35. }
  36. i += 1;
  37. }
  38. if (_mdf) {
  39. sequence.finalTransform.reset();
  40. for (i = len - 1; i >= 0; i -= 1) {
  41. sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);
  42. }
  43. }
  44. sequence._mdf = _mdf;
  45. },
  46. processSequences: function (isFirstFrame) {
  47. var i;
  48. var len = this.sequenceList.length;
  49. for (i = 0; i < len; i += 1) {
  50. this.processSequence(this.sequenceList[i], isFirstFrame);
  51. }
  52. },
  53. getNewKey: function () {
  54. this.transform_key_count += 1;
  55. return '_' + this.transform_key_count;
  56. },
  57. };
  58. export default ShapeTransformManager;