CoplanarPolygonGeometryLibrary-effcf1e1.js 4.3 KB

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