Build.js 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215
  1. function Build(layer) {
  2. this.layer = layer;
  3. //0表示开始
  4. //1表示建设
  5. //2也表示建设,鼠标单击
  6. //null表示完成
  7. this.buildwallState = null;
  8. //表示构建墙的第一个点
  9. this.lastWallPoint = null;
  10. //建设的墙的id
  11. this.buildwallId = null;
  12. this.temp_buildwallId = null;
  13. //this.firstLines=[];
  14. //this.endLines=[];
  15. //添加的symbol(还没确定)
  16. this.tryAddSymbol = null;
  17. };
  18. Build.prototype.adjustPoint = function (point) {
  19. //this.buildwallState=1;
  20. var calculateLine = this.layer.calculateLine;
  21. if (this.layer.currentState.selectWallSet != null) {
  22. var startjoin = null;
  23. if (this.layer.currentState.selectWallSet.type == 0) {
  24. startjoin = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.index];
  25. }
  26. else if (this.layer.currentState.selectWallSet.type == 1) {
  27. var startindex = this.layer.currentState.selectWallSet.index;
  28. var endindex = this.layer.currentState.selectWallSet.endindex;
  29. var point1 = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.index];
  30. var point2 = this.layer.vectors[this.layer.currentState.selectWallSet.id].geometry.points[this.layer.currentState.selectWallSet.endindex];
  31. var line = calculateLine.createLine(point1, point2);
  32. startjoin = calculateLine.getJoinLinePoint(point, line);
  33. }
  34. return startjoin;
  35. }
  36. else {
  37. return point;
  38. }
  39. };
  40. Build.prototype.adjustEndPoint = function (id) {
  41. var len = this.layer.vectors[id].geometry.points.length;
  42. var point1 = this.layer.vectors[id].geometry.points[0];
  43. var point2 = this.layer.vectors[id].geometry.points[len - 1];
  44. var wallSet1 = this.layer.calculateElement.wallsContain(point1, id);
  45. var wallSet2 = this.layer.calculateElement.wallsContain(point2, id);
  46. if (wallSet1 != null) {
  47. var line1 = this.layer.calculateLine.createLine(point1, this.layer.vectors[id].geometry.points[1]);
  48. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[wallSet1.id].geometry.points[wallSet1.index], this.layer.vectors[wallSet1.id].geometry.points[wallSet1.endindex]);
  49. var join = this.layer.calculateLine.getIntersectionPoint(line1, line2);
  50. this.layer.vectors[id].geometry.points[0] = join;
  51. this.layer.vectors[id].geometry.firstLines = this.getRelaEndLines2(wallSet1.id, wallSet1.type, wallSet1.index, wallSet1.endindex, point1);
  52. }
  53. if (wallSet2 != null) {
  54. var line1 = this.layer.calculateLine.createLine(point2, this.layer.vectors[id].geometry.points[len - 2]);
  55. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[wallSet2.id].geometry.points[wallSet2.index], this.layer.vectors[wallSet2.id].geometry.points[wallSet2.endindex]);
  56. var join = this.layer.calculateLine.getIntersectionPoint(line1, line2);
  57. this.layer.vectors[id].geometry.points[len - 1] = join;
  58. this.layer.vectors[id].geometry.endLines = this.getRelaEndLines2(wallSet2.id, wallSet2.type, wallSet2.index, wallSet2.endindex, point2);
  59. }
  60. /*
  61. if(this.layer.vectors[id].geometry.state==0)
  62. {
  63. return false;
  64. }
  65. var flag = false;
  66. if(this.layer.vectors[id].geometry.firstSeg!=null&&typeof(this.layer.vectors[id].geometry.firstSeg)!=undefined)
  67. {
  68. var seg={};
  69. seg.point1 = this.layer.vectors[id].geometry.wallInfo[0].border1;
  70. seg.point2 = this.layer.vectors[id].geometry.wallInfo[1].border1;
  71. var join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.firstSeg);
  72. if(join!=null)
  73. {
  74. this.layer.vectors[id].geometry.wallInfo[0].border1 = join;
  75. }
  76. seg.point1 = this.layer.vectors[id].geometry.wallInfo[0].border2;
  77. seg.point2 = this.layer.vectors[id].geometry.wallInfo[1].border2;
  78. join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.firstSeg);
  79. if(join!=null)
  80. {
  81. this.layer.vectors[id].geometry.wallInfo[0].border2 = join;
  82. }
  83. flag=true;
  84. }
  85. var len = this.layer.vectors[id].geometry.wallInfo.length;
  86. if(this.layer.vectors[id].geometry.endSeg!=null&&typeof(this.layer.vectors[id].geometry.endSeg)!=undefined)
  87. {
  88. var seg={};
  89. seg.point1 = this.layer.vectors[id].geometry.wallInfo[len-1].border1;
  90. seg.point2 = this.layer.vectors[id].geometry.wallInfo[len-2].border1;
  91. var join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.endSeg);
  92. if(join!=null)
  93. {
  94. this.layer.vectors[id].geometry.wallInfo[len-1].border1 = join;
  95. }
  96. seg.point1 = this.layer.vectors[id].geometry.wallInfo[len-1].border2;
  97. seg.point2 = this.layer.vectors[id].geometry.wallInfo[len-2].border2;
  98. join = this.layer.calculateLine.isjoin(seg,this.layer.vectors[id].geometry.endSeg);
  99. if(join!=null)
  100. {
  101. this.layer.vectors[id].geometry.wallInfo[len-1].border2 = join;
  102. }
  103. flag=true;
  104. }
  105. return flag;
  106. */
  107. }
  108. Build.prototype.getIntersectWall2 = function (exceptid, currentwallid) {
  109. if (this.layer.vectors[exceptid].geometry.state == 0) {
  110. return;
  111. }
  112. var point1 = this.layer.vectors[exceptid].geometry.points[0];
  113. var point2 = this.layer.vectors[exceptid].geometry.points[1];
  114. var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1];
  115. var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2];
  116. var len = this.layer.data2d.wallIds.length;
  117. var line = this.layer.calculateLine.createLine(point1, point2);
  118. var lineend = this.layer.calculateLine.createLine(point3, point4);
  119. var newpoint1 = null;
  120. var newpoint2 = null;
  121. var wallId = currentwallid;
  122. var result1 = this.layer.calculateElement.singleWallContain(point1, wallId);
  123. if (newpoint1 == null) {
  124. var result1 = this.layer.calculateElement.singleWallContain(point1, wallId);
  125. if (result1 != null) {
  126. var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]);
  127. newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1);
  128. if (newpoint1 != null) {
  129. this.layer.vectors[exceptid].geometry.points[0] = newpoint1;
  130. var seg1 = {};
  131. seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1;
  132. seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1;
  133. var seg2 = {};
  134. seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2;
  135. seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2;
  136. var _seg1 = {};
  137. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1;
  138. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1;
  139. var _seg2 = {};
  140. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2;
  141. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2;
  142. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  143. if (join1 == null) {
  144. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  145. if (join1 != null) {
  146. this.layer.vectors[exceptid].geometry.firstSeg = seg2;
  147. }
  148. }
  149. else {
  150. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  151. if (join2 == null) {
  152. this.layer.vectors[exceptid].geometry.firstSeg = seg1;
  153. }
  154. else {
  155. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  156. this.layer.vectors[exceptid].geometry.firstSeg = seg1;
  157. }
  158. else {
  159. this.layer.vectors[exceptid].geometry.firstSeg = seg2;
  160. }
  161. }
  162. }
  163. this.layer.control.refreshCanvas = true;
  164. }
  165. }
  166. }
  167. if (newpoint2 == null) {
  168. var result2 = this.layer.calculateElement.singleWallContain(point3, wallId);
  169. if (result2 != null) {
  170. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  171. newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2);
  172. if (newpoint2 != null) {
  173. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2;
  174. var seg1 = {};
  175. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  176. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  177. var seg2 = {};
  178. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  179. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  180. var _seg1 = {};
  181. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1;
  182. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1;
  183. var _seg2 = {};
  184. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2;
  185. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2;
  186. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  187. if (join1 == null) {
  188. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  189. if (join1 != null) {
  190. this.layer.vectors[exceptid].geometry.endSeg = seg2;
  191. }
  192. }
  193. else {
  194. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  195. if (join2 == null) {
  196. this.layer.vectors[exceptid].geometry.endSeg = seg1;
  197. }
  198. else {
  199. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  200. this.layer.vectors[exceptid].geometry.endSeg = seg1;
  201. }
  202. else {
  203. this.layer.vectors[exceptid].geometry.endSeg = seg2;
  204. }
  205. }
  206. }
  207. this.layer.control.refreshCanvas = true;
  208. }
  209. }
  210. }
  211. };
  212. Build.prototype.getIntersectWall = function (exceptid) {
  213. if (this.layer.vectors[exceptid].geometry.state == 0) {
  214. return;
  215. }
  216. var point1 = this.layer.vectors[exceptid].geometry.points[0];
  217. var point2 = this.layer.vectors[exceptid].geometry.points[1];
  218. var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1];
  219. var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2];
  220. var len = this.layer.data2d.wallIds.length;
  221. var line = this.layer.calculateLine.createLine(point1, point2);
  222. var lineend = this.layer.calculateLine.createLine(point3, point4);
  223. var newpoint1 = null;
  224. var newpoint2 = null;
  225. var join1 = null;
  226. var join2 = null;
  227. for (var i = 0; i < len; ++i) {
  228. var wallId = this.layer.data2d.wallIds[i];
  229. if (exceptid != null && typeof (exceptid != "undefined")) {
  230. if (wallId == exceptid) {
  231. continue;
  232. }
  233. }
  234. if (newpoint1 == null) {
  235. var result1 = this.layer.calculateElement.singleWallContain(point1, wallId);
  236. if (result1 != null) {
  237. var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]);
  238. newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1);
  239. if (newpoint1 != null) {
  240. this.layer.vectors[exceptid].geometry.points[0] = newpoint1;
  241. var seg1 = {};
  242. seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1;
  243. seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1;
  244. var seg2 = {};
  245. seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2;
  246. seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2;
  247. var _seg1 = {};
  248. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1;
  249. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1;
  250. var _seg2 = {};
  251. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2;
  252. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2;
  253. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  254. if (join1 == null) {
  255. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  256. if (join1 != null) {
  257. /*
  258. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  259. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  260. if(join2!=null)
  261. {
  262. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  263. }
  264. */
  265. this.layer.vectors[exceptid].geometry.firstSeg = seg2;
  266. }
  267. }
  268. else {
  269. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  270. if (join2 == null) {
  271. this.layer.vectors[exceptid].geometry.firstSeg = seg1;
  272. }
  273. else {
  274. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  275. this.layer.vectors[exceptid].geometry.firstSeg = seg1;
  276. /*
  277. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  278. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  279. if(join2!=null)
  280. {
  281. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  282. }
  283. */
  284. }
  285. else {
  286. /*
  287. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join2;
  288. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  289. if(join1!=null)
  290. {
  291. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join1;
  292. }
  293. */
  294. this.layer.vectors[exceptid].geometry.firstSeg = seg2;
  295. }
  296. }
  297. }
  298. this.layer.control.refreshCanvas = true;
  299. }
  300. }
  301. }
  302. if (newpoint2 == null) {
  303. var result2 = this.layer.calculateElement.singleWallContain(point3, wallId);
  304. if (result2 != null) {
  305. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  306. newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2);
  307. if (newpoint2 != null) {
  308. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2;
  309. var seg1 = {};
  310. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  311. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  312. var seg2 = {};
  313. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  314. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  315. var _seg1 = {};
  316. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1;
  317. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1;
  318. var _seg2 = {};
  319. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2;
  320. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2;
  321. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  322. if (join1 == null) {
  323. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  324. if (join1 != null) {
  325. /*
  326. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  327. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  328. if(join2!=null)
  329. {
  330. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  331. }
  332. */
  333. this.layer.vectors[exceptid].geometry.endSeg = seg2;
  334. }
  335. }
  336. else {
  337. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  338. if (join2 == null) {
  339. this.layer.vectors[exceptid].geometry.endSeg = seg1;
  340. }
  341. else {
  342. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  343. /*
  344. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  345. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  346. if(join2!=null)
  347. {
  348. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  349. }
  350. */
  351. this.layer.vectors[exceptid].geometry.endSeg = seg1;
  352. }
  353. else {
  354. /*
  355. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join2;
  356. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  357. if(join1!=null)
  358. {
  359. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join1;
  360. }
  361. */
  362. this.layer.vectors[exceptid].geometry.endSeg = seg2;
  363. }
  364. }
  365. }
  366. this.layer.control.refreshCanvas = true;
  367. }
  368. }
  369. }
  370. if (newpoint1 == null && newpoint2 == null) {
  371. break;
  372. }
  373. }
  374. };
  375. //不封闭的墙的两个端点自适应
  376. Build.prototype.adjustEndPoint2 = function (exceptid, currentwallid) {
  377. if (this.layer.vectors[exceptid].geometry.state == 0) {
  378. return;
  379. }
  380. var point1 = this.layer.vectors[exceptid].geometry.points[0];
  381. var point2 = this.layer.vectors[exceptid].geometry.points[1];
  382. var point3 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1];
  383. var point4 = this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 2];
  384. var len = this.layer.data2d.wallIds.length;
  385. var line = this.layer.calculateLine.createLine(point1, point2);
  386. var lineend = this.layer.calculateLine.createLine(point3, point4);
  387. var newpoint1 = null;
  388. var newpoint2 = null;
  389. var wallId = currentwallid;
  390. var result1 = this.layer.calculateElement.singleWallContain(point1, wallId);
  391. if (result1 != null) {
  392. var line1 = this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index], this.layer.vectors[result1.id].geometry.points[result1.endindex]);
  393. newpoint1 = this.layer.calculateLine.getIntersectionPoint(line, line1);
  394. if (newpoint1 != null) {
  395. this.layer.vectors[exceptid].geometry.points[0] = newpoint1;
  396. var seg1 = {};
  397. seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1;
  398. seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1;
  399. var seg2 = {};
  400. seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2;
  401. seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2;
  402. var _seg1 = {};
  403. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1;
  404. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1;
  405. var _seg2 = {};
  406. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2;
  407. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2;
  408. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  409. if (join1 == null) {
  410. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  411. if (join1 != null) {
  412. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join1;
  413. join2 = this.layer.calculateLine.isjoin(seg2, _seg2);
  414. if (join2 != null) {
  415. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join2;
  416. }
  417. }
  418. }
  419. else {
  420. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  421. if (!join2) return;
  422. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  423. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join1;
  424. join2 = this.layer.calculateLine.isjoin(seg1, _seg2);
  425. if (join2 != null) {
  426. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join2;
  427. }
  428. }
  429. else {
  430. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join2;
  431. join1 = this.layer.calculateLine.isjoin(seg2, _seg2);
  432. if (join1 != null) {
  433. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join1;
  434. }
  435. }
  436. }
  437. this.layer.control.refreshCanvas = true;
  438. }
  439. }
  440. var result2 = this.layer.calculateElement.singleWallContain(point3, wallId);
  441. if (result2 != null) {
  442. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  443. newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2);
  444. if (newpoint2 != null) {
  445. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2;
  446. var seg1 = {};
  447. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  448. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  449. var seg2 = {};
  450. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  451. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  452. var _seg1 = {};
  453. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1;
  454. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1;
  455. var _seg2 = {};
  456. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2;
  457. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2;
  458. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  459. if (join1 == null) {
  460. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  461. if (join1 != null) {
  462. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1;
  463. join2 = this.layer.calculateLine.isjoin(seg2, _seg2);
  464. if (join2 != null) {
  465. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2;
  466. }
  467. }
  468. }
  469. else {
  470. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  471. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  472. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1;
  473. join2 = this.layer.calculateLine.isjoin(seg1, _seg2);
  474. if (join2 != null) {
  475. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2;
  476. }
  477. }
  478. else {
  479. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join2;
  480. join1 = this.layer.calculateLine.isjoin(seg2, _seg2);
  481. if (join1 != null) {
  482. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join1;
  483. }
  484. }
  485. }
  486. this.layer.control.refreshCanvas = true;
  487. }
  488. }
  489. };
  490. /*
  491. Build.prototype.adjustEndPoint= function(exceptid)
  492. {
  493. if(this.layer.vectors[exceptid].geometry.state==0)
  494. {
  495. return;
  496. }
  497. var point1=this.layer.vectors[exceptid].geometry.points[0];
  498. var point2=this.layer.vectors[exceptid].geometry.points[1];
  499. var point3=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-1];
  500. var point4=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-2];
  501. var len=this.layer.data2d.wallIds.length;
  502. var line=this.layer.calculateLine.createLine(point1,point2);
  503. var lineend=this.layer.calculateLine.createLine(point3,point4);
  504. var newpoint1=null;
  505. var newpoint2=null;
  506. var join1=null;
  507. var join2=null;
  508. for(var i=0;i<len;++i)
  509. {
  510. var wallId=this.layer.data2d.wallIds[i];
  511. if(exceptid!=null&&typeof(exceptid!="undefined"))
  512. {
  513. if(wallId==exceptid)
  514. {
  515. continue;
  516. }
  517. }
  518. if(newpoint1==null)
  519. {
  520. var result1=this.layer.calculateElement.singleWallContain(point1,wallId);
  521. if(result1!=null)
  522. {
  523. var line1=this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index],this.layer.vectors[result1.id].geometry.points[result1.endindex]);
  524. newpoint1=this.layer.calculateLine.getIntersectionPoint(line,line1);
  525. if(newpoint1!=null)
  526. {
  527. this.layer.vectors[exceptid].geometry.points[0]=newpoint1;
  528. var seg1 = {};
  529. seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1;
  530. seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1;
  531. var seg2 ={};
  532. seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2;
  533. seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2;
  534. var _seg1 ={};
  535. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1;
  536. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1;
  537. var _seg2 ={};
  538. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2;
  539. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2;
  540. join1 = this.layer.calculateLine.isjoin(seg1,_seg1);
  541. if(join1==null)
  542. {
  543. join1 = this.layer.calculateLine.isjoin(seg2,_seg1);
  544. if(join1!=null)
  545. {
  546. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  547. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  548. if(join2!=null)
  549. {
  550. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  551. }
  552. }
  553. }
  554. else
  555. {
  556. join2 = this.layer.calculateLine.isjoin(seg2,_seg1);
  557. if(BABYLON.Vector2.Distance(_seg1.point2,join1)<BABYLON.Vector2.Distance(_seg1.point2,join2))
  558. {
  559. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  560. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  561. if(join2!=null)
  562. {
  563. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  564. }
  565. }
  566. else
  567. {
  568. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join2;
  569. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  570. if(join1!=null)
  571. {
  572. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join1;
  573. }
  574. }
  575. }
  576. this.layer.control.refreshCanvas=true;
  577. }
  578. }
  579. }
  580. if(newpoint2==null)
  581. {
  582. var result2=this.layer.calculateElement.singleWallContain(point3,wallId);
  583. if(result2!=null)
  584. {
  585. var line2=this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index],this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  586. newpoint2=this.layer.calculateLine.getIntersectionPoint(lineend,line2);
  587. if(newpoint2!=null)
  588. {
  589. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-1]=newpoint2;
  590. var seg1 = {};
  591. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  592. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  593. var seg2 ={};
  594. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  595. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  596. var _seg1 ={};
  597. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].border1;
  598. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-2].border1;
  599. var _seg2 ={};
  600. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].border2;
  601. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-2].border2;
  602. join1 = this.layer.calculateLine.isjoin(seg1,_seg1);
  603. if(join1==null)
  604. {
  605. join1 = this.layer.calculateLine.isjoin(seg2,_seg1);
  606. if(join1!=null)
  607. {
  608. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  609. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  610. if(join2!=null)
  611. {
  612. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  613. }
  614. }
  615. }
  616. else
  617. {
  618. join2 = this.layer.calculateLine.isjoin(seg2,_seg1);
  619. if(BABYLON.Vector2.Distance(_seg1.point2,join1)<BABYLON.Vector2.Distance(_seg1.point2,join2))
  620. {
  621. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  622. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  623. if(join2!=null)
  624. {
  625. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  626. }
  627. }
  628. else
  629. {
  630. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join2;
  631. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  632. if(join1!=null)
  633. {
  634. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join1;
  635. }
  636. }
  637. }
  638. this.layer.control.refreshCanvas=true;
  639. }
  640. }
  641. }
  642. if(newpoint1==null&&newpoint2==null)
  643. {
  644. break;
  645. }
  646. }
  647. };
  648. */
  649. Build.prototype.getRelaEndLines2 = function (wallid, type, index, endindex, point) {
  650. var lines = [];
  651. //墙角
  652. if (type == 0) {
  653. var len = this.layer.vectors[wallid].geometry.points.length;
  654. var index1 = index - 1;
  655. var index2 = index + 1;
  656. if (index1 < 0) {
  657. index1 = len - 2;
  658. }
  659. if (index2 >= len) {
  660. index2 = 0;
  661. }
  662. /*
  663. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1});
  664. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2});
  665. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  666. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  667. */
  668. lines.push({ index1: index1, index2: index, border: "border1", id: wallid });
  669. lines.push({ index1: index1, index2: index, border: "border2", id: wallid });
  670. lines.push({ index1: index2, index2: index, border: "border1", id: wallid });
  671. lines.push({ index1: index2, index2: index, border: "border2", id: wallid });
  672. }
  673. //墙面
  674. else if (type == 1) {
  675. lines = this.getEndLines(index, endindex, wallid);
  676. var line = this.layer.calculateLine.createLine(this.layer.vectors[wallid].geometry.points[index], this.layer.vectors[wallid].geometry.points[endindex]);
  677. var thick = this.layer.calculateLine.getDistancePointToLine(point, line);
  678. if (thick < this.layer.vectors[wallid].geometry.wallInfo[Math.min(index, endindex)].thick) {
  679. return lines;
  680. }
  681. else {
  682. var line1 = this.layer.calculateLine.createLine(lines[0].point1, lines[0].point2);
  683. var d1 = this.layer.calculateLine.getDistancePointToLine(point, line1);
  684. var line2 = this.layer.calculateLine.createLine(lines[1].point1, lines[1].point2);
  685. var d2 = this.layer.calculateLine.getDistancePointToLine(point, line2);
  686. if (d1 > d2) {
  687. lines.shift();
  688. }
  689. else {
  690. lines.pop();
  691. }
  692. }
  693. }
  694. return lines;
  695. }
  696. //当前墙的端点与别的墙相交的墙面
  697. Build.prototype.getRelaEndLines = function () {
  698. var lines = [];
  699. //墙角
  700. if (this.layer.currentState.selectWallSet.type == 0) {
  701. var index = this.layer.currentState.selectWallSet.index;
  702. var wallid = this.layer.currentState.selectWallSet.id;
  703. var len = this.layer.vectors[wallid].geometry.points.length;
  704. var index1 = index - 1;
  705. var index2 = index + 1;
  706. if (index1 < 0) {
  707. index1 = len - 2;
  708. }
  709. if (index2 >= len) {
  710. index2 = 0;
  711. }
  712. /*
  713. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1});
  714. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2});
  715. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  716. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  717. */
  718. lines.push({ index1: index1, index2: index, border: "border1", id: wallid });
  719. lines.push({ index1: index1, index2: index, border: "border2", id: wallid });
  720. lines.push({ index1: index2, index2: index, border: "border1", id: wallid });
  721. lines.push({ index1: index2, index2: index, border: "border2", id: wallid });
  722. }
  723. //墙面
  724. else if (this.layer.currentState.selectWallSet.type == 1) {
  725. lines = this.getEndLines(this.layer.currentState.selectWallSet.index, this.layer.currentState.selectWallSet.endindex, this.layer.currentState.selectWallSet.id);
  726. }
  727. return lines;
  728. };
  729. Build.prototype.getEndLines = function (index1, index2, wallid) {
  730. var lines = [];
  731. //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  732. //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  733. lines.push({ index1: index1, index2: index2, border: "border1", id: wallid });
  734. lines.push({ index1: index1, index2: index2, border: "border2", id: wallid });
  735. return lines;
  736. }
  737. Build.prototype.BuildingWall = function (point) {
  738. if (this.layer.currentState.startbuild == "wall") {
  739. this.layer.pan.f_buildingWall = true;
  740. this.layer.pan.f_buildingPartition = false;
  741. }
  742. else if (this.layer.currentState.startbuild == "partition") {
  743. this.layer.pan.f_buildingPartition = true;
  744. this.layer.pan.f_buildingWall = false;
  745. }
  746. //开始建
  747. if (this.buildwallId == null || this.temp_buildwallId == null) {
  748. //第一个点
  749. if (this.lastWallPoint == null) {
  750. this.lastWallPoint = this.adjustPoint(point);
  751. /*
  752. if(this.layer.currentState.selectWallSet!=null)
  753. {
  754. this.firstLines=this.getRelaEndLines();
  755. }
  756. */
  757. return;
  758. }
  759. }
  760. if (this.temp_buildwallId != null && this.buildwallState != 1) {
  761. this.saveBuildingWall();
  762. }
  763. //正在建
  764. if (this.buildwallState == 1) {
  765. var points = [];
  766. points.push(this.lastWallPoint);
  767. points.push(point);
  768. if (this.temp_buildwallId == null) {
  769. this.temp_buildwallId = this.addOpenWall(points, "imgTempWall", this.layer.parameter.selectcontext);
  770. this.layer.data2d.temp_wallId = this.temp_buildwallId;
  771. this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext;
  772. }
  773. else {
  774. this.layer.vectors[this.temp_buildwallId].geometry.points = points;
  775. this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext;
  776. this.layer.control.refreshSelectCanvas = true;
  777. }
  778. }
  779. //正在建,鼠标点击后的操作
  780. else if (this.buildwallState == 2) {
  781. this.layer.deleteVector(this.temp_buildwallId);
  782. this.layer.data2d.temp_wallId = null;
  783. this.layer.control.refreshSelectCanvas = true;
  784. this.buildwallState = null;
  785. }
  786. //建好了
  787. else if (this.buildwallState == null) {
  788. this.f_buildingWall = false;
  789. this.f_buildingPartition = false;
  790. this.lastWallPoint = null;
  791. this.layer.currentState.startbuild = null;
  792. //this.firstLines=[];
  793. //this.endLines=[];
  794. return;
  795. }
  796. };
  797. //修完墙
  798. Build.prototype.finishWall = function () {
  799. this.buildwallState = null;
  800. this.layer.pan.f_buildingWall = false;
  801. this.layer.pan.f_buildingPartition = false;
  802. this.layer.currentState.startbuild = null;
  803. if (this.temp_buildwallId != null) {
  804. this.layer.deleteVector(this.temp_buildwallId);
  805. this.temp_buildwallId = null;
  806. this.layer.data2d.temp_wallId = null;
  807. }
  808. this.buildwallId = null;
  809. this.lastWallPoint = null;
  810. this.layer.currentState.currentWallId = null;
  811. };
  812. Build.prototype.addOneWallInfo = function () {
  813. var len = this.layer.vectors[this.buildwallId].geometry.wallInfo.length;
  814. this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].height = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].height;
  815. this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].thick = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].thick;
  816. this.layer.vectors[this.buildwallId].geometry.wallInfo.push({ height: 0, thick: 0 });
  817. };
  818. Build.prototype.saveBuildingWall = function () {
  819. if (this.buildwallId == null) {
  820. this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1];
  821. this.buildwallId = this.addOpenWall(this.layer.vectors[this.temp_buildwallId].geometry.points, "imgWall", this.layer.parameter.contextIndex);
  822. this.layer.data2d.wallIds.push(this.buildwallId);
  823. }
  824. else if (this.temp_buildwallId != null) {
  825. if (this.layer.currentState.startbuild == null) {
  826. if (this.layer.currentState.selectWallSet.type == 0) { //与墙的第一个点相交
  827. if (this.layer.currentState.selectWallSet.index == 0) {
  828. this.layer.vectors[this.buildwallId].geometry.state = 0;
  829. }
  830. //与墙的倒数第二个点相交
  831. else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) {
  832. this.layer.vectors[this.buildwallId].geometry.state = 1;
  833. }
  834. else {
  835. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  836. this.addOneWallInfo();
  837. }
  838. }
  839. //与墙的最后一堵墙相交
  840. else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) {
  841. this.layer.vectors[this.buildwallId].geometry.state = 1;
  842. }
  843. else {
  844. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  845. this.addOneWallInfo();
  846. }
  847. }
  848. else {
  849. this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1];
  850. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  851. this.addOneWallInfo();
  852. }
  853. }
  854. this.layer.deleteVector(this.temp_buildwallId);
  855. this.temp_buildwallId = null;
  856. this.layer.data2d.temp_wallId = null;
  857. //this.firstLines=[];
  858. if (this.layer.currentState.startbuild == null) {
  859. this.lastWallPoint = null;
  860. this.buildwallId = null;
  861. this.layer.control.refreshSelectCanvas = true;
  862. this.layer.renderer.autoRedraw();
  863. }
  864. };
  865. //添加墙
  866. Build.prototype.addOpenWall = function (points, imgid, contextIndex) {
  867. var wall = new Wall(points, document.getElementById(imgid));
  868. wall.state = 1;
  869. if (this.layer.pan.f_buildingWall) {
  870. wall.wallType = 1;
  871. }
  872. else if (this.layer.pan.f_buildingPartition) {
  873. wall.wallType = 2;
  874. }
  875. var vector = new Vector(wall, wallStyle);
  876. /*
  877. if(this.firstLines.length>0)
  878. {
  879. vector.geometry.firstLines=[];
  880. for(var i=0;i<this.firstLines.length;++i)
  881. {
  882. vector.geometry.firstLines[i] = this.firstLines[i];
  883. }
  884. }
  885. if(this.endLines.length>0)
  886. {
  887. vector.geometry.endLines=[];
  888. for(var i=0;i<this.endLines.length;++i)
  889. {
  890. vector.geometry.endLines[i] = this.endLines[i];
  891. }
  892. }
  893. */
  894. vector.geometry.floor = this.layer.selectFloor;
  895. vector.geometry.contextIndex = contextIndex;
  896. this.layer.drawSingleVector(vector);
  897. return vector.id;
  898. };
  899. Build.prototype.createSymbol2 = function (type) {
  900. var symbol = null;
  901. if (type == "OpenDoor") {
  902. symbol = new Vector(new OpenDoor(), openStyle);
  903. }
  904. else if (type == "SimpleDoor") {
  905. symbol = new Vector(new SimpleDoor(), simpleStyle);
  906. }
  907. else if (type == "BiFoldDoor") {
  908. symbol = new Vector(new BiFoldDoor(), biFoldStyle);
  909. }
  910. else if (type == "SlidingDoor") {
  911. symbol = new Vector(new SlidingDoor(), biFoldStyle);
  912. }
  913. else if (type == "OpenWindow") {
  914. symbol = new Vector(new OpenWindow(), openStyle);
  915. }
  916. else if (type == "SingleCasement") {
  917. symbol = new Vector(new SingleCasement(), singleStyle);
  918. }
  919. else if (type == "DoubleCasement") {
  920. symbol = new Vector(new DoubleCasement(), doubleStyle);
  921. }
  922. else if (type == "SlidingWindow") {
  923. symbol = new Vector(new SlidingWindow(), slidingStyle);
  924. }
  925. else if (type == "WinderStair") {
  926. symbol = new Vector(new WinderStair(), winderStyle);
  927. }
  928. symbol.geometry.floor = this.layer.selectFloor;
  929. return symbol;
  930. };
  931. Build.prototype.createSymbol = function (id) {
  932. if (id == "menuitemdoors0") {
  933. this.tryAddSymbol = new Vector(new OpenDoor(), openStyle);
  934. }
  935. else if (id == "menuitemdoors1") {
  936. this.tryAddSymbol = new Vector(new SimpleDoor(), simpleStyle);
  937. }
  938. else if (id == "menuitemdoors2") {
  939. this.tryAddSymbol = new Vector(new BiFoldDoor(), biFoldStyle);
  940. }
  941. else if (id == "menuitemdoors3") {
  942. this.tryAddSymbol = new Vector(new SlidingDoor(), biFoldStyle);
  943. }
  944. else if (id == "menuitemwindows0") {
  945. this.tryAddSymbol = new Vector(new OpenWindow(), openStyle);
  946. }
  947. else if (id == "menuitemwindows1") {
  948. this.tryAddSymbol = new Vector(new SingleCasement(), singleStyle);
  949. }
  950. else if (id == "menuitemwindows2") {
  951. this.tryAddSymbol = new Vector(new DoubleCasement(), doubleStyle);
  952. }
  953. else if (id == "menuitemwindows3") {
  954. this.tryAddSymbol = new Vector(new SlidingWindow(), slidingStyle);
  955. }
  956. else if (id == "menuitemstairways0") {
  957. this.tryAddSymbol = new Vector(new WinderStair(), winderStyle);
  958. this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
  959. }
  960. else if (id == "menuitemstairways1") {
  961. this.tryAddSymbol = new Vector(new Spiral(), spiralStyle);
  962. this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
  963. }
  964. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  965. };
  966. Build.prototype.BuildingSpiral = function (point) {
  967. var points = this.layer.calculateElement.GetSpiralpoints(point);
  968. this.tryAddSymbol.geometry.points = points;
  969. this.tryAddSymbol.geometry.point1 = { x: (point.x + this.layer.parameter.spiralR1), y: point.y };
  970. this.tryAddSymbol.geometry.point2 = { x: point.x, y: point.y + this.layer.parameter.spiralR1 };
  971. this.tryAddSymbol.geometry.point = point;
  972. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
  973. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  974. this.layer.drawSingleVector(this.tryAddSymbol);
  975. this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
  976. this.tryAddSymbol = null;
  977. };
  978. Build.prototype.BuildingWinderStair = function (point) {
  979. if (this.buildwallState == null) {
  980. if (this.tryAddSymbol.geometry.points.length == 0) {
  981. this.tryAddSymbol.geometry.points.push(point);
  982. this.buildwallState = 1;
  983. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.selectcontext;
  984. this.layer.drawSingleVector(this.tryAddSymbol);
  985. return;
  986. }
  987. else {
  988. this.layer.currentState.startbuild = null;
  989. this.tryAddSymbol.geometry.temp_points = [];
  990. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
  991. this.tryAddSymbol.geometry.points.push(point);
  992. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
  993. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  994. this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
  995. this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
  996. this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
  997. this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
  998. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  999. this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
  1000. this.layer.control.refreshSelectCanvas = true;
  1001. this.layer.control.refreshCanvas = true;
  1002. this.layer.renderer.autoRedraw();
  1003. this.tryAddSymbol = null;
  1004. return;
  1005. }
  1006. }
  1007. else if (this.buildwallState == 1) {
  1008. if (this.tryAddSymbol.geometry.lastpoint != null) {
  1009. this.tryAddSymbol.geometry.points.push(this.tryAddSymbol.geometry.lastpoint);
  1010. this.tryAddSymbol.geometry.lastpoint = null;
  1011. }
  1012. this.tryAddSymbol.geometry.temp_points = [];
  1013. for (var i = 0; i < this.tryAddSymbol.geometry.points.length; ++i) {
  1014. this.tryAddSymbol.geometry.temp_points.push(this.tryAddSymbol.geometry.points[i]);
  1015. }
  1016. this.tryAddSymbol.geometry.temp_points.push(point);
  1017. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.temp_points);
  1018. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  1019. this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
  1020. this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
  1021. this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
  1022. this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
  1023. this.layer.control.refreshSelectCanvas = true;
  1024. }
  1025. else if (this.buildwallState == 2) {
  1026. /*
  1027. this.tryAddSymbol.geometry.points.push(point);
  1028. this.tryAddSymbol.geometry.temp_points=[];
  1029. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
  1030. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  1031. this.tryAddSymbol.geometry.borderpoints.border1=allpoints.border1;
  1032. this.tryAddSymbol.geometry.borderpoints.border2=allpoints.border2;
  1033. console.log("点击!");
  1034. */
  1035. this.tryAddSymbol.geometry.lastpoint = point;
  1036. this.tryAddSymbol.geometry.temp_points = [];
  1037. }
  1038. this.layer.renderer.autoRedraw();
  1039. };
  1040. /*
  1041. //添加symbol
  1042. Build.prototype.addbuildSymbol=function(wallid,startinidex,endindex,point)
  1043. {
  1044. if(wallid==null)
  1045. {
  1046. return;
  1047. }
  1048. var len=this.tryAddSymbol.getLen();
  1049. var point1,point2;
  1050. //不能是墙角
  1051. if(endindex!=null&&typeof(endindex)!=undefined)
  1052. {
  1053. point1=this.layer.vectors[wallid].geometry.points[startinidex];
  1054. point2=this.layer.vectors[wallid].geometry.points[endindex];
  1055. }
  1056. else if(this.tryAddSymbol.points.length>0)
  1057. {
  1058. point1=this.tryAddSymbol.points[0];
  1059. point2=this.tryAddSymbol.points[1];
  1060. }
  1061. //添加虚拟的symbol且在墙角
  1062. else
  1063. {
  1064. point1=this.layer.vectors[wallid].geometry.points[startinidex];
  1065. endindex=this.layer.calculateElement.getNextIndex(this.layer.vectors[wallid].geometry.points,startinidex);
  1066. point2=this.layer.vectors[wallid].geometry.points[endindex];
  1067. }
  1068. var line=this.layer.calculateLine.createLine(point1,point2);
  1069. var endpoint=this.layer.calculateLine.getDisPointsLine(line,point,len/2,len/2)
  1070. this.tryAddSymbol.wallid=wallid;
  1071. this.tryAddSymbol.startindex=startinidex;
  1072. this.tryAddSymbol.endindex=endindex;
  1073. this.tryAddSymbol.point1=endpoint.newpoint1;
  1074. this.tryAddSymbol.point2=endpoint.newpoint2;
  1075. this.tryAddSymbol.update(this.layer);
  1076. this.tryAddSymbol.select=true;
  1077. this.tryAddSymbol.draw(this.layer);
  1078. this.layer.pan.currentState.currentSymbolId=this.tryAddSymbol.id;
  1079. this.layer.pan.currentState.currentstartlinePointIndex=startinidex;
  1080. this.layer.pan.currentState.currentendlinePointIndex=endindex;
  1081. this.layer.select.f_selectWallLine=true;
  1082. this.layer.control.refreshCanvas=true;
  1083. this.layer.control.refreshSelectCanvas=true;
  1084. };
  1085. */