123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- $(function() {
- init();
- });
- function init() {
- var canvas = document.getElementById("myCanvas");
- var context = canvas.getContext("2d");
- var w = canvas.width;
- var h = canvas.height;
- context.translate(w/2,h/2);
- // 选择线段的roomId和line
- var _selectLineArr = []
- var _selectLine = [];
- var _selectVector = [];
- var _verticalLine = []
- var inFaceArr = []
- var intersectArr =[]
- var isDrag = false;
- var isDivide = false;
- var isFirst = true
- var firstStack = []
- // f_cube = rawToCube(calculateRawData(rawData),w,h)
- f_cube = rawToCube(raw_cube,w,h)
-
- draw(context, w, h);
- $('#divide').click(function (e) {
- if (isDivide) {
- isDivide = false
- $('#divide').removeClass('active')
- }else{
- isDivide = true
- $('#divide').addClass('active')
- }
- })
- $("#myCanvas").mousedown(function(e) {
-
- var current = calculateXY([e.offsetX, e.offsetY],w,h);
- f_cubeLine = changeData(f_cube)
- _selectLineArr = selectLine(current, f_cubeLine, w, h)
- _selectLine = _selectLineArr.length>0?_selectLineArr[0]:[];
- _selectVector = _selectLine.length !== 0 ? [
- _selectLine["_3d_point2"]["data"][0] -
- _selectLine["_3d_point1"]["data"][0],
- _selectLine["_3d_point2"]["data"][1] -
- _selectLine["_3d_point1"]["data"][1]
- ]:[];
-
- _verticalLine = verticalLine(_selectVector)
- if (_selectLine.length !== 0) {
- drawSelectLine(context, _selectLine, w, h);
- isDrag = true;
- } else {
- draw(context, w, h);
- }
- // var current = [e.offsetX/w, e.offsetY/h];
-
- });
- $("#myCanvas").mouseup(function(e) {
- isDrag = false;
- if (_selectLine.length !== 0) {
- // console.log(intersect(f_cubeLine));
- if (firstStack.length>0) {
- f_cube = _getWhichPoint(...firstStack)[1];
- f_cubeLine = changeData(f_cube)
- // inFaceArr = cubePointInFace(_selectLineArr[1],f_cube,f_cubeLine)
- // pushInNewCube(inFaceArr,intersectArr,f_cube)
- }
- draw(context, w, h);
- }
- // draw(context, w, h);
- });
- $("#myCanvas").mousemove(function(e) {
-
- if (isDrag) {
- var current = calculateXY([e.offsetX, e.offsetY],w,h);
- // f_cubeLine = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube)[0];
- // f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube)[1];
- // draw(canvas, w, h);
- // drawSelectLine(canvas, _selectLine, w, h);
- // getPointFromLine(f_cubeLine)
- // var current = [e.offsetX, e.offsetY];
- if (isFirst) {
- firstStack = [_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h]
- isFirst = false
- return
- }
- f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)[1];
- intersectArr = intersect(_selectLineArr[1],f_cubeLine)
- // console.log('====================================');
- // console.log(intersectArr);
- // console.log('====================================');
- // if (Math.abs(current[0]-lastX)>50&&lastX) {
- // return
- // }
- if (!pointInSelectFace(_selectLineArr[1],f_cube) || intersectArr.length>0) {
- return
- }
-
- drawXX(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)
- firstStack = [_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h]
- function drawXX(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h) {
- f_cube = _getWhichPoint(_selectLine, current,_verticalLine, f_cubeLine, f_cube,w,h)[1];
- draw(context, w, h);
- drawSelectLine(context, _selectLine, w, h);
- }
- }
-
- });
- }
- function draw(context, w, h) {
- context.clearRect(-w/2, -h/2, w, h);
- var temp;
- var cam_pos = []
- for (let i = 0; i < f_cube.length; i++) {
- temp = [];
- for (let j = 0; j < f_cube[i].points.length; j++) {
- temp.push(f_cube[i].points[j]["data"]);
- }
- cam_pos = f_cube[i].campos?f_cube[i].campos:[]
- circularLine(temp, context, "#ff0000",cam_pos, w, h, false);
- }
- }
- function drawSelectLine(context, selectLine, w, h) {
- // var context = canvas.getContext("2d");
- var temps = [];
- temps.push(selectLine["_3d_point1"]["data"]);
- temps.push(selectLine["_3d_point2"]["data"]);
-
- circularLine(temps, context, "#0000ff",[], w, h, false);
- }
|