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"; | |
} |