function Build(layer) { this.layer = layer; //0表示开始 //1表示建设 //2也表示建设,鼠标单击 //null表示完成 this.buildwallState = null; //表示构建墙的第一个点 this.lastWallPoint = null; //建设的墙的id this.buildwallId = null; this.temp_buildwallId = null; //this.firstLines=[]; //this.endLines=[]; //添加的symbol(还没确定) this.tryAddSymbol = null; }; Build.prototype.adjustPoint = function (point) { //this.buildwallState=1; var calculateLine = this.layer.calculateLine; if (this.layer.currentState.selectWallSet != null) { var startjoin = null; if (this.layer.currentState.selectWallSet.type == 0) { startjoin = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.index]; } else if (this.layer.currentState.selectWallSet.type == 1) { var startindex = this.layer.currentState.selectWallSet.index; var endindex = this.layer.currentState.selectWallSet.endindex; var point1 = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.index]; var point2 = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.endindex]; var line = calculateLine.createLine(point1, point2); startjoin = calculateLine.getJoinLinePoint(point, line); } return startjoin; } else { return point; } }; Build.prototype.adjustEndPoint = function (id) { var len = this.layer.vectors[id].geometry.points.length; var point1 = this.layer.vectors[id].geometry.points[0]; var point2 = this.layer.vectors[id].geometry.points[len - 1]; var wallSet1 = this.layer.calculateElement.wallsContain(point1, id); var wallSet2 = this.layer.calculateElement.wallsContain(point2, id); if (wallSet1 != null) { var line1 = this.layer.calculateLine.createLine(point1, this.layer.vectors[id].geometry.points[1]); var line2 = this.layer.calculateLine.createLine(this.layer.vectors[wallSet1.id].geometry.points[wallSet1.index], this.layer.vectors[wallSet1.id].geometry.points[wallSet1.endindex]); var join = this.layer.calculateLine.getIntersectionPoint(line1, line2); this.layer.vectors[id].geometry.points[0] = join; this.layer.vectors[id].geometry.firstLines = this.getRelaEndLines2(wallSet1.id, wallSet1.type, wallSet1.index, wallSet1.endindex, point1); } if (wallSet2 != null) { var line1 = this.layer.calculateLine.createLine(point2, this.layer.vectors[id].geometry.points[len - 2]); var line2 = this.layer.calculateLine.createLine(this.layer.vectors[wallSet2.id].geometry.points[wallSet2.index], this.layer.vectors[wallSet2.id].geometry.points[wallSet2.endindex]); var join = this.layer.calculateLine.getIntersectionPoint(line1, line2); this.layer.vectors[id].geometry.points[len - 1] = join; this.layer.vectors[id].geometry.endLines = this.getRelaEndLines2(wallSet2.id, wallSet2.type, wallSet2.index, wallSet2.endindex, point2); } /* if(this.layer.vectors[id].geometry.state==0) { return false; } var flag = false; if(this.layer.vectors[id].geometry.firstSeg!=null&&typeof(this.layer.vectors[id].geometry.firstSeg)!=undefined) { var seg={}; seg.point1 = this.layer.vectors[id].geometry.wallInfo[0].border1; seg.point2 = this.layer.vectors[id].geometry.wallInfo[1].border1; var join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.firstSeg); if(join!=null) { this.layer.vectors[id].geometry.wallInfo[0].border1 = join; } seg.point1 = this.layer.vectors[id].geometry.wallInfo[0].border2; seg.point2 = this.layer.vectors[id].geometry.wallInfo[1].border2; join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.firstSeg); if(join!=null) { this.layer.vectors[id].geometry.wallInfo[0].border2 = join; } flag=true; } var len = this.layer.vectors[id].geometry.wallInfo.length; if(this.layer.vectors[id].geometry.endSeg!=null&&typeof(this.layer.vectors[id].geometry.endSeg)!=undefined) { var seg={}; seg.point1 = this.layer.vectors[id].geometry.wallInfo[len-1].border1; seg.point2 = this.layer.vectors[id].geometry.wallInfo[len-2].border1; var join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.endSeg); if(join!=null) { this.layer.vectors[id].geometry.wallInfo[len-1].border1 = join; } seg.point1 = this.layer.vectors[id].geometry.wallInfo[len-1].border2; seg.point2 = this.layer.vectors[id].geometry.wallInfo[len-2].border2; join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.endSeg); if(join!=null) { this.layer.vectors[id].geometry.wallInfo[len-1].border2 = join; } flag=true; } return flag; */ } Build.prototype.getIntersectWall2 = function (exceptid, currentwallid) { if (this.layer.vectors[exceptid].geometry.state == 0) { return; } var point1 = this.layer.vectors[exceptid].geometry.points[0]; var point2 = this.layer.vectors[exceptid].geometry.points[1]; var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1]; var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2]; var len = this.layer.data2d.wallIds.length; var line = this.layer.calculateLine.createLine(point1, point2); var lineend = this.layer.calculateLine.createLine(point3, point4); var newpoint1 = null; var newpoint2 = null; var wallId = currentwallid; var result1 = this.layer.calculateElement.singleWallContain(point1, wallId); if (newpoint1 == null) { var result1 = this.layer.calculateElement.singleWallContain(point1, wallId); if (result1 != null) { var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]); newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1); if (newpoint1 != null) { this.layer.vectors[exceptid].geometry.points[0] = newpoint1; var seg1 = {}; seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1; seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2; seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { this.layer.vectors[exceptid].geometry.firstSeg = seg2; } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join2 == null) { this.layer.vectors[exceptid].geometry.firstSeg = seg1; } else { if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { this.layer.vectors[exceptid].geometry.firstSeg = seg1; } else { this.layer.vectors[exceptid].geometry.firstSeg = seg2; } } } this.layer.control.refreshCanvas = true; } } } if (newpoint2 == null) { var result2 = this.layer.calculateElement.singleWallContain(point3, wallId); if (result2 != null) { var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]); newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2); if (newpoint2 != null) { this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2; var seg1 = {}; seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1; seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2; seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { this.layer.vectors[exceptid].geometry.endSeg = seg2; } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join2 == null) { this.layer.vectors[exceptid].geometry.endSeg = seg1; } else { if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { this.layer.vectors[exceptid].geometry.endSeg = seg1; } else { this.layer.vectors[exceptid].geometry.endSeg = seg2; } } } this.layer.control.refreshCanvas = true; } } } }; Build.prototype.getIntersectWall = function (exceptid) { if (this.layer.vectors[exceptid].geometry.state == 0) { return; } var point1 = this.layer.vectors[exceptid].geometry.points[0]; var point2 = this.layer.vectors[exceptid].geometry.points[1]; var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1]; var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2]; var len = this.layer.data2d.wallIds.length; var line = this.layer.calculateLine.createLine(point1, point2); var lineend = this.layer.calculateLine.createLine(point3, point4); var newpoint1 = null; var newpoint2 = null; var join1 = null; var join2 = null; for (var i = 0; i < len; ++i) { var wallId = this.layer.data2d.wallIds[i]; if (exceptid != null && typeof (exceptid != "undefined")) { if (wallId == exceptid) { continue; } } if (newpoint1 == null) { var result1 = this.layer.calculateElement.singleWallContain(point1, wallId); if (result1 != null) { var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]); newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1); if (newpoint1 != null) { this.layer.vectors[exceptid].geometry.points[0] = newpoint1; var seg1 = {}; seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1; seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2; seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { /* this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1; join2 = this.layer.calculateLine.isjoin(seg2,_seg2); if(join2!=null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2; } */ this.layer.vectors[exceptid].geometry.firstSeg = seg2; } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join2 == null) { this.layer.vectors[exceptid].geometry.firstSeg = seg1; } else { if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { this.layer.vectors[exceptid].geometry.firstSeg = seg1; /* this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1; join2 = this.layer.calculateLine.isjoin(seg1,_seg2); if(join2!=null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2; } */ } else { /* this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join2; join1 = this.layer.calculateLine.isjoin(seg2,_seg2); if(join1!=null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join1; } */ this.layer.vectors[exceptid].geometry.firstSeg = seg2; } } } this.layer.control.refreshCanvas = true; } } } if (newpoint2 == null) { var result2 = this.layer.calculateElement.singleWallContain(point3, wallId); if (result2 != null) { var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]); newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2); if (newpoint2 != null) { this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2; var seg1 = {}; seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1; seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2; seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { /* this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg2,_seg2); if(join2!=null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2; } */ this.layer.vectors[exceptid].geometry.endSeg = seg2; } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join2 == null) { this.layer.vectors[exceptid].geometry.endSeg = seg1; } else { if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { /* this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg1,_seg2); if(join2!=null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2; } */ this.layer.vectors[exceptid].geometry.endSeg = seg1; } else { /* this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join2; join1 = this.layer.calculateLine.isjoin(seg2,_seg2); if(join1!=null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join1; } */ this.layer.vectors[exceptid].geometry.endSeg = seg2; } } } this.layer.control.refreshCanvas = true; } } } if (newpoint1 == null && newpoint2 == null) { break; } } }; //不封闭的墙的两个端点自适应 Build.prototype.adjustEndPoint2 = function (exceptid, currentwallid) { if (this.layer.vectors[exceptid].geometry.state == 0) { return; } var point1 = this.layer.vectors[exceptid].geometry.points[0]; var point2 = this.layer.vectors[exceptid].geometry.points[1]; var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1]; var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2]; var len = this.layer.data2d.wallIds.length; var line = this.layer.calculateLine.createLine(point1, point2); var lineend = this.layer.calculateLine.createLine(point3, point4); var newpoint1 = null; var newpoint2 = null; var wallId = currentwallid; var result1 = this.layer.calculateElement.singleWallContain(point1, wallId); if (result1 != null) { var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]); newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1); if (newpoint1 != null) { this.layer.vectors[exceptid].geometry.points[0] = newpoint1; var seg1 = {}; seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1; seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2; seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg2, _seg2); if (join2 != null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join2; } } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg1, _seg2); if (join2 != null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join2; } } else { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join2; join1 = this.layer.calculateLine.isjoin(seg2, _seg2); if (join1 != null) { this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join1; } } } this.layer.control.refreshCanvas = true; } } var result2 = this.layer.calculateElement.singleWallContain(point3, wallId); if (result2 != null) { var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]); newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2); if (newpoint2 != null) { this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2; var seg1 = {}; seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1; seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1; var seg2 = {}; seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2; seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2; var _seg1 = {}; _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1; _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1; var _seg2 = {}; _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2; _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2; join1 = this.layer.calculateLine.isjoin(seg1, _seg1); if (join1 == null) { join1 = this.layer.calculateLine.isjoin(seg2, _seg1); if (join1 != null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg2, _seg2); if (join2 != null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2; } } } else { join2 = this.layer.calculateLine.isjoin(seg2, _seg1); if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1; join2 = this.layer.calculateLine.isjoin(seg1, _seg2); if (join2 != null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2; } } else { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join2; join1 = this.layer.calculateLine.isjoin(seg2, _seg2); if (join1 != null) { this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join1; } } } this.layer.control.refreshCanvas = true; } } }; /* Build.prototype.adjustEndPoint= function(exceptid) { if(this.layer.vectors[exceptid].geometry.state==0) { return; } var point1=this.layer.vectors[exceptid].geometry.points[0]; var point2=this.layer.vectors[exceptid].geometry.points[1]; var point3=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-1]; var point4=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-2]; var len=this.layer.data2d.wallIds.length; var line=this.layer.calculateLine.createLine(point1,point2); var lineend=this.layer.calculateLine.createLine(point3,point4); var newpoint1=null; var newpoint2=null; var join1=null; var join2=null; for(var i=0;i= len) { index2 = 0; } /* lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2}); */ lines.push({ index1: index1, index2: index, border: "border1", id: wallid }); lines.push({ index1: index1, index2: index, border: "border2", id: wallid }); lines.push({ index1: index2, index2: index, border: "border1", id: wallid }); lines.push({ index1: index2, index2: index, border: "border2", id: wallid }); } //墙面 else if (type == 1) { lines = this.getEndLines(index, endindex, wallid); var line = this.layer.calculateLine.createLine(this.layer.vectors[wallid].geometry.points[index], this.layer.vectors[wallid].geometry.points[endindex]); var thick = this.layer.calculateLine.getDistancePointToLine(point, line); if (thick < this.layer.vectors[wallid].geometry.wallInfo[Math.min(index, endindex)].thick) { return lines; } else { var line1 = this.layer.calculateLine.createLine(lines[0].point1, lines[0].point2); var d1 = this.layer.calculateLine.getDistancePointToLine(point, line1); var line2 = this.layer.calculateLine.createLine(lines[1].point1, lines[1].point2); var d2 = this.layer.calculateLine.getDistancePointToLine(point, line2); if (d1 > d2) { lines.shift(); } else { lines.pop(); } } } return lines; } //当前墙的端点与别的墙相交的墙面 Build.prototype.getRelaEndLines = function () { var lines = []; //墙角 if (this.layer.currentState.selectWallSet.type == 0) { var index = this.layer.currentState.selectWallSet.index; var wallid = this.layer.currentState.selectWallSet.id; var len = this.layer.vectors[wallid].geometry.points.length; var index1 = index - 1; var index2 = index + 1; if (index1 < 0) { index1 = len - 2; } if (index2 >= len) { index2 = 0; } /* lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1}); lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2}); */ lines.push({ index1: index1, index2: index, border: "border1", id: wallid }); lines.push({ index1: index1, index2: index, border: "border2", id: wallid }); lines.push({ index1: index2, index2: index, border: "border1", id: wallid }); lines.push({ index1: index2, index2: index, border: "border2", id: wallid }); } //墙面 else if (this.layer.currentState.selectWallSet.type == 1) { lines = this.getEndLines(this.layer.currentState.selectWallSet.index, this.layer.currentState.selectWallSet.endindex, this.layer.currentState.selectWallSet.id); } return lines; }; Build.prototype.getEndLines = function (index1, index2, wallid) { var lines = []; //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1}); //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2}); lines.push({ index1: index1, index2: index2, border: "border1", id: wallid }); lines.push({ index1: index1, index2: index2, border: "border2", id: wallid }); return lines; } Build.prototype.BuildingWall = function (point) { if (this.layer.currentState.startbuild == "wall") { this.layer.pan.f_buildingWall = true; this.layer.pan.f_buildingPartition = false; } else if (this.layer.currentState.startbuild == "partition") { this.layer.pan.f_buildingPartition = true; this.layer.pan.f_buildingWall = false; } //开始建 if (this.buildwallId == null || this.temp_buildwallId == null) { //第一个点 if (this.lastWallPoint == null) { this.lastWallPoint = this.adjustPoint(point); /* if(this.layer.currentState.selectWallSet!=null) { this.firstLines=this.getRelaEndLines(); } */ return; } } if (this.temp_buildwallId != null && this.buildwallState != 1) { this.saveBuildingWall(); } //正在建 if (this.buildwallState == 1) { var points = []; points.push(this.lastWallPoint); points.push(point); if (this.temp_buildwallId == null) { this.temp_buildwallId = this.addOpenWall(points, "imgTempWall", this.layer.parameter.selectcontext); this.layer.data2d.temp_wallId = this.temp_buildwallId; this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext; } else { this.layer.vectors[this.temp_buildwallId].geometry.points = points; this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext; this.layer.control.refreshSelectCanvas = true; } } //正在建,鼠标点击后的操作 else if (this.buildwallState == 2) { this.layer.deleteVector(this.temp_buildwallId); this.layer.data2d.temp_wallId = null; this.layer.control.refreshSelectCanvas = true; this.buildwallState = null; } //建好了 else if (this.buildwallState == null) { this.f_buildingWall = false; this.f_buildingPartition = false; this.lastWallPoint = null; this.layer.currentState.startbuild = null; //this.firstLines=[]; //this.endLines=[]; return; } }; //修完墙 Build.prototype.finishWall = function () { this.buildwallState = null; this.layer.pan.f_buildingWall = false; this.layer.pan.f_buildingPartition = false; this.layer.currentState.startbuild = null; if (this.temp_buildwallId != null) { this.layer.deleteVector(this.temp_buildwallId); this.temp_buildwallId = null; this.layer.data2d.temp_wallId = null; } this.buildwallId = null; this.lastWallPoint = null; this.layer.currentState.currentWallId = null; }; Build.prototype.addOneWallInfo = function () { var len = this.layer.vectors[this.buildwallId].geometry.wallInfo.length; this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].height = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].height; this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].thick = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].thick; this.layer.vectors[this.buildwallId].geometry.wallInfo.push({ height: 0, thick: 0 }); }; Build.prototype.saveBuildingWall = function () { if (this.buildwallId == null) { this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1]; this.buildwallId = this.addOpenWall(this.layer.vectors[this.temp_buildwallId].geometry.points, "imgWall", this.layer.parameter.contextIndex); this.layer.data2d.wallIds.push(this.buildwallId); } else if (this.temp_buildwallId != null) { if (this.layer.currentState.startbuild == null) { if (this.layer.currentState.selectWallSet.type == 0) { //与墙的第一个点相交 if (this.layer.currentState.selectWallSet.index == 0) { this.layer.vectors[this.buildwallId].geometry.state = 0; } //与墙的倒数第二个点相交 else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) { this.layer.vectors[this.buildwallId].geometry.state = 1; } else { this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint); this.addOneWallInfo(); } } //与墙的最后一堵墙相交 else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) { this.layer.vectors[this.buildwallId].geometry.state = 1; } else { this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint); this.addOneWallInfo(); } } else { this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1]; this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint); this.addOneWallInfo(); } } this.layer.deleteVector(this.temp_buildwallId); this.temp_buildwallId = null; this.layer.data2d.temp_wallId = null; //this.firstLines=[]; if (this.layer.currentState.startbuild == null) { this.lastWallPoint = null; this.buildwallId = null; this.layer.control.refreshSelectCanvas = true; this.layer.renderer.autoRedraw(); } }; //添加墙 Build.prototype.addOpenWall = function (points, imgid, contextIndex) { var wall = new Wall(points, document.getElementById(imgid)); wall.state = 1; if (this.layer.pan.f_buildingWall) { wall.wallType = 1; } else if (this.layer.pan.f_buildingPartition) { wall.wallType = 2; } var vector = new Vector(wall, wallStyle); /* if(this.firstLines.length>0) { vector.geometry.firstLines=[]; for(var i=0;i0) { vector.geometry.endLines=[]; for(var i=0;i0) { point1=this.tryAddSymbol.points[0]; point2=this.tryAddSymbol.points[1]; } //添加虚拟的symbol且在墙角 else { point1=this.layer.vectors[wallid].geometry.points[startinidex]; endindex=this.layer.calculateElement.getNextIndex(this.layer.vectors[wallid].geometry.points,startinidex); point2=this.layer.vectors[wallid].geometry.points[endindex]; } var line=this.layer.calculateLine.createLine(point1,point2); var endpoint=this.layer.calculateLine.getDisPointsLine(line,point,len/2,len/2) this.tryAddSymbol.wallid=wallid; this.tryAddSymbol.startindex=startinidex; this.tryAddSymbol.endindex=endindex; this.tryAddSymbol.point1=endpoint.newpoint1; this.tryAddSymbol.point2=endpoint.newpoint2; this.tryAddSymbol.update(this.layer); this.tryAddSymbol.select=true; this.tryAddSymbol.draw(this.layer); this.layer.pan.currentState.currentSymbolId=this.tryAddSymbol.id; this.layer.pan.currentState.currentstartlinePointIndex=startinidex; this.layer.pan.currentState.currentendlinePointIndex=endindex; this.layer.select.f_selectWallLine=true; this.layer.control.refreshCanvas=true; this.layer.control.refreshSelectCanvas=true; }; */