ClipMeshUpgrader.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. var lineAB = new THREE.Vector3(0, 0, 0);
  2. var lineBC = new THREE.Vector3(0, 0, 0);
  3. var crossResult = new THREE.Vector3(0, 0, 0);
  4. // update view
  5. function refreshClipMesh(plane, mesh, imageName, callback) {
  6. let points = LineIntersectionHelper.getLineIntersectionPoints(
  7. EdgesManager.getCubeEdges(),
  8. plane
  9. );
  10. if (points.length < 3) {
  11. return false;
  12. }
  13. //get clipPlaneData From WPF
  14. var clipPlaneData = getClipPlaneData();
  15. if (clipPlaneData.ErrorCode != 1000) {
  16. console.error("get data error :" + clipPlaneData.ErrorCode);
  17. return false;
  18. } else {
  19. updateMesh();
  20. return true;
  21. }
  22. function getClipPlaneData() {
  23. //convert points
  24. convertToVTKPoints(points);
  25. let mappingPoints = [];
  26. points.forEach((item) =>
  27. mappingPoints.push(
  28. new cefMappingPoint(
  29. Math.abs(item.x),
  30. Math.abs(item.y),
  31. Math.abs(item.z)
  32. )
  33. )
  34. );
  35. let inputData = {
  36. PointsList: mappingPoints,
  37. ClipImageName: imageName,
  38. };
  39. // let json = jsObj.GetClipPlaneData(
  40. // OSHelper.convertCefParameter(inputData));
  41. let json = Dart_GetClipPlaneData(JSON.stringify(inputData));
  42. return JSON.parse(json);
  43. }
  44. function updateMesh() {
  45. //get verticePoints
  46. convertBackToWorldPoints(clipPlaneData.WorldPoints);
  47. let verticesPoints = [];
  48. clipPlaneData.WorldPoints.forEach((item) =>
  49. verticesPoints.push(new THREE.Vector3(item.X, item.Y, item.Z))
  50. );
  51. //get imageVectors
  52. var imageVectors = [];
  53. clipPlaneData.ImagePoints.forEach((item) =>
  54. imageVectors.push(new THREE.Vector2(item.X, item.Y))
  55. );
  56. LoaderUtility.loadBase64Texture(clipPlaneData.ImageData, (texture) => {
  57. mesh.material.map.dispose();
  58. mesh.material.map = texture;
  59. updateMeshGeometry();
  60. if (callback != undefined) {
  61. callback();
  62. }
  63. });
  64. // LoaderUtility.loadUniqueTexture(clipPlaneData.ImageData + "//" + imageName,
  65. // texture => {
  66. // mesh.material.map.dispose();
  67. // mesh.material.map = texture;
  68. // updateMeshGeometry();
  69. // if (callback != undefined) {
  70. // callback();
  71. // }
  72. // });
  73. ///更新Mesh
  74. function updateMeshGeometry() {
  75. mesh.geometry.vertices = verticesPoints;
  76. mesh.geometry.faces = [];
  77. mesh.geometry.faceVertexUvs[0] = [];
  78. lineAB.subVectors(verticesPoints[1], verticesPoints[0]);
  79. lineBC.subVectors(verticesPoints[2], verticesPoints[1]);
  80. crossResult.crossVectors(lineAB, lineBC);
  81. let dotResult = crossResult.dot(plane.normal);
  82. let faceId = 0;
  83. for (let i = 2; i < verticesPoints.length; i++) {
  84. if (dotResult <= 0) {
  85. setMeshGeometryFace(0, i - 1, i);
  86. } else {
  87. setMeshGeometryFace(0, i, i - 1);
  88. }
  89. }
  90. mesh.material.needsUpdate = true;
  91. mesh.geometry.elementsNeedUpdate = true;
  92. mesh.geometry.computeBoundingSphere();
  93. ClipPlaneManager.drawActiveMeshEdges();
  94. function setMeshGeometryFace(x, y, z) {
  95. mesh.geometry.faces.push(new THREE.Face3(x, y, z));
  96. mesh.geometry.faceVertexUvs[0][faceId++] = [
  97. imageVectors[x],
  98. imageVectors[y],
  99. imageVectors[z],
  100. ];
  101. }
  102. }
  103. }
  104. }