Spaces:
Runtime error
Runtime error
| var focus_circle = false; | |
| var focus_line = false; | |
| var focus_rect = ""; | |
| var rect_type = false; | |
| var Type = ""; | |
| var adjust_graph = false; | |
| var createNewLine = false; | |
| var isTrans = 0; | |
| var islLoadTest = 0; | |
| var selectRect; | |
| var startRectvalue = [-1, -1, -1, -1]; | |
| var startPoint = [-1, -1, -1, -1, -1]; | |
| var RelRectvalue = []; | |
| $(document).ready(function () { | |
| start();//执行函数 | |
| isTrans = 0; | |
| }); | |
| function show(isShow) { | |
| // document.getElementById("rmlist").style.opacity = isShow; | |
| // document.getElementById("gooey-API").style.opacity = isShow; | |
| document.getElementById("leftbox").style.opacity = isShow; | |
| document.getElementById("rightbox").style.opacity = isShow; | |
| document.getElementById("listbox").style.opacity = isShow; | |
| document.getElementById("graphSearch").style.opacity = isShow; | |
| document.getElementById("Editing").style.opacity = isShow; | |
| document.getElementById("BedRoomVue").style.opacity = isShow; | |
| document.getElementById("BathRoomVue").style.opacity = isShow; | |
| document.getElementById("otherVue").style.opacity = isShow; | |
| document.getElementById("detailVue").style.opacity = isShow; | |
| document.getElementById("addVue").style.opacity = isShow; | |
| } | |
| $(document).ready(function () { | |
| show(0.0) | |
| setTimeout("show(1.0)", 12000) | |
| //load the start | |
| demo.init(); | |
| }); | |
| function start() { | |
| var leftsvg = document.getElementById('LeftGraphSVG'); | |
| leftsvg.oncontextmenu = function () { | |
| return false; | |
| } | |
| $('#LeftGraphSVG').on('mousedown', function (e) { | |
| console.log("Left!"); | |
| let selectX = e.clientX - leftsvg.getBoundingClientRect().left; | |
| let selectY = e.clientY - leftsvg.getBoundingClientRect().top; | |
| var roomSelect = -1; | |
| var arr, reg = new RegExp("(^| )ifSelectRoom=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) { | |
| roomSelect = arr[2]; | |
| } else { | |
| roomSelect = 0; | |
| } | |
| if (roomSelect == 1) { | |
| clearHighLight(); | |
| var curRoom = "NULL"; | |
| var curIndex = -1; | |
| arr, reg = new RegExp("(^| )RoomType=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) { | |
| curRoom = arr[2]; | |
| } | |
| arr, reg = new RegExp("(^| )CurNum=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) { | |
| curIndex = arr[2]; | |
| } | |
| var id = "TransCircle_" + curIndex + "_" + curRoom; | |
| // if (isTrans == 0) { | |
| // document.getElementById("graphSearch").style = "display:flex;cursor: default;color: #000;text-align: center;vertical-align: middle;line-height: 26px;position: absolute;margin-left: 160px;" | |
| // | |
| // } | |
| CreateCircle(selectX / 2, selectY / 2, id); | |
| d3.select("body").select("#LeftGraphSVG").select("#" + id).attr('scalesize', 1); | |
| document.cookie = "ifSelectRoom=0"; | |
| document.cookie = "RoomNum=" + (parseInt(curIndex) + 1) | |
| } | |
| }) | |
| console.time('time'); | |
| var model = 1; | |
| $.get("/index/Init/", {'start': model.toString()}, function () { | |
| console.log("load model success"); | |
| console.timeEnd('time') | |
| }) | |
| animateHeight(true); | |
| animateHeight1(true); | |
| animateHeight2(true); | |
| animateHeight3(true); | |
| animateHeight4(true); | |
| } | |
| function addLivingRoom(BtnID) {//这个加点的 | |
| var arr, reg = new RegExp("(^| )RoomNum=([^;]*)(;|$)"); | |
| var id = -1; | |
| if (arr = document.cookie.match(reg)) | |
| id = parseInt(arr[2]); | |
| console.log(BtnID); | |
| var roomType = BtnID.split("_")[0]; | |
| if (roomType == "BedRoom") { | |
| var Bedrandom = {0: "MasterRoom", 1: "SecondRoom", 2: "GuestRoom", 3: "ChildRoom", 4: "StudyRoom"}; | |
| var rand = Math.random() * 5; | |
| roomType = Bedrandom[parseInt(rand)]; | |
| } | |
| selectRoomType(roomType, id); | |
| } | |
| function clearHighLight() { | |
| var points = d3.select("body").select("#LeftGraphSVG").selectAll("circle").attr("stroke-width", 2); | |
| } | |
| function rect_clearHighLight() { | |
| var rects = d3.select("body").select("#LeftLayoutSVG").selectAll("rect").attr("stroke-width", 4); | |
| } | |
| function selectRoomType(roomType, id) { | |
| document.cookie = "RoomType=" + roomType; | |
| document.cookie = "ifSelectRoom=1"; | |
| document.cookie = "CurNum=" + id; | |
| // document.cookie = "CurNum=" + id.split("_")[1]; | |
| var arr, reg = new RegExp("(^| )ifSelectRoom=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| console.log(arr[2]); | |
| } | |
| function init() { | |
| d3.select('body').select('#RightSVG').selectAll('line').remove(); | |
| d3.select('body').select('#RightSVG').selectAll('circle').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('line').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('circle').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('rect').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('polygon').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('clipPath').remove(); | |
| // d3.select('body').select('#LeftGraphSVG').selectAll('.TransLine').remove(); | |
| // d3.select('body').select('#LeftGraphSVG').selectAll('.TransCircle').remove(); | |
| document.getElementById("graphSearch").style = "cursor: default;color: #000;text-align: center;vertical-align: middle;line-height: 26px;position: absolute;margin-left: 360px;"; | |
| d3.select('body').select('#LeftLayoutSVG').selectAll('rect').remove(); | |
| d3.select('body').select('#LeftLayoutSVG').selectAll('polygon').remove(); | |
| d3.select('body').select('#LeftLayoutSVG').selectAll('clipPath').remove(); | |
| d3.select('body').select('#LeftLayoutSVG').selectAll('g').remove(); | |
| } | |
| function RightInit() { | |
| d3.select('body').select('#RightSVG').selectAll('line').remove(); | |
| d3.select('body').select('#RightSVG').selectAll('circle').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('line').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('circle').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('rect').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('polygon').remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll('clipPath').remove(); | |
| } | |
| function ListBox(ret, rooms) { | |
| var roomList = ret; | |
| console.log("roomList" + roomList); | |
| var hsList = document.getElementById('hsList'); | |
| while (hsList.hasChildNodes()) { | |
| hsList.removeChild(hsList.firstChild); | |
| } | |
| for (var i = roomList.length - 1; i >= 0; i--) { | |
| var hs = roomList[i]; | |
| var itembt = document.createElement('button'); | |
| itembt.innerHTML = ret[i].split(".")[0]; | |
| itembt.classList.add('api-title'); | |
| itembt.classList.add('pngls'); | |
| itembt.id = "Btn_" + ret[i]; | |
| var itemimg = document.createElement('img'); | |
| // itemimg.src="../static/Data/Img/52.png"; | |
| // itemimg.src="../static/Data/snapshot/"+ret[i]; | |
| itemimg.src = "../static/Data/snapshot_train/" + ret[i]; | |
| itembt.appendChild(itemimg); | |
| itembt.onclick = function () { | |
| RightInit(); | |
| var all = document.getElementsByClassName("api-text"); | |
| var i; | |
| for (i = 0; i < all.length; i++) { | |
| all[i].style.border = "0px"; | |
| } | |
| d3.select('body').select('#LeftBaseSVG').selectAll('rect').remove(); | |
| var parent = this.parentNode; | |
| parent.style.border = "2px solid #BEECFF"; | |
| // d3.select('body').select('#LeftLayoutSVG').selectAll("svg > *").remove(); | |
| console.time('time'); | |
| console.log(this.id.split("_")[1]); | |
| CreateRightImage(this.id.split("_")[1]); | |
| var Rightid = this.id.split("_")[1]; | |
| document.getElementById("transfer").onclick = function () { | |
| d3.select('body').select('#LeftGraphSVG').selectAll('.TransLine').remove(); | |
| d3.select('body').select('#LeftGraphSVG').selectAll('.TransCircle').remove(); | |
| CreateLeftGraph(rooms, Rightid); | |
| // d3.select("body").select("#LeftGraphSVG").select("#" + roomid).attr('scalesize',1); | |
| document.getElementById("graphSearch").style = "display:none;cursor: default;color: #000;text-align: center;vertical-align: middle;line-height: 26px;position: absolute;margin-left: 160px;"; | |
| isTrans = 1; | |
| document.getElementById("graphdiv").style = "display:block;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;"; | |
| document.getElementById("layoutdiv").style = "display:block;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;"; | |
| } | |
| console.timeEnd('time') | |
| } | |
| var itemdiv = document.createElement('div'); | |
| itemdiv.classList.add('api-text'); | |
| itemdiv.appendChild(itembt); | |
| var itemli = document.createElement('li'); | |
| itemli.classList.add('col-sm-12'); | |
| itemli.appendChild(itemdiv); | |
| hsList.insertBefore(itemli, hsList.firstChild); | |
| } | |
| console.time('time'); | |
| // CreateRightImage(ret[0]); | |
| // ocument.getElementById("transfer").onclick = function () { | |
| // CreateLeftGraph(rooms, ret[0]);} | |
| console.timeEnd('time') | |
| } | |
| function NumSearch() { | |
| document.getElementById("graphdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;"; | |
| document.getElementById("layoutdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;"; | |
| d3.select('body').select('#LeftGraphSVG').selectAll('.TransLine').remove(); | |
| d3.select('body').select('#LeftGraphSVG').selectAll('.TransCircle').remove(); | |
| document.cookie = "RoomNum=0"; | |
| init(); | |
| d3.select('body').select('#LeftBaseSVG').selectAll('rect').remove(); | |
| d3.select("body").select("#LeftLayoutSVG").selectAll(".windowsline").remove(); | |
| d3.select("body").selectAll(".UserPoint").attr("fill", "#6bdb6a").attr("stroke", 0); | |
| var hsname = null; | |
| var arr, reg = new RegExp("(^| )hsname=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| hsname = arr[2]; | |
| var points = d3.select('body').select('#LeftGraphSVG').selectAll('circle'); | |
| var rooms = []; | |
| rooms.push(hsname); | |
| var obj = Num(); | |
| rooms.push(obj.roomactarr); | |
| rooms.push(obj.roomexaarr); | |
| rooms.push(obj.roomnumarr); | |
| points.each(function (d, i) { | |
| var room = []; | |
| room.push(this.id); | |
| room.push(this.cx.animVal.value); | |
| room.push(this.cy.animVal.value); | |
| rooms.push(room); | |
| }); | |
| $.get("/index/NumSearch/", {'userInfo': JSON.stringify(rooms)}, function (ret) { | |
| ListBox(ret, rooms); | |
| }); | |
| } | |
| function roomcolor(rmcate) { | |
| switch (rmcate) { | |
| case "LivingRoom": | |
| var color = d3.rgb(244, 242, 229) | |
| break; | |
| case "MasterRoom": | |
| var color = d3.rgb(253, 244, 171) | |
| break; | |
| case "Kitchen": | |
| var color = d3.rgb(234, 216, 214) | |
| break; | |
| case "Bathroom": | |
| var color = d3.rgb(205, 233, 252); | |
| break; | |
| case "DiningRoom": | |
| var color = d3.rgb(244, 242, 229); | |
| break; | |
| case "ChildRoom": | |
| var color = d3.rgb(253, 244, 171); | |
| break; | |
| case "StudyRoom": | |
| var color = d3.rgb(253, 244, 171); | |
| break; | |
| case "SecondRoom": | |
| var color = d3.rgb(253, 244, 171); | |
| break; | |
| case "GuestRoom": | |
| var color = d3.rgb(253, 244, 171); | |
| break; | |
| case "Balcony": | |
| var color = d3.rgb(208, 216, 135); | |
| break; | |
| case "Entrance": | |
| var color = d3.rgb(244, 242, 229); | |
| break; | |
| case "Storage": | |
| var color = d3.rgb(249, 222, 189); | |
| break; | |
| case "Wall-in": | |
| var color = d3.rgb(202, 207, 239); | |
| break; | |
| case "External area": | |
| var color = d3.rgb(255, 255, 255); | |
| break; | |
| case "Exterior wall": | |
| var color = d3.rgb(79, 79, 79); | |
| break; | |
| case"Front door": | |
| var color = d3.rgb(255, 225, 25); | |
| break; | |
| case "Interior wall": | |
| var color = d3.rgb(128, 128, 128); | |
| break; | |
| case"Interior door": | |
| var color = d3.rgb(255, 255, 255); | |
| break; | |
| default: | |
| break | |
| } | |
| return color; | |
| } | |
| function CreateCircle(cx, cy, id, r) { | |
| if (r == undefined) { | |
| r = 5; | |
| } | |
| var title = id.split("_")[2]; | |
| var circlecolor = roomcolor(title); | |
| d3.select('body').select('#LeftGraphSVG').append('circle') | |
| .attr("cx", cx) | |
| .attr("cy", cy) | |
| .attr("fill", circlecolor) | |
| .attr("r", r) | |
| .attr("stroke", "#000000") | |
| .attr("stroke-width", 2) | |
| .attr("id", id) | |
| .attr("class", "TransCircle") | |
| .on("mousedown", circle_mousedown) | |
| .on("mousemove", circle_mousemove) | |
| .on("mouseup", circle_mouseup) | |
| .on("dblclick", circle_dblclick) | |
| .append("title")//此处加入title标签 | |
| .text(title); | |
| } | |
| function CreateLine(x1, y1, x2, y2, id) { | |
| d3.select('body').select('#LeftGraphSVG').append('line') | |
| .attr("x1", x1) | |
| .attr("y1", y1) | |
| .attr("x2", x2) | |
| .attr("y2", y2) | |
| .attr("stroke", "#000000") | |
| .attr("stroke-width", "2px") | |
| .attr("id", id) | |
| .attr("class", "TransLine") | |
| .on("mousedown", line_mousedown) | |
| .on("mouseup", line_mouseup) | |
| } | |
| function LoadTestBoundary(files) { | |
| init(); | |
| if (islLoadTest == 1) { | |
| document.getElementById("BedRoomlb").innerHTML = "BedRoom"; | |
| document.getElementById("BathRoomlb").innerHTML = "BathRoom"; | |
| document.getElementById("otherlb").innerHTML = "Other Room Types"; | |
| document.getElementById("detailedlb").innerHTML = "Detailed Bedroom Types"; | |
| document.getElementById("graphdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;"; | |
| document.getElementById("layoutdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;"; | |
| // initVue(); | |
| } | |
| d3.select('body').select('#LeftBaseSVG').selectAll("svg > *").remove(); | |
| d3.select('body').select('#LeftGraphSVG').selectAll("svg > *").remove(); | |
| d3.select('body').select('#LeftLayoutSVG').selectAll("svg > *").remove(); | |
| d3.select('body').select('#RightLayoutSVG').selectAll("svg > *").remove(); | |
| d3.select('body').select('#RightSVG').selectAll("svg > *").remove(); | |
| document.getElementById('hsList').innerHTML = ""; | |
| d3.select('body').select('#LeftBaseSVG').selectAll('polygon').remove(); | |
| d3.select('body').select('#LeftBaseSVG').selectAll('line').remove(); | |
| var file = files[0]; | |
| console.log(file.name); | |
| document.cookie = "hsname=" + file.name; | |
| $.get("/index/LoadTestBoundary", {'testName': file.name}, function (ret) { | |
| var border = 4; | |
| islLoadTest = 1; | |
| var hsex = ret['exterior']; | |
| d3.select("#LeftBaseSVG") | |
| .append("polygon") | |
| .attr("points", hsex) | |
| .attr("fill", "none") | |
| .attr("stroke", roomcolor("Exterior wall")) | |
| .attr("stroke-width", border); | |
| var fontdoor_color = roomcolor("Front door"); | |
| var door = ret['door'].split(","); | |
| d3.select('body').select('#LeftBaseSVG').append('line') | |
| .attr("x1", parseInt(door[0])) | |
| .attr("y1", door[1]) | |
| .attr("x2", door[2]) | |
| .attr("y2", door[3]) | |
| .attr("stroke", fontdoor_color) | |
| .attr("stroke-width", border); | |
| }) | |
| d3.select('body').select('#LeftBaseSVG').attr("transform", "scale(2)"); | |
| d3.select('body').select('#LeftGraphSVG').attr("transform", "scale(2)"); | |
| NumSearch(); | |
| } | |
| function CreateLeftPlan(roombx, hsex, door, windows, indoor, windowsline, rmsize) { | |
| d3.select('body').select('#LeftBaseSVG').selectAll('rect').remove(); | |
| d3.select('body').select('#LeftLayoutSVG').selectAll("svg > *").remove(); | |
| var interior_color = roomcolor("Interior wall"); | |
| var border = 4; | |
| console.log("CreateLeftPlan", roombx); | |
| for (var i = 0; i < roombx.length; i++) { | |
| var rx = roombx[i][0][0]; | |
| var ry = roombx[i][0][1]; | |
| var rw = roombx[i][0][2] - roombx[i][0][0]; | |
| var rh = roombx[i][0][3] - roombx[i][0][1]; | |
| var color = roomcolor(roombx[i][1][0]); | |
| var tooltip = d3.select("body").append("div") | |
| .attr("class", "tooltip") //用于css设置类样式 | |
| .attr("opacity", 0.0).attr("id", "tooltip" + roombx[i][1][0]) | |
| .text(roombx[i][1][0]); | |
| d3.select("#LeftLayoutSVG").append("rect").attr("x", rx)//每个矩形的起始x坐标 | |
| .attr("y", ry) | |
| .attr("width", rw) | |
| .attr("height", rh)//每个矩形的高度 | |
| .attr("stroke-width", border)//加边框厚度 | |
| .attr("stroke", interior_color) | |
| .attr("fill", color)//填充颜色 | |
| .attr("id", roombx[i][1][0] + "_" + roombx[i][2]) | |
| .on("mousedown", rect_mousedown) | |
| .on("mousemove", rect_mousemove) | |
| .on("mouseup", rect_mouseup) | |
| .on("click", rect_click) | |
| .on("dblclick", rect_dblclick) | |
| .append("title")//此处加入title标签 | |
| .text(roombx[i][1][0]);//title标签的文字 | |
| } | |
| // for (var i = 0; i < indoor.length; i++) { | |
| // d3.select("#LeftLayoutSVG").append("rect").attr("x", indoor[i][0])//每个矩形的起始x坐标 | |
| // .attr("y", indoor[i][1]) | |
| // .attr("width", indoor[i][2]) | |
| // .attr("height", indoor[i][3])//每个矩形的高度 | |
| // .attr("fill", roomcolor("Interior door"));//填充颜色 | |
| // } | |
| d3.select("#LeftLayoutSVG") | |
| .append("polygon") | |
| .attr("points", hsex) | |
| .attr("fill", "none") | |
| .attr("stroke", roomcolor("Exterior wall")) | |
| .attr("stroke-width", border); | |
| var door = door.split(","); | |
| var fontdoor_color = roomcolor("Front door"); | |
| d3.select('body').select('#LeftLayoutSVG').append('line') | |
| .attr("x1", parseInt(door[0])) | |
| .attr("y1", door[1]) | |
| .attr("x2", door[2]) | |
| .attr("y2", door[3]) | |
| .attr("stroke", fontdoor_color) | |
| .attr("stroke-width", border); | |
| var wincolor = d3.rgb(195, 195, 195); | |
| // for (var i = 0; i < windows.length; i++) { | |
| // | |
| // d3.select("#LeftBaseSVG").append("rect").attr("x", windows[i][0])//每个矩形的起始x坐标 | |
| // .attr("y", windows[i][1]) | |
| // .attr("width", windows[i][2]) | |
| // .attr("height", windows[i][3])//每个矩形的高度 | |
| // .attr("fill", "#ffffff") | |
| // .attr("stroke",wincolor) | |
| // .attr("stroke-width", 1); | |
| // } | |
| //boudary clip | |
| //?? | |
| // d3.select("body").select("#LeftCanvas").attr("style", "display:none"); | |
| d3.select("#LeftLayoutSVG").append("clipPath") | |
| .attr("id", "clip-th") | |
| .append("polygon") | |
| .attr("points", hsex); | |
| // for (var i = 0; i < windows.length; i++) { | |
| // | |
| // d3.select("#LeftLayoutSVG").append("rect").attr("x", windows[i][0])//每个矩形的起始x坐标 | |
| // .attr("y", windows[i][1]) | |
| // .attr("width", windows[i][2]) | |
| // .attr("height", windows[i][3])//每个矩形的高度 | |
| // .attr("fill", wincolor).attr("fill","#ffffff" ) | |
| // .attr("stroke",wincolor) | |
| // .attr("stroke-width", 1); | |
| // } | |
| // for (var i = 0; i < windowsline.length; i++) { | |
| // d3.select('body').select('#LeftLayoutSVG').append('line') | |
| // .attr("x1", windowsline[i][0]) | |
| // .attr("y1", windowsline[i][1]) | |
| // .attr("x2", windowsline[i][2]) | |
| // .attr("y2", windowsline[i][3]).attr("stroke",wincolor) | |
| // .attr("stroke-width", 1) .attr("class", "windowsline"); | |
| // } | |
| d3.select('body').select('#LeftLayoutSVG').attr("transform", "scale(2)"); | |
| d3.select("#LeftLayoutSVG").attr("clip-path", "url(#clip-th)"); | |
| } | |
| function CreateRightImage(roomID) { | |
| $.getJSON("/index/LoadTrainHouse/", {'roomID': roomID}, function (ret) { | |
| //Graph edge | |
| for (var i = 0; i < ret['hsedge'].length; i++) { | |
| var roomA = ret['hsedge'][i][0]; | |
| var roomB = ret['hsedge'][i][1]; | |
| d3.select('body').select('#RightSVG').append('line') | |
| .attr("x1", ret['rmpos'][roomA][2]) | |
| .attr("y1", ret['rmpos'][roomA][3]) | |
| .attr("x2", ret['rmpos'][roomB][2]) | |
| .attr("y2", ret['rmpos'][roomB][3]) | |
| .attr("stroke", "#000000") | |
| .attr("stroke-width", "2px") | |
| .attr("id", ret['rmpos'][roomA][1] + "-" + ret['rmpos'][roomB][1]) | |
| } | |
| //Graph node size | |
| console.log(ret['rmsize']); | |
| console.log(ret['rmpos']); | |
| //Graph node | |
| for (var i = 0; i < ret['rmpos'].length; i++) { | |
| d3.select('body').select('#RightSVG').append('circle') | |
| .attr("cx", ret['rmpos'][i][2]) | |
| .attr("cy", ret['rmpos'][i][3]) | |
| .attr("fill", roomcolor(ret['rmpos'][i][1])) | |
| // .attr("r", 5) | |
| .attr("r", ret['rmsize'] [i][0][0]) | |
| .attr("stroke", "#000000") | |
| .attr("stroke-width", 2) | |
| .attr("id", (i + 1) + "-" + ret['rmpos'][i][1]) | |
| } | |
| d3.select('body').select('#RightSVG').attr("transform", "scale(2)"); | |
| var border = 4; | |
| //Layout room | |
| var roombx = ret["hsbox"]; | |
| var interiorwall_color = roomcolor("Interior wall"); | |
| for (var i = 0; i < roombx.length; i++) { | |
| var rx = roombx[i][0][0]; | |
| var ry = roombx[i][0][1]; | |
| var rw = roombx[i][0][2] - roombx[i][0][0]; | |
| var rh = roombx[i][0][3] - roombx[i][0][1]; | |
| var color = roomcolor(roombx[i][1][0]); | |
| d3.select("#RightLayoutSVG") | |
| .append("rect") | |
| .attr("x", rx)//每个矩形的起始x坐标 | |
| .attr("y", ry) | |
| .attr("width", rw) | |
| .attr("height", rh)//每个矩形的高度 | |
| .attr("stroke-width", 3)//加边框厚度 | |
| .attr("stroke", interiorwall_color) | |
| .attr("fill", color)//填充颜色 | |
| .attr("id", roombx[i][1][0]); | |
| } | |
| var hsex = ret["exterior"]; | |
| //clip over boundary | |
| d3.select("#RightLayoutSVG").append("clipPath") | |
| .attr("id", "Rightclip-th") | |
| .append("polygon") | |
| .attr("points", hsex); | |
| d3.select("#RightLayoutSVG").attr("clip-path", "url(#Rightclip-th)"); | |
| //Layout Boundary | |
| d3.select("#RightLayoutSVG") | |
| .append("polygon") | |
| .attr("points", hsex) | |
| .attr("fill", "none") | |
| .attr("stroke", roomcolor("Exterior wall")) | |
| .attr("stroke-width", 6); | |
| //door | |
| var door = ret['door'].split(","); | |
| var fontdoor_color = roomcolor("Front door"); | |
| d3.select('body').select('#RightLayoutSVG').append('line') | |
| .attr("x1", door[0]) | |
| .attr("y1", door[1]) | |
| .attr("x2", door[2]) | |
| .attr("y2", door[3]) | |
| .attr("stroke", fontdoor_color) | |
| .attr("stroke-width", 6); | |
| }); | |
| d3.select('body').select('#RightLayoutSVG').attr("transform", "scale(2)"); | |
| } | |
| function GetEditGraph(ret) { | |
| var hsname = null; | |
| var arr, reg = new RegExp("(^| )hsname=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| hsname = arr[2]; | |
| var newCircles = d3.select("body").select("#LeftGraphSVG").selectAll("circle"); | |
| console.log(newCircles); | |
| var GraphNode = []; | |
| newCircles.each(function (d, i) { | |
| // console.log(this.cx.animVal.value, this.cy.animVal.value, this.id); | |
| var newnode = []; | |
| var idlist = this.id.split("_"); | |
| newnode.push(idlist[1]); | |
| newnode.push(idlist[2]); | |
| newnode.push(this.cx.animVal.value); | |
| newnode.push(this.cy.animVal.value); | |
| console.log(this.attributes.scalesize.value); | |
| newnode.push(this.attributes.scalesize.value); | |
| GraphNode.push(newnode); | |
| // GraphNode.push(newnode); | |
| }); | |
| var newLine = d3.select("body").select("#LeftGraphSVG").selectAll("line"); | |
| // console.log(newLine); | |
| var GraphEdge = []; | |
| newLine.each(function (d, i) { | |
| var newedge = []; | |
| var idlist = this.id.split("_"); | |
| newedge.push(idlist[1]); | |
| newedge.push(idlist[2]); | |
| GraphEdge.push(newedge); | |
| }); | |
| var NewGraph = []; | |
| NewGraph.push(GraphNode); | |
| NewGraph.push(GraphEdge); | |
| if (ret != 0) { | |
| NewGraph.push(ret); | |
| } | |
| return NewGraph | |
| } | |
| function GetEditLayout() { | |
| var hsname = null; | |
| var arr, reg = new RegExp("(^| )hsname=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| hsname = arr[2]; | |
| var newRects = d3.select("body").select("#LeftLayoutSVG").selectAll("rect"); | |
| console.log("newRects", newRects); | |
| var LayRect = []; | |
| newRects.each(function (d, i) { | |
| var newrect = []; | |
| var idlist = this.id.split("_"); | |
| newrect.push(idlist[0]); | |
| newrect.push(idlist[1]); | |
| newrect.push(this.x.animVal.value); | |
| newrect.push(this.y.animVal.value); | |
| newrect.push(this.x.animVal.value + this.width.animVal.value); | |
| newrect.push(this.y.animVal.value + this.height.animVal.value); | |
| LayRect.push(newrect); | |
| }); | |
| return LayRect | |
| } | |
| function GraphSearch() { | |
| document.getElementById("graphdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;"; | |
| document.getElementById("layoutdiv").style = "display:none;cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;"; | |
| var hsname = null; | |
| var arr, reg = new RegExp("(^| )hsname=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| hsname = arr[2]; | |
| NewGraph = GetEditGraph(0); | |
| var rooms = []; | |
| rooms.push(hsname); | |
| var obj = Num(); | |
| var Numrooms = []; | |
| Numrooms.push(obj.roomactarr); | |
| Numrooms.push(obj.roomexaarr); | |
| Numrooms.push(obj.roomnumarr); | |
| $.get("/index/GraphSearch/", { | |
| 'NewGraph': JSON.stringify(NewGraph), | |
| 'userRoomID': hsname, | |
| 'Numrooms': JSON.stringify(Numrooms), | |
| }, function (ret) { | |
| ListBox(ret, rooms) | |
| }); | |
| } | |
| function CreateLeftGraph(rooms, roomID) { | |
| $.getJSON("/index/TransGraph/", {'userInfo': rooms.toString(), 'roomID': roomID}, function (ret) { | |
| // $.getJSON("/index/TransGraph_net/", {'userInfo': rooms.toString(), 'roomID': roomID}, function (ret) { | |
| document.getElementById("Generate").onclick = function () { | |
| var AdjustNewGraph = []; | |
| AdjustNewGraph = GetEditGraph(ret['rmpos']); | |
| // NewGraph.push(ret['rmpos']); | |
| $.get("/index/AdjustGraph/", { | |
| 'NewGraph': JSON.stringify(AdjustNewGraph), | |
| 'userRoomID': rooms.toString().split(',')[0], | |
| 'adptRoomID': roomID | |
| }, function (adjust_ret) { | |
| // console.log("ret"); | |
| CreateLeftPlan(adjust_ret['roomret'], adjust_ret['exterior'], adjust_ret["door"], adjust_ret["windows"], adjust_ret["indoor"], adjust_ret["windowsline"]); | |
| d3.select('body').select('#LeftGraphSVG').selectAll('circle').attr("r", 0); | |
| console.log(adjust_ret['rmpos']); | |
| for (var i = 0; i < adjust_ret['rmpos'].length; i++) { | |
| var id = null; | |
| var Circlesize = null; | |
| id = "TransCircle" + "_" + adjust_ret['rmpos'][i][4] + "_" + adjust_ret['rmpos'][i][1]; | |
| Circlesize = d3.select("body").select("#LeftGraphSVG").select("#" + id); | |
| // console.log(id); | |
| // console.log(adjust_ret['rmsize'][i][0]); | |
| if (parseInt((adjust_ret['rmsize'][i][0])) == 0) { | |
| adjust_ret['rmsize'][i][0] = 4; | |
| } | |
| Circlesize.attr("r", adjust_ret['rmsize'][i][0]); | |
| } | |
| }); | |
| }; | |
| for (var i = 0; i < ret['hsedge'].length; i++) { | |
| var roomA = ret['hsedge'][i][0]; | |
| var roomB = ret['hsedge'][i][1]; | |
| var A_B = ret['hsedge'][i][2]; | |
| var id = "TransLine" + "_" + roomA + "_" + roomB + "_" + A_B; | |
| CreateLine(ret['rmpos'][roomA][2], ret['rmpos'][roomA][3], | |
| ret['rmpos'][roomB][2], ret['rmpos'][roomB][3], id); | |
| } | |
| for (var i = 0; i < ret['rmpos'].length; i++) { | |
| var id = "TransCircle" + "_" + i + "_" + ret['rmpos'][i][1]; | |
| CreateCircle(ret['rmpos'][i][2], ret['rmpos'][i][3], id, ret['rmsize'] [i][0][0]); | |
| d3.select("body").select("#LeftGraphSVG").select("#" + id).attr('scalesize', 1); | |
| } | |
| document.cookie = "RoomNum=" + ret['rmpos'].length; | |
| NewGraph = GetEditGraph(ret['rmpos']); | |
| $.get("/index/AdjustGraph/", { | |
| 'NewGraph': JSON.stringify(NewGraph), | |
| 'userRoomID': rooms.toString().split(',')[0], | |
| 'adptRoomID': roomID | |
| }, function (adjust_ret) { | |
| // console.log("ret"); | |
| CreateLeftPlan(adjust_ret['roomret'], adjust_ret['exterior'], adjust_ret["door"], adjust_ret["windows"], adjust_ret["indoor"], adjust_ret["windowsline"]); | |
| document.getElementById("downLoad").onclick = function () { | |
| var arr, reg = new RegExp("(^| )hsname=([^;]*)(;|$)"); | |
| if (arr = document.cookie.match(reg)) | |
| hsname = arr[2]; | |
| console.log(focus_rect); | |
| if (document.getElementById("graph").checked == true) { | |
| var link = document.createElement('a'); | |
| link.href = "../static/" + hsname.split(".")[0] + ".mat"; | |
| var event = document.createEvent('MouseEvents'); | |
| event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); | |
| link.dispatchEvent(event); | |
| } else { | |
| console.log("editing"); | |
| var NewLay = []; | |
| NewLay = GetEditLayout(); | |
| var newGraph = []; | |
| newGraph = GetEditGraph(ret['rmpos']); | |
| $.get("/index/Save_Editbox/", { | |
| 'NewLay': JSON.stringify(NewLay), | |
| 'NewGraph': JSON.stringify(newGraph), | |
| 'userRoomID': rooms.toString().split(',')[0], | |
| 'adptRoomID': roomID | |
| }, function (flag) { | |
| var link = document.createElement('a'); | |
| link.href = "../static/" + hsname.split(".")[0] + ".png.mat"; | |
| var event = document.createEvent('MouseEvents'); | |
| event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); | |
| link.dispatchEvent(event); | |
| }); | |
| } | |
| } | |
| }); | |
| }); | |
| d3.select('body').select('#LeftGraphSVG').attr("transform", "scale(2)"); | |
| } | |
| function showGraph(oCtl) { | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftGraphSVG").attr("opacity", "1.0") : d3.select("body").select("#LeftGraphSVG").attr("opacity", "0.0"); | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftGraphSVG").attr("style", "position: relative;z-index:999!important;") : d3.select("body").select("#LeftGraphSVG").attr("style", "position: relative;z-index:888 !important;"); | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftLayoutSVG").attr("style", "position: relative;margin-left: -259.5px;z-index:888!important;") : d3.select("body").select("#LeftLayoutSVG").attr("style", "position: relative;margin-left: -259.5px;z-index:999 !important;"); | |
| if ($(oCtl).is(':checked')) { | |
| if (document.getElementById("layout").checked == true) { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "flex").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "1.0"); | |
| } else { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "flex").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "0.0"); | |
| } | |
| document.getElementById("graphimg").style = "display:inline-flex;"; | |
| document.getElementById("graphdiv").style = "cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;" | |
| document.getElementById("Editing").style = "display:none;"; | |
| } else { | |
| document.getElementById("graphimg").style = "display:none;"; | |
| document.getElementById("Editing").style = "display:flex;margin-left: 140px; margin-top: inherit;"; | |
| // 方法一 | |
| if (document.getElementById("layout").checked == true) { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "none").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;").attr("opacity", "1.0"); | |
| } else { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "none").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "0.0"); | |
| } | |
| document.getElementById("graphdiv").style = "cursor: default;color: #000;width: 90px; border: 2px solid #bfbfbf;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 300px;" | |
| } | |
| } | |
| function showRoom(oCtl) { | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftLayoutSVG").attr("opacity", "1.0") : d3.select("body").select("#LeftLayoutSVG").attr("opacity", "0.0"); | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftLayoutSVG").attr("style", "position: relative;margin-left: -259.5px;z-index:888!important;") : d3.select("body").select("#LeftLayoutSVG").attr("style", "position: relative;margin-left: -259.5px;z-index:888!important;"); | |
| // $(oCtl).is(':checked') ? d3.select("body").select("#LeftGraphSVG").attr("style", "position: relative;z-index:999!important;") : d3.select("body").select("#LeftGraphSVG").attr("style", "position: relative;z-index:999!important;"); | |
| if ($(oCtl).is(':checked')) { | |
| if (document.getElementById("graph").checked == true) { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "flex").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "1.0"); | |
| } else { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "flex").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;").attr("opacity", "1.0"); | |
| } | |
| document.getElementById("layoutimg").style = "display:inline-flex;"; | |
| document.getElementById("layoutdiv").style = "cursor: default;color: #000;width: 90px;border: 2px solid #0072ca;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;" | |
| } else { | |
| if (document.getElementById("graph").checked == true) { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "flex").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "0.0"); | |
| } else { | |
| d3.select("body").select("#LeftGraphSVG").attr("display", "none").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:999!important;"); | |
| d3.select("body").select("#LeftLayoutSVG").attr("style", "margin-left: 128px;margin-top: 128px;position: absolute;z-index:888!important;").attr("opacity", "0.0"); | |
| } | |
| document.getElementById("layoutimg").style = "display:none;"; | |
| document.getElementById("layoutdiv").style = "cursor: default;color: #000;width: 90px;border: 2px solid #bfbfbf;border-radius: 30px;text-align: center;vertical-align: middle;line-height: 26px;height: 30px;position: absolute;margin-left: 400px;" | |
| } | |
| } | |
| function circle_mousedown() { | |
| console.log("circle_mousedown"); | |
| if (createNewLine) { | |
| var id = "TransLine" + "_" + startPoint[0].split("_")[1] + "_" + this.id.split("_")[1] + "_0"; | |
| if (hasLine(id)) { | |
| return; | |
| } | |
| //被选中的点现在也不显示是吧?这里变得颜色都一样 | |
| var points = d3.select("body").select("#LeftGraphSVG").selectAll("circle").attr("stroke", "#000000").attr("stroke-width", 2); | |
| var selectPoint = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("stroke", "#000000").attr("stroke-width", 2); | |
| scalesize = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("scalesize"); | |
| CreateLine(startPoint[1], startPoint[2], this.cx.animVal.value, this.cy.animVal.value, id); | |
| d3.select(this).remove(); | |
| d3.select("#" + startPoint[0]).remove(); | |
| adjust_graph = true; | |
| CreateCircle(startPoint[1], startPoint[2], startPoint[0], startPoint[3]); | |
| var start = d3.select("body").select("#LeftGraphSVG").select("#" + startPoint[0]).attr("scalesize", startPoint[4]); | |
| CreateCircle(this.cx.animVal.value, this.cy.animVal.value, this.id, selectPoint.attr('r')); | |
| var end = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("scalesize", scalesize); | |
| createNewLine = false; | |
| return; | |
| } | |
| focus_circle = true; | |
| var points = d3.select("body").select("#LeftGraphSVG").selectAll("circle").attr("stroke", "#000000").attr("stroke-width", 2); | |
| var selectPoint = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("stroke", "rgba(0,0,0,0.56)").attr("stroke-width", 2); | |
| var isDelete = document.querySelector('#isDelete'); | |
| //禁用系统右键菜单 | |
| document.oncontextmenu = function (eve) { | |
| return false; | |
| }; | |
| if (d3.event.button == 2) { | |
| // var deletealert = confirm("是否删除?"); | |
| // if (deletealert == true) { | |
| // selectPoint.remove(); | |
| // focus_circle = false; | |
| // adjust_graph = true; | |
| // var pointInd = this.id.split("_")[1]; | |
| // | |
| // var lines = d3.select("body").select("#LeftGraphSVG").selectAll(".TransLine"); | |
| // lines.each(function (d, i) { | |
| // var startPoint = this.id.split("_")[1]; | |
| // var endPoint = this.id.split("_")[2]; | |
| // | |
| // if (startPoint == pointInd || endPoint == pointInd) { | |
| // adjust_graph = true; | |
| // d3.select(this).remove(); | |
| // } | |
| // }) | |
| // } | |
| var leftsvg = document.getElementById('LeftGraphSVG'); | |
| //自定义右键菜单唤醒和关闭 | |
| isDelete.style.left = (d3.event.clientX - 256) + 'px'; | |
| isDelete.style.top = (d3.event.clientY) + 'px'; | |
| isDelete.style.display = 'block'; | |
| var pointInd = this.id.split("_")[1]; | |
| //事件委托写法 | |
| isDelete.onmousedown = function (eve) { | |
| if (eve.target.innerText == 'Delete') { | |
| setTimeout(function () { | |
| selectPoint.remove(); | |
| focus_circle = false; | |
| adjust_graph = true; | |
| var lines = d3.select("body").select("#LeftGraphSVG").selectAll(".TransLine"); | |
| lines.each(function (d, i) { | |
| var startPoint = this.id.split("_")[1]; | |
| var endPoint = this.id.split("_")[2]; | |
| if (startPoint == pointInd || endPoint == pointInd) { | |
| adjust_graph = true; | |
| d3.select(this).remove(); | |
| } | |
| }) | |
| }, 10); | |
| } | |
| if (eve.target.innerText == 'Scale*0.5') { | |
| SelectRadius = selectPoint.attr('r'); | |
| ScaleRadius = SelectRadius * 0.5; | |
| selectPoint.attr('r', ScaleRadius); | |
| selectPoint.attr('scalesize', 0.5); | |
| console.log(selectPoint.attr('scalesize')); | |
| } | |
| if (eve.target.innerText == 'Scale*0.25') { | |
| SelectRadius = selectPoint.attr('r'); | |
| ScaleRadius = SelectRadius * 0.25; | |
| selectPoint.attr('r', ScaleRadius); | |
| selectPoint.attr('scalesize', 0.25); | |
| console.log(selectPoint.attr('scalesize')); | |
| } | |
| if (eve.target.innerText == 'Scale*5') { | |
| SelectRadius = selectPoint.attr('r'); | |
| ScaleRadius = SelectRadius * 5; | |
| selectPoint.attr('r', ScaleRadius); | |
| selectPoint.attr('scalesize', 5); | |
| console.log(selectPoint.attr('scalesize')); | |
| } | |
| if (eve.target.innerText == 'Scale*2') { | |
| SelectRadius = selectPoint.attr('r'); | |
| ScaleRadius = SelectRadius * 2; | |
| selectPoint.attr('r', ScaleRadius); | |
| selectPoint.attr('scalesize', 2); | |
| console.log(selectPoint.attr('scalesize')); | |
| } | |
| isDelete.style.display = 'none'; | |
| } | |
| $(document).click(function (e) { | |
| var pop = $('#isDelete')[0]; | |
| if (e.target != pop && !$.contains(pop, e.target)) pop.style.display = 'none' | |
| }) | |
| } | |
| } | |
| function hasLine(id) { | |
| var lines = d3.select(".TransLine"); | |
| lines.each(function (d, i) { | |
| if (this.id == id) | |
| return true; | |
| }); | |
| return false; | |
| } | |
| function circle_mousemove() { | |
| console.log("Move!"); | |
| if (focus_circle) { | |
| var leftsvg = document.getElementById('LeftGraphSVG'); | |
| let newX = d3.event.x - leftsvg.getBoundingClientRect().left; | |
| let newY = d3.event.y - leftsvg.getBoundingClientRect().top; | |
| // console.log(newX + " " + newY) | |
| var transLines = d3.select("body").select("#LeftGraphSVG").selectAll(".TransLine"); | |
| var pointID = (this.id).split("_")[1]; | |
| transLines.each(function (d, i) { | |
| var tmp_array = (this.id).split("_"); | |
| if (tmp_array[1] == pointID) { | |
| d3.select(this).attr("x1", newX / 2).attr("y1", newY / 2); | |
| } | |
| if (tmp_array[2] == pointID) { | |
| d3.select(this).attr("x2", newX / 2).attr("y2", newY / 2); | |
| } | |
| }) | |
| var selectPoint = d3.select("body").select("#LeftGraphSVG").select("#" + this.id) | |
| .attr("cx", newX / 2).attr("cy", newY / 2); | |
| adjust_graph = true; | |
| // console.log(adjust_graph, "adjust") | |
| } | |
| } | |
| function circle_mouseup() { | |
| focus_circle = false; | |
| } | |
| function circle_dblclick() { | |
| createNewLine = true; | |
| var selectPoint = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("stroke", "#d84447").attr("stroke-width", 3); | |
| startPoint[0] = this.id; | |
| startPoint[1] = this.cx.animVal.value; | |
| startPoint[2] = this.cy.animVal.value; | |
| console.log(this.r.animVal.value); | |
| startPoint[3] = this.r.animVal.value; | |
| startPoint[4] = this.attributes.scalesize.value; | |
| } | |
| function line_mousedown() { | |
| focus_line = true; | |
| var lines = d3.select("body").select("#LeftGraphSVG").selectAll("line").attr("stroke", "#000000") | |
| var selectLine = d3.select("body").select("#LeftGraphSVG").select("#" + this.id).attr("stroke", "#d83230"); | |
| if (d3.event.button == 2) { | |
| //var startPoint = this.id.split("_")[1]; | |
| //var endPoint = this.id.split("_")[2]; | |
| //console.log(startPoint,endPoint); | |
| //var isStartSingle = true; | |
| //var isEndSingle = true; | |
| selectLine.remove(); | |
| //var curlines = d3.select("body").select("#LeftGraphSVG").selectAll("line"); | |
| /*curlines.each(function(d,i){ | |
| var tmp_start = this.id.split("_")[1]; | |
| var tmp_end = this.id.split("_")[2]; | |
| if(startPoint == tmp_start || startPoint == tmp_end) isStartSingle = false; | |
| if(endPoint == tmp_start || endPoint == tmp_end) isEndSingle = false; | |
| }) | |
| console.log(isStartSingle,isEndSingle); | |
| var circles = d3.select("body").select("#LeftGraphSVG").selectAll(".TransCircle"); | |
| circles.each(function(d,i){ | |
| var tmp_ind = this.id.split("_")[1]; | |
| if(isStartSingle && tmp_ind==startPoint) d3.select(this).remove(); | |
| if(isEndSingle && tmp_ind==endPoint) d3.select(this).remove(); | |
| })*/ | |
| focus_line = false; | |
| } | |
| } | |
| function line_mouseup() { | |
| focus_line = false; | |
| } | |
| function rect_mousedown() { | |
| console.log("rect_mousedown"); | |
| if (focus_rect != "") { | |
| var leftlaysvg = document.getElementById('LeftLayoutSVG'); | |
| let mousex = (d3.event.x - leftlaysvg.getBoundingClientRect().left) / 2; | |
| let mousey = (d3.event.y - leftlaysvg.getBoundingClientRect().top) / 2; | |
| var oldx = startRectvalue[0]; | |
| var oldy = startRectvalue[1]; | |
| var oldw = startRectvalue[2]; | |
| var oldh = startRectvalue[3]; | |
| Type = rectzoomType(mousex, mousey, oldx, oldy, oldw, oldh); | |
| console.log(Type); | |
| rect_type = true; | |
| } | |
| } | |
| function rectzoomType(mousex, mousey, oldx, oldy, oldw, oldh) { | |
| if (oldy < mousey && mousey < oldy + oldh) { | |
| if (mousex < oldx + oldw + 16) { | |
| // $('#LeftLayoutSVG').css('cursor', 'e-resize'); | |
| if (oldx + oldw - 16 < mousex) { | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 'e-resize'); | |
| var type = "right"; | |
| return type; | |
| } | |
| } | |
| if (mousex < oldx + 12) { | |
| if (oldx - 16 < mousex) { | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 'w-resize'); | |
| var type = "left"; | |
| return type; | |
| } | |
| } | |
| } | |
| if (oldx < mousex && oldx < oldx + oldw) { | |
| if (mousey < oldy + 16) { | |
| if (oldy - 16 < mousey) { | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 'n-resize'); | |
| var type = "top"; | |
| return type; | |
| } | |
| } | |
| if (mousey < oldy + oldh + 16) { | |
| if (oldy + oldh - 16 < mousey) { | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 's-resize'); | |
| var type = "down"; | |
| return type; | |
| } | |
| } | |
| } | |
| if (type == undefined) { | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 'default'); | |
| } | |
| } | |
| function rect_mousemove() { | |
| var leftlaysvg = document.getElementById('LeftLayoutSVG'); | |
| let mousex = (d3.event.x - leftlaysvg.getBoundingClientRect().left) / 2; | |
| let mousey = (d3.event.y - leftlaysvg.getBoundingClientRect().top) / 2; | |
| console.log("rect_mousemove",mousex,mousey); | |
| console.log(focus_rect); | |
| if (focus_rect == "dblclick") { | |
| // var oldx = this.x.animVal.value; | |
| // var oldy = this.y.animVal.value; | |
| // | |
| // var oldw = this.width.animVal.value; | |
| // var oldh = this.height.animVal.value; | |
| var oldx = startRectvalue[0]; | |
| var oldy = startRectvalue[1]; | |
| var oldw = startRectvalue[2]; | |
| var oldh = startRectvalue[3]; | |
| rectzoomType(mousex, mousey, oldx, oldy, oldw, oldh); | |
| // console.log(type); | |
| if (rect_type) { | |
| var item = null; | |
| var obj = document.getElementsByName("edit"); | |
| for (var i = 0; i < obj.length; i++) { //遍历Radio | |
| if (obj[i].checked) { | |
| item = obj[i].value; | |
| } | |
| } | |
| if (item == "local") { | |
| switch (Type) { | |
| case "right": | |
| selectRect.attr("width", mousex - oldx); | |
| break; | |
| case "left": | |
| // selectRect.attr("x", mousex).attr("width", mousex - oldx + oldw); | |
| selectRect.attr("x", mousex); | |
| selectRect.attr("width", oldx - mousex + oldw); | |
| break; | |
| case "top": | |
| selectRect.attr("y", mousey).attr("height", oldy - mousey + oldh); | |
| break; | |
| case "down": | |
| selectRect.attr("height", mousey - oldy); | |
| break; | |
| } | |
| } | |
| if (item == "global") { | |
| switch (Type) { | |
| case "right": | |
| for (i = 0; i < RelRectvalue[0].length; i++) { | |
| var RelRect = d3.select("body").select("#LeftLayoutSVG").select("#" + RelRectvalue[0][i][4]); | |
| RelRect.attr("width", mousex - RelRectvalue[0][i][0]); | |
| } | |
| break; | |
| case "left": | |
| for (i = 0; i < RelRectvalue[1].length; i++) { | |
| var RelRect = d3.select("body").select("#LeftLayoutSVG").select("#" + RelRectvalue[1][i][4]); | |
| RelRect.attr("x", mousex); | |
| RelRect.attr("width", Number(RelRectvalue[1][i][0]) - mousex + Number(RelRectvalue[1][i][2])); | |
| } | |
| break; | |
| case "down": | |
| for (i = 0; i < RelRectvalue[3].length; i++) { | |
| var RelRect = d3.select("body").select("#LeftLayoutSVG").select("#" + RelRectvalue[3][i][4]); | |
| RelRect.attr("height", mousey - RelRectvalue[3][i][1]); | |
| } | |
| break; | |
| case "top": | |
| for (i = 0; i < RelRectvalue[2].length; i++) { | |
| console.log(RelRectvalue[2][i]); | |
| var RelRect = d3.select("body").select("#LeftLayoutSVG").select("#" + RelRectvalue[2][i][4]); | |
| RelRect.attr("y", mousey).attr("height", Number(RelRectvalue[2][i][1]) - mousey + Number(RelRectvalue[2][i][3])); | |
| } | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function rect_mouseup() { | |
| console.log("rect_mouseup"); | |
| focus_rect = ""; | |
| rect_type = false; | |
| var interior_color = roomcolor("Interior wall"); | |
| var rects = d3.select("body").select("#LeftLayoutSVG").selectAll("rect").attr("stroke", interior_color).attr("stroke-width", 4); | |
| d3.select("body").select("#LeftLayoutSVG").attr('cursor', 'default'); | |
| } | |
| function rect_dblclick() { | |
| console.log("rect_dblclick"); | |
| var item = null; | |
| var obj = document.getElementsByName("edit"); | |
| for (var i = 0; i < obj.length; i++) { //遍历Radio | |
| if (obj[i].checked) { | |
| item = obj[i].value; | |
| } | |
| } | |
| var interior_color = roomcolor("Interior wall"); | |
| var rects = d3.select("body").select("#LeftLayoutSVG").selectAll("rect").attr("stroke", interior_color).attr("stroke-width", 4); | |
| selectRect = d3.select("body").select("#LeftLayoutSVG").select("#" + this.id).attr("stroke", "#d84447").attr("stroke-width", 4); | |
| focus_rect = "dblclick"; | |
| startRectvalue[0] = this.x.animVal.value; | |
| startRectvalue[1] = this.y.animVal.value; | |
| startRectvalue[2] = this.width.animVal.value; | |
| startRectvalue[3] = this.height.animVal.value; | |
| if (item == "global") { | |
| console.log(this.id); | |
| $.get("/index/RelBox/", { | |
| 'selectRect': this.id | |
| }, function (rdirgroup) { | |
| for (k = 0; k < rdirgroup.length; k++) { | |
| var RelRectvalue2 = []; | |
| for (i = 0; i < rdirgroup[k].length; i++) { | |
| var RelRectvalue1 = []; | |
| var RelRect = d3.select("body").select("#LeftLayoutSVG").select("#" + rdirgroup[k][i]); | |
| RelRectvalue1[0] = RelRect.attr("x"); | |
| RelRectvalue1[1] = RelRect.attr("y"); | |
| RelRectvalue1[2] = RelRect.attr("width"); | |
| RelRectvalue1[3] = RelRect.attr("height"); | |
| RelRectvalue1[4] = rdirgroup[k][i]; | |
| RelRectvalue2[i] = RelRectvalue1 | |
| } | |
| RelRectvalue[k] = RelRectvalue2; | |
| } | |
| console.log(RelRectvalue); | |
| console.log(RelRectvalue[2]); | |
| console.log(RelRectvalue[0]); | |
| }); | |
| } | |
| } | |
| function rect_click() { | |
| console.log("rect_click"); | |
| focus_rect = "click"; | |
| } |