CoplanarPolygonGeometryLibrary-d7d972d6.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. define(['exports', './Matrix2-e1298525', './Matrix3-41c58dde', './Check-6ede7e26', './OrientedBoundingBox-2dd47921'], (function (exports, Matrix2, Matrix3, Check, OrientedBoundingBox) { 'use strict';
  2. /**
  3. * @private
  4. */
  5. const CoplanarPolygonGeometryLibrary = {};
  6. const scratchIntersectionPoint = new Matrix3.Cartesian3();
  7. const scratchXAxis = new Matrix3.Cartesian3();
  8. const scratchYAxis = new Matrix3.Cartesian3();
  9. const scratchZAxis = new Matrix3.Cartesian3();
  10. const obbScratch = new OrientedBoundingBox.OrientedBoundingBox();
  11. CoplanarPolygonGeometryLibrary.validOutline = function (positions) {
  12. //>>includeStart('debug', pragmas.debug);
  13. Check.Check.defined("positions", positions);
  14. //>>includeEnd('debug');
  15. const orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromPoints(
  16. positions,
  17. obbScratch
  18. );
  19. const halfAxes = orientedBoundingBox.halfAxes;
  20. const xAxis = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchXAxis);
  21. const yAxis = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchYAxis);
  22. const zAxis = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchZAxis);
  23. const xMag = Matrix3.Cartesian3.magnitude(xAxis);
  24. const yMag = Matrix3.Cartesian3.magnitude(yAxis);
  25. const zMag = Matrix3.Cartesian3.magnitude(zAxis);
  26. // If all the points are on a line return undefined because we can't draw a polygon
  27. return !(
  28. (xMag === 0 && (yMag === 0 || zMag === 0)) ||
  29. (yMag === 0 && zMag === 0)
  30. );
  31. };
  32. // call after removeDuplicates
  33. CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments = function (
  34. positions,
  35. centerResult,
  36. planeAxis1Result,
  37. planeAxis2Result
  38. ) {
  39. //>>includeStart('debug', pragmas.debug);
  40. Check.Check.defined("positions", positions);
  41. Check.Check.defined("centerResult", centerResult);
  42. Check.Check.defined("planeAxis1Result", planeAxis1Result);
  43. Check.Check.defined("planeAxis2Result", planeAxis2Result);
  44. //>>includeEnd('debug');
  45. const orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromPoints(
  46. positions,
  47. obbScratch
  48. );
  49. const halfAxes = orientedBoundingBox.halfAxes;
  50. const xAxis = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchXAxis);
  51. const yAxis = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchYAxis);
  52. const zAxis = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchZAxis);
  53. const xMag = Matrix3.Cartesian3.magnitude(xAxis);
  54. const yMag = Matrix3.Cartesian3.magnitude(yAxis);
  55. const zMag = Matrix3.Cartesian3.magnitude(zAxis);
  56. const min = Math.min(xMag, yMag, zMag);
  57. // If all the points are on a line return undefined because we can't draw a polygon
  58. if (
  59. (xMag === 0 && (yMag === 0 || zMag === 0)) ||
  60. (yMag === 0 && zMag === 0)
  61. ) {
  62. return false;
  63. }
  64. let planeAxis1;
  65. let planeAxis2;
  66. if (min === yMag || min === zMag) {
  67. planeAxis1 = xAxis;
  68. }
  69. if (min === xMag) {
  70. planeAxis1 = yAxis;
  71. } else if (min === zMag) {
  72. planeAxis2 = yAxis;
  73. }
  74. if (min === xMag || min === yMag) {
  75. planeAxis2 = zAxis;
  76. }
  77. Matrix3.Cartesian3.normalize(planeAxis1, planeAxis1Result);
  78. Matrix3.Cartesian3.normalize(planeAxis2, planeAxis2Result);
  79. Matrix3.Cartesian3.clone(orientedBoundingBox.center, centerResult);
  80. return true;
  81. };
  82. function projectTo2D(position, center, axis1, axis2, result) {
  83. const v = Matrix3.Cartesian3.subtract(position, center, scratchIntersectionPoint);
  84. const x = Matrix3.Cartesian3.dot(axis1, v);
  85. const y = Matrix3.Cartesian3.dot(axis2, v);
  86. return Matrix2.Cartesian2.fromElements(x, y, result);
  87. }
  88. CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction = function (
  89. center,
  90. axis1,
  91. axis2
  92. ) {
  93. return function (positions) {
  94. const positionResults = new Array(positions.length);
  95. for (let i = 0; i < positions.length; i++) {
  96. positionResults[i] = projectTo2D(positions[i], center, axis1, axis2);
  97. }
  98. return positionResults;
  99. };
  100. };
  101. CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction = function (
  102. center,
  103. axis1,
  104. axis2
  105. ) {
  106. return function (position, result) {
  107. return projectTo2D(position, center, axis1, axis2, result);
  108. };
  109. };
  110. var CoplanarPolygonGeometryLibrary$1 = CoplanarPolygonGeometryLibrary;
  111. exports.CoplanarPolygonGeometryLibrary = CoplanarPolygonGeometryLibrary$1;
  112. }));