123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212 |
- 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;++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;
- }
- }
-
- }
- 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;
- }
- }
- }
- 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;
- }
- }
-
- }
- 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;
- }
- }
- }
-
- if(newpoint1==null&&newpoint2==null)
- {
- break;
- }
- }
- };
- */
- Build.prototype.getRelaEndLines2 = function (wallid, type, index, endindex, point) {
- var lines = [];
- //墙角
- if (type == 0) {
- 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 (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;i<this.firstLines.length;++i)
- {
- vector.geometry.firstLines[i] = this.firstLines[i];
- }
- }
- if(this.endLines.length>0)
- {
- vector.geometry.endLines=[];
- for(var i=0;i<this.endLines.length;++i)
- {
- vector.geometry.endLines[i] = this.endLines[i];
- }
- }
- */
- vector.geometry.floor = this.layer.selectFloor;
- vector.geometry.contextIndex = contextIndex;
- this.layer.drawSingleVector(vector);
- return vector.id;
- };
- Build.prototype.createSymbol2 = function (type) {
- var symbol = null;
- if (type == "OpenDoor") {
- symbol = new Vector(new OpenDoor(), openStyle);
- }
- else if (type == "SimpleDoor") {
- symbol = new Vector(new SimpleDoor(), simpleStyle);
- }
- else if (type == "BiFoldDoor") {
- symbol = new Vector(new BiFoldDoor(), biFoldStyle);
- }
- else if (type == "SlidingDoor") {
- symbol = new Vector(new SlidingDoor(), biFoldStyle);
- }
- else if (type == "OpenWindow") {
- symbol = new Vector(new OpenWindow(), openStyle);
- }
- else if (type == "SingleCasement") {
- symbol = new Vector(new SingleCasement(), singleStyle);
- }
- else if (type == "DoubleCasement") {
- symbol = new Vector(new DoubleCasement(), doubleStyle);
- }
- else if (type == "SlidingWindow") {
- symbol = new Vector(new SlidingWindow(), slidingStyle);
- }
- else if (type == "WinderStair") {
- symbol = new Vector(new WinderStair(), winderStyle);
- }
- symbol.geometry.floor = this.layer.selectFloor;
- return symbol;
- };
- Build.prototype.createSymbol = function (id) {
- if (id == "menuitemdoors0") {
- this.tryAddSymbol = new Vector(new OpenDoor(), openStyle);
- }
- else if (id == "menuitemdoors1") {
- this.tryAddSymbol = new Vector(new SimpleDoor(), simpleStyle);
- }
- else if (id == "menuitemdoors2") {
- this.tryAddSymbol = new Vector(new BiFoldDoor(), biFoldStyle);
- }
- else if (id == "menuitemdoors3") {
- this.tryAddSymbol = new Vector(new SlidingDoor(), biFoldStyle);
- }
- else if (id == "menuitemwindows0") {
- this.tryAddSymbol = new Vector(new OpenWindow(), openStyle);
- }
- else if (id == "menuitemwindows1") {
- this.tryAddSymbol = new Vector(new SingleCasement(), singleStyle);
- }
- else if (id == "menuitemwindows2") {
- this.tryAddSymbol = new Vector(new DoubleCasement(), doubleStyle);
- }
- else if (id == "menuitemwindows3") {
- this.tryAddSymbol = new Vector(new SlidingWindow(), slidingStyle);
- }
- else if (id == "menuitemstairways0") {
- this.tryAddSymbol = new Vector(new WinderStair(), winderStyle);
- this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
- }
- else if (id == "menuitemstairways1") {
- this.tryAddSymbol = new Vector(new Spiral(), spiralStyle);
- this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
- }
- this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
- };
- Build.prototype.BuildingSpiral = function (point) {
- var points = this.layer.calculateElement.GetSpiralpoints(point);
- this.tryAddSymbol.geometry.points = points;
- this.tryAddSymbol.geometry.point1 = { x: (point.x + this.layer.parameter.spiralR1), y: point.y };
- this.tryAddSymbol.geometry.point2 = { x: point.x, y: point.y + this.layer.parameter.spiralR1 };
- this.tryAddSymbol.geometry.point = point;
- this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
- this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
- this.layer.drawSingleVector(this.tryAddSymbol);
- this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
- this.tryAddSymbol = null;
- };
- Build.prototype.BuildingWinderStair = function (point) {
- if (this.buildwallState == null) {
- if (this.tryAddSymbol.geometry.points.length == 0) {
- this.tryAddSymbol.geometry.points.push(point);
- this.buildwallState = 1;
- this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.selectcontext;
- this.layer.drawSingleVector(this.tryAddSymbol);
- return;
- }
- else {
- this.layer.currentState.startbuild = null;
- this.tryAddSymbol.geometry.temp_points = [];
- this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
- this.tryAddSymbol.geometry.points.push(point);
- var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
- this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
- this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
- this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
- this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
- this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
- this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
- this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
- this.layer.control.refreshSelectCanvas = true;
- this.layer.control.refreshCanvas = true;
- this.layer.renderer.autoRedraw();
- this.tryAddSymbol = null;
- return;
- }
- }
- else if (this.buildwallState == 1) {
- if (this.tryAddSymbol.geometry.lastpoint != null) {
- this.tryAddSymbol.geometry.points.push(this.tryAddSymbol.geometry.lastpoint);
- this.tryAddSymbol.geometry.lastpoint = null;
- }
- this.tryAddSymbol.geometry.temp_points = [];
- for (var i = 0; i < this.tryAddSymbol.geometry.points.length; ++i) {
- this.tryAddSymbol.geometry.temp_points.push(this.tryAddSymbol.geometry.points[i]);
- }
- this.tryAddSymbol.geometry.temp_points.push(point);
- var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.temp_points);
- this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
- this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
- this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
- this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
- this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
- this.layer.control.refreshSelectCanvas = true;
- }
- else if (this.buildwallState == 2) {
- /*
- this.tryAddSymbol.geometry.points.push(point);
- this.tryAddSymbol.geometry.temp_points=[];
- var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
- this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
- this.tryAddSymbol.geometry.borderpoints.border1=allpoints.border1;
- this.tryAddSymbol.geometry.borderpoints.border2=allpoints.border2;
- console.log("点击!");
- */
- this.tryAddSymbol.geometry.lastpoint = point;
- this.tryAddSymbol.geometry.temp_points = [];
- }
- this.layer.renderer.autoRedraw();
- };
- /*
- //添加symbol
- Build.prototype.addbuildSymbol=function(wallid,startinidex,endindex,point)
- {
- if(wallid==null)
- {
- return;
- }
- var len=this.tryAddSymbol.getLen();
- var point1,point2;
- //不能是墙角
- if(endindex!=null&&typeof(endindex)!=undefined)
- {
- point1=this.layer.vectors[wallid].geometry.points[startinidex];
- point2=this.layer.vectors[wallid].geometry.points[endindex];
- }
- else if(this.tryAddSymbol.points.length>0)
- {
- 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;
- };
- */
|