main.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. $(function() {
  2. init();
  3. });
  4. function init() {
  5. var canvas = document.getElementById("myCanvas");
  6. var context = canvas.getContext("2d");
  7. var w = canvas.width;
  8. var h = canvas.height;
  9. context.translate(w/2,h/2);
  10. // 选择线段的roomId和line
  11. var _selectLineArr = []
  12. var _selectLine = [];
  13. var _selectVector = [];
  14. var _verticalLine = []
  15. var inFaceArr = []
  16. var intersectArr =[]
  17. var isDrag = false;
  18. var isDivide = false;
  19. var isFirst = true
  20. var firstStack = []
  21. // f_cube = rawToCube(calculateRawData(rawData),w,h)
  22. f_cube = rawToCube(raw_cube,w,h)
  23. draw(context, w, h);
  24. $('#divide').click(function (e) {
  25. if (isDivide) {
  26. isDivide = false
  27. $('#divide').removeClass('active')
  28. }else{
  29. isDivide = true
  30. $('#divide').addClass('active')
  31. }
  32. })
  33. $("#myCanvas").mousedown(function(e) {
  34. var current = calculateXY([e.offsetX, e.offsetY],w,h);
  35. f_cubeLine = changeData(f_cube)
  36. _selectLineArr = selectLine(current, f_cubeLine, w, h)
  37. _selectLine = _selectLineArr.length>0?_selectLineArr[0]:[];
  38. _selectVector = _selectLine.length !== 0 ? [
  39. _selectLine["_3d_point2"]["data"][0] -
  40. _selectLine["_3d_point1"]["data"][0],
  41. _selectLine["_3d_point2"]["data"][1] -
  42. _selectLine["_3d_point1"]["data"][1]
  43. ]:[];
  44. _verticalLine = verticalLine(_selectVector)
  45. if (_selectLine.length !== 0) {
  46. drawSelectLine(context, _selectLine, w, h);
  47. isDrag = true;
  48. } else {
  49. draw(context, w, h);
  50. }
  51. // var current = [e.offsetX/w, e.offsetY/h];
  52. });
  53. $("#myCanvas").mouseup(function(e) {
  54. isDrag = false;
  55. if (_selectLine.length !== 0) {
  56. // console.log(intersect(f_cubeLine));
  57. if (firstStack.length>0) {
  58. f_cube = _getWhichPoint(...firstStack)[1];
  59. f_cubeLine = changeData(f_cube)
  60. // inFaceArr = cubePointInFace(_selectLineArr[1],f_cube,f_cubeLine)
  61. // pushInNewCube(inFaceArr,intersectArr,f_cube)
  62. }
  63. draw(context, w, h);
  64. }
  65. // draw(context, w, h);
  66. });
  67. $("#myCanvas").mousemove(function(e) {
  68. if (isDrag) {
  69. var current = calculateXY([e.offsetX, e.offsetY],w,h);
  70. // f_cubeLine = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube)[0];
  71. // f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube)[1];
  72. // draw(canvas, w, h);
  73. // drawSelectLine(canvas, _selectLine, w, h);
  74. // getPointFromLine(f_cubeLine)
  75. // var current = [e.offsetX, e.offsetY];
  76. if (isFirst) {
  77. firstStack = [_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h]
  78. isFirst = false
  79. return
  80. }
  81. f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)[1];
  82. intersectArr = intersect(_selectLineArr[1],f_cubeLine)
  83. // console.log('====================================');
  84. // console.log(intersectArr);
  85. // console.log('====================================');
  86. // if (Math.abs(current[0]-lastX)>50&&lastX) {
  87. // return
  88. // }
  89. if (!pointInSelectFace(_selectLineArr[1],f_cube) || intersectArr.length>0) {
  90. return
  91. }
  92. drawXX(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)
  93. firstStack = [_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h]
  94. function drawXX(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h) {
  95. f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)[1];
  96. draw(context, w, h);
  97. drawSelectLine(context, _selectLine, w, h);
  98. }
  99. }
  100. });
  101. }
  102. function draw(context, w, h) {
  103. context.clearRect(-w/2, -h/2, w, h);
  104. var temp;
  105. var cam_pos = []
  106. for (let i = 0; i < f_cube.length; i++) {
  107. temp = [];
  108. for (let j = 0; j < f_cube[i].points.length; j++) {
  109. temp.push(f_cube[i].points[j]["data"]);
  110. }
  111. cam_pos = f_cube[i].campos?f_cube[i].campos:[]
  112. circularLine(temp, context, "#ff0000",cam_pos, w, h, false);
  113. }
  114. }
  115. function drawSelectLine(context, selectLine, w, h) {
  116. // var context = canvas.getContext("2d");
  117. var temps = [];
  118. temps.push(selectLine["_3d_point1"]["data"]);
  119. temps.push(selectLine["_3d_point2"]["data"]);
  120. circularLine(temps, context, "#0000ff",[], w, h, false);
  121. }