Build.js 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212
  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 (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  422. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join1;
  423. join2 = this.layer.calculateLine.isjoin(seg1, _seg2);
  424. if (join2 != null) {
  425. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join2;
  426. }
  427. }
  428. else {
  429. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 = join2;
  430. join1 = this.layer.calculateLine.isjoin(seg2, _seg2);
  431. if (join1 != null) {
  432. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 = join1;
  433. }
  434. }
  435. }
  436. this.layer.control.refreshCanvas = true;
  437. }
  438. }
  439. var result2 = this.layer.calculateElement.singleWallContain(point3, wallId);
  440. if (result2 != null) {
  441. var line2 = this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index], this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  442. newpoint2 = this.layer.calculateLine.getIntersectionPoint(lineend, line2);
  443. if (newpoint2 != null) {
  444. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length - 1] = newpoint2;
  445. var seg1 = {};
  446. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  447. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  448. var seg2 = {};
  449. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  450. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  451. var _seg1 = {};
  452. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border1;
  453. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border1;
  454. var _seg2 = {};
  455. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].border2;
  456. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 2].border2;
  457. join1 = this.layer.calculateLine.isjoin(seg1, _seg1);
  458. if (join1 == null) {
  459. join1 = this.layer.calculateLine.isjoin(seg2, _seg1);
  460. if (join1 != null) {
  461. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1;
  462. join2 = this.layer.calculateLine.isjoin(seg2, _seg2);
  463. if (join2 != null) {
  464. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2;
  465. }
  466. }
  467. }
  468. else {
  469. join2 = this.layer.calculateLine.isjoin(seg2, _seg1);
  470. if (BABYLON.Vector2.Distance(_seg1.point2, join1) < BABYLON.Vector2.Distance(_seg1.point2, join2)) {
  471. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join1;
  472. join2 = this.layer.calculateLine.isjoin(seg1, _seg2);
  473. if (join2 != null) {
  474. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join2;
  475. }
  476. }
  477. else {
  478. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder1 = join2;
  479. join1 = this.layer.calculateLine.isjoin(seg2, _seg2);
  480. if (join1 != null) {
  481. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length - 1].newborder2 = join1;
  482. }
  483. }
  484. }
  485. this.layer.control.refreshCanvas = true;
  486. }
  487. }
  488. };
  489. /*
  490. Build.prototype.adjustEndPoint= function(exceptid)
  491. {
  492. if(this.layer.vectors[exceptid].geometry.state==0)
  493. {
  494. return;
  495. }
  496. var point1=this.layer.vectors[exceptid].geometry.points[0];
  497. var point2=this.layer.vectors[exceptid].geometry.points[1];
  498. var point3=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-1];
  499. var point4=this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-2];
  500. var len=this.layer.data2d.wallIds.length;
  501. var line=this.layer.calculateLine.createLine(point1,point2);
  502. var lineend=this.layer.calculateLine.createLine(point3,point4);
  503. var newpoint1=null;
  504. var newpoint2=null;
  505. var join1=null;
  506. var join2=null;
  507. for(var i=0;i<len;++i)
  508. {
  509. var wallId=this.layer.data2d.wallIds[i];
  510. if(exceptid!=null&&typeof(exceptid!="undefined"))
  511. {
  512. if(wallId==exceptid)
  513. {
  514. continue;
  515. }
  516. }
  517. if(newpoint1==null)
  518. {
  519. var result1=this.layer.calculateElement.singleWallContain(point1,wallId);
  520. if(result1!=null)
  521. {
  522. var line1=this.layer.calculateLine.createLine(this.layer.vectors[result1.id].geometry.points[result1.index],this.layer.vectors[result1.id].geometry.points[result1.endindex]);
  523. newpoint1=this.layer.calculateLine.getIntersectionPoint(line,line1);
  524. if(newpoint1!=null)
  525. {
  526. this.layer.vectors[exceptid].geometry.points[0]=newpoint1;
  527. var seg1 = {};
  528. seg1.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border1;
  529. seg1.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border1;
  530. var seg2 ={};
  531. seg2.point1 = this.layer.vectors[result1.id].geometry.wallInfo[result1.index].border2;
  532. seg2.point2 = this.layer.vectors[result1.id].geometry.wallInfo[result1.endindex].border2;
  533. var _seg1 ={};
  534. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border1;
  535. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border1;
  536. var _seg2 ={};
  537. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[0].border2;
  538. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[1].border2;
  539. join1 = this.layer.calculateLine.isjoin(seg1,_seg1);
  540. if(join1==null)
  541. {
  542. join1 = this.layer.calculateLine.isjoin(seg2,_seg1);
  543. if(join1!=null)
  544. {
  545. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  546. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  547. if(join2!=null)
  548. {
  549. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  550. }
  551. }
  552. }
  553. else
  554. {
  555. join2 = this.layer.calculateLine.isjoin(seg2,_seg1);
  556. if(BABYLON.Vector2.Distance(_seg1.point2,join1)<BABYLON.Vector2.Distance(_seg1.point2,join2))
  557. {
  558. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join1;
  559. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  560. if(join2!=null)
  561. {
  562. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join2;
  563. }
  564. }
  565. else
  566. {
  567. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder1 =join2;
  568. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  569. if(join1!=null)
  570. {
  571. this.layer.vectors[exceptid].geometry.wallInfo[0].newborder2 =join1;
  572. }
  573. }
  574. }
  575. this.layer.control.refreshCanvas=true;
  576. }
  577. }
  578. }
  579. if(newpoint2==null)
  580. {
  581. var result2=this.layer.calculateElement.singleWallContain(point3,wallId);
  582. if(result2!=null)
  583. {
  584. var line2=this.layer.calculateLine.createLine(this.layer.vectors[result2.id].geometry.points[result2.index],this.layer.vectors[result2.id].geometry.points[result2.endindex]);
  585. newpoint2=this.layer.calculateLine.getIntersectionPoint(lineend,line2);
  586. if(newpoint2!=null)
  587. {
  588. this.layer.vectors[exceptid].geometry.points[this.layer.vectors[exceptid].geometry.points.length-1]=newpoint2;
  589. var seg1 = {};
  590. seg1.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border1;
  591. seg1.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border1;
  592. var seg2 ={};
  593. seg2.point1 = this.layer.vectors[result2.id].geometry.wallInfo[result2.index].border2;
  594. seg2.point2 = this.layer.vectors[result2.id].geometry.wallInfo[result2.endindex].border2;
  595. var _seg1 ={};
  596. _seg1.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].border1;
  597. _seg1.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-2].border1;
  598. var _seg2 ={};
  599. _seg2.point1 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].border2;
  600. _seg2.point2 = this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-2].border2;
  601. join1 = this.layer.calculateLine.isjoin(seg1,_seg1);
  602. if(join1==null)
  603. {
  604. join1 = this.layer.calculateLine.isjoin(seg2,_seg1);
  605. if(join1!=null)
  606. {
  607. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  608. join2 = this.layer.calculateLine.isjoin(seg2,_seg2);
  609. if(join2!=null)
  610. {
  611. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  612. }
  613. }
  614. }
  615. else
  616. {
  617. join2 = this.layer.calculateLine.isjoin(seg2,_seg1);
  618. if(BABYLON.Vector2.Distance(_seg1.point2,join1)<BABYLON.Vector2.Distance(_seg1.point2,join2))
  619. {
  620. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join1;
  621. join2 = this.layer.calculateLine.isjoin(seg1,_seg2);
  622. if(join2!=null)
  623. {
  624. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join2;
  625. }
  626. }
  627. else
  628. {
  629. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder1 = join2;
  630. join1 = this.layer.calculateLine.isjoin(seg2,_seg2);
  631. if(join1!=null)
  632. {
  633. this.layer.vectors[exceptid].geometry.wallInfo[this.layer.vectors[exceptid].geometry.points.length-1].newborder2 = join1;
  634. }
  635. }
  636. }
  637. this.layer.control.refreshCanvas=true;
  638. }
  639. }
  640. }
  641. if(newpoint1==null&&newpoint2==null)
  642. {
  643. break;
  644. }
  645. }
  646. };
  647. */
  648. Build.prototype.getRelaEndLines2 = function (wallid, type, index, endindex, point) {
  649. var lines = [];
  650. //墙角
  651. if (type == 0) {
  652. var len = this.layer.vectors[wallid].geometry.points.length;
  653. var index1 = index - 1;
  654. var index2 = index + 1;
  655. if (index1 < 0) {
  656. index1 = len - 2;
  657. }
  658. if (index2 >= len) {
  659. index2 = 0;
  660. }
  661. /*
  662. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1});
  663. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2});
  664. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  665. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  666. */
  667. lines.push({ index1: index1, index2: index, border: "border1", id: wallid });
  668. lines.push({ index1: index1, index2: index, border: "border2", id: wallid });
  669. lines.push({ index1: index2, index2: index, border: "border1", id: wallid });
  670. lines.push({ index1: index2, index2: index, border: "border2", id: wallid });
  671. }
  672. //墙面
  673. else if (type == 1) {
  674. lines = this.getEndLines(index, endindex, wallid);
  675. var line = this.layer.calculateLine.createLine(this.layer.vectors[wallid].geometry.points[index], this.layer.vectors[wallid].geometry.points[endindex]);
  676. var thick = this.layer.calculateLine.getDistancePointToLine(point, line);
  677. if (thick < this.layer.vectors[wallid].geometry.wallInfo[Math.min(index, endindex)].thick) {
  678. return lines;
  679. }
  680. else {
  681. var line1 = this.layer.calculateLine.createLine(lines[0].point1, lines[0].point2);
  682. var d1 = this.layer.calculateLine.getDistancePointToLine(point, line1);
  683. var line2 = this.layer.calculateLine.createLine(lines[1].point1, lines[1].point2);
  684. var d2 = this.layer.calculateLine.getDistancePointToLine(point, line2);
  685. if (d1 > d2) {
  686. lines.shift();
  687. }
  688. else {
  689. lines.pop();
  690. }
  691. }
  692. }
  693. return lines;
  694. }
  695. //当前墙的端点与别的墙相交的墙面
  696. Build.prototype.getRelaEndLines = function () {
  697. var lines = [];
  698. //墙角
  699. if (this.layer.currentState.selectWallSet.type == 0) {
  700. var index = this.layer.currentState.selectWallSet.index;
  701. var wallid = this.layer.currentState.selectWallSet.id;
  702. var len = this.layer.vectors[wallid].geometry.points.length;
  703. var index1 = index - 1;
  704. var index2 = index + 1;
  705. if (index1 < 0) {
  706. index1 = len - 2;
  707. }
  708. if (index2 >= len) {
  709. index2 = 0;
  710. }
  711. /*
  712. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border1});
  713. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index].border2});
  714. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border1 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  715. lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index].border2 ,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  716. */
  717. lines.push({ index1: index1, index2: index, border: "border1", id: wallid });
  718. lines.push({ index1: index1, index2: index, border: "border2", id: wallid });
  719. lines.push({ index1: index2, index2: index, border: "border1", id: wallid });
  720. lines.push({ index1: index2, index2: index, border: "border2", id: wallid });
  721. }
  722. //墙面
  723. else if (this.layer.currentState.selectWallSet.type == 1) {
  724. lines = this.getEndLines(this.layer.currentState.selectWallSet.index, this.layer.currentState.selectWallSet.endindex, this.layer.currentState.selectWallSet.id);
  725. }
  726. return lines;
  727. };
  728. Build.prototype.getEndLines = function (index1, index2, wallid) {
  729. var lines = [];
  730. //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border1,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border1});
  731. //lines.push({point1:this.layer.vectors[wallid].geometry.wallInfo[index1].border2,point2:this.layer.vectors[wallid].geometry.wallInfo[index2].border2});
  732. lines.push({ index1: index1, index2: index2, border: "border1", id: wallid });
  733. lines.push({ index1: index1, index2: index2, border: "border2", id: wallid });
  734. return lines;
  735. }
  736. Build.prototype.BuildingWall = function (point) {
  737. if (this.layer.currentState.startbuild == "wall") {
  738. this.layer.pan.f_buildingWall = true;
  739. this.layer.pan.f_buildingPartition = false;
  740. }
  741. else if (this.layer.currentState.startbuild == "partition") {
  742. this.layer.pan.f_buildingPartition = true;
  743. this.layer.pan.f_buildingWall = false;
  744. }
  745. //开始建
  746. if (this.buildwallId == null || this.temp_buildwallId == null) {
  747. //第一个点
  748. if (this.lastWallPoint == null) {
  749. this.lastWallPoint = this.adjustPoint(point);
  750. /*
  751. if(this.layer.currentState.selectWallSet!=null)
  752. {
  753. this.firstLines=this.getRelaEndLines();
  754. }
  755. */
  756. return;
  757. }
  758. }
  759. if (this.temp_buildwallId != null && this.buildwallState != 1) {
  760. this.saveBuildingWall();
  761. }
  762. //正在建
  763. if (this.buildwallState == 1) {
  764. var points = [];
  765. points.push(this.lastWallPoint);
  766. points.push(point);
  767. if (this.temp_buildwallId == null) {
  768. this.temp_buildwallId = this.addOpenWall(points, "imgTempWall", this.layer.parameter.selectcontext);
  769. this.layer.data2d.temp_wallId = this.temp_buildwallId;
  770. this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext;
  771. }
  772. else {
  773. this.layer.vectors[this.temp_buildwallId].geometry.points = points;
  774. this.layer.vectors[this.temp_buildwallId].geometry.contextIndex = this.layer.parameter.selectcontext;
  775. this.layer.control.refreshSelectCanvas = true;
  776. }
  777. }
  778. //正在建,鼠标点击后的操作
  779. else if (this.buildwallState == 2) {
  780. this.layer.deleteVector(this.temp_buildwallId);
  781. this.layer.data2d.temp_wallId = null;
  782. this.layer.control.refreshSelectCanvas = true;
  783. this.buildwallState = null;
  784. }
  785. //建好了
  786. else if (this.buildwallState == null) {
  787. this.f_buildingWall = false;
  788. this.f_buildingPartition = false;
  789. this.lastWallPoint = null;
  790. this.layer.currentState.startbuild = null;
  791. //this.firstLines=[];
  792. //this.endLines=[];
  793. return;
  794. }
  795. };
  796. //修完墙
  797. Build.prototype.finishWall = function () {
  798. this.buildwallState = null;
  799. this.layer.pan.f_buildingWall = false;
  800. this.layer.pan.f_buildingPartition = false;
  801. this.layer.currentState.startbuild = null;
  802. if (this.temp_buildwallId != null) {
  803. this.layer.deleteVector(this.temp_buildwallId);
  804. this.temp_buildwallId = null;
  805. this.layer.data2d.temp_wallId = null;
  806. }
  807. this.buildwallId = null;
  808. this.lastWallPoint = null;
  809. this.layer.currentState.currentWallId = null;
  810. };
  811. Build.prototype.addOneWallInfo = function () {
  812. var len = this.layer.vectors[this.buildwallId].geometry.wallInfo.length;
  813. this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].height = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].height;
  814. this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 1].thick = this.layer.vectors[this.buildwallId].geometry.wallInfo[len - 2].thick;
  815. this.layer.vectors[this.buildwallId].geometry.wallInfo.push({ height: 0, thick: 0 });
  816. };
  817. Build.prototype.saveBuildingWall = function () {
  818. if (this.buildwallId == null) {
  819. this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1];
  820. this.buildwallId = this.addOpenWall(this.layer.vectors[this.temp_buildwallId].geometry.points, "imgWall", this.layer.parameter.contextIndex);
  821. this.layer.data2d.wallIds.push(this.buildwallId);
  822. }
  823. else if (this.temp_buildwallId != null) {
  824. if (this.layer.currentState.startbuild == null) {
  825. if (this.layer.currentState.selectWallSet.type == 0) { //与墙的第一个点相交
  826. if (this.layer.currentState.selectWallSet.index == 0) {
  827. this.layer.vectors[this.buildwallId].geometry.state = 0;
  828. }
  829. //与墙的倒数第二个点相交
  830. else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) {
  831. this.layer.vectors[this.buildwallId].geometry.state = 1;
  832. }
  833. else {
  834. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  835. this.addOneWallInfo();
  836. }
  837. }
  838. //与墙的最后一堵墙相交
  839. else if (this.layer.currentState.selectWallSet.index == this.layer.vectors[this.buildwallId].geometry.points.length - 2) {
  840. this.layer.vectors[this.buildwallId].geometry.state = 1;
  841. }
  842. else {
  843. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  844. this.addOneWallInfo();
  845. }
  846. }
  847. else {
  848. this.lastWallPoint = this.layer.vectors[this.temp_buildwallId].geometry.points[1];
  849. this.layer.vectors[this.buildwallId].geometry.points.push(this.lastWallPoint);
  850. this.addOneWallInfo();
  851. }
  852. }
  853. this.layer.deleteVector(this.temp_buildwallId);
  854. this.temp_buildwallId = null;
  855. this.layer.data2d.temp_wallId = null;
  856. //this.firstLines=[];
  857. if (this.layer.currentState.startbuild == null) {
  858. this.lastWallPoint = null;
  859. this.buildwallId = null;
  860. this.layer.control.refreshSelectCanvas = true;
  861. this.layer.renderer.autoRedraw();
  862. }
  863. };
  864. //添加墙
  865. Build.prototype.addOpenWall = function (points, imgid, contextIndex) {
  866. var wall = new Wall(points, document.getElementById(imgid));
  867. wall.state = 1;
  868. if (this.layer.pan.f_buildingWall) {
  869. wall.wallType = 1;
  870. }
  871. else if (this.layer.pan.f_buildingPartition) {
  872. wall.wallType = 2;
  873. }
  874. var vector = new Vector(wall, wallStyle);
  875. /*
  876. if(this.firstLines.length>0)
  877. {
  878. vector.geometry.firstLines=[];
  879. for(var i=0;i<this.firstLines.length;++i)
  880. {
  881. vector.geometry.firstLines[i] = this.firstLines[i];
  882. }
  883. }
  884. if(this.endLines.length>0)
  885. {
  886. vector.geometry.endLines=[];
  887. for(var i=0;i<this.endLines.length;++i)
  888. {
  889. vector.geometry.endLines[i] = this.endLines[i];
  890. }
  891. }
  892. */
  893. vector.geometry.floor = this.layer.selectFloor;
  894. vector.geometry.contextIndex = contextIndex;
  895. this.layer.drawSingleVector(vector);
  896. return vector.id;
  897. };
  898. Build.prototype.createSymbol2 = function (type) {
  899. var symbol = null;
  900. if (type == "OpenDoor") {
  901. symbol = new Vector(new OpenDoor(), openStyle);
  902. }
  903. else if (type == "SimpleDoor") {
  904. symbol = new Vector(new SimpleDoor(), simpleStyle);
  905. }
  906. else if (type == "BiFoldDoor") {
  907. symbol = new Vector(new BiFoldDoor(), biFoldStyle);
  908. }
  909. else if (type == "SlidingDoor") {
  910. symbol = new Vector(new SlidingDoor(), biFoldStyle);
  911. }
  912. else if (type == "OpenWindow") {
  913. symbol = new Vector(new OpenWindow(), openStyle);
  914. }
  915. else if (type == "SingleCasement") {
  916. symbol = new Vector(new SingleCasement(), singleStyle);
  917. }
  918. else if (type == "DoubleCasement") {
  919. symbol = new Vector(new DoubleCasement(), doubleStyle);
  920. }
  921. else if (type == "SlidingWindow") {
  922. symbol = new Vector(new SlidingWindow(), slidingStyle);
  923. }
  924. else if (type == "WinderStair") {
  925. symbol = new Vector(new WinderStair(), winderStyle);
  926. }
  927. symbol.geometry.floor = this.layer.selectFloor;
  928. return symbol;
  929. };
  930. Build.prototype.createSymbol = function (id) {
  931. if (id == "menuitemdoors0") {
  932. this.tryAddSymbol = new Vector(new OpenDoor(), openStyle);
  933. }
  934. else if (id == "menuitemdoors1") {
  935. this.tryAddSymbol = new Vector(new SimpleDoor(), simpleStyle);
  936. }
  937. else if (id == "menuitemdoors2") {
  938. this.tryAddSymbol = new Vector(new BiFoldDoor(), biFoldStyle);
  939. }
  940. else if (id == "menuitemdoors3") {
  941. this.tryAddSymbol = new Vector(new SlidingDoor(), biFoldStyle);
  942. }
  943. else if (id == "menuitemwindows0") {
  944. this.tryAddSymbol = new Vector(new OpenWindow(), openStyle);
  945. }
  946. else if (id == "menuitemwindows1") {
  947. this.tryAddSymbol = new Vector(new SingleCasement(), singleStyle);
  948. }
  949. else if (id == "menuitemwindows2") {
  950. this.tryAddSymbol = new Vector(new DoubleCasement(), doubleStyle);
  951. }
  952. else if (id == "menuitemwindows3") {
  953. this.tryAddSymbol = new Vector(new SlidingWindow(), slidingStyle);
  954. }
  955. else if (id == "menuitemstairways0") {
  956. this.tryAddSymbol = new Vector(new WinderStair(), winderStyle);
  957. this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
  958. }
  959. else if (id == "menuitemstairways1") {
  960. this.tryAddSymbol = new Vector(new Spiral(), spiralStyle);
  961. this.layer.currentState.startbuild = this.tryAddSymbol.geometry.geoType;
  962. }
  963. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  964. };
  965. Build.prototype.BuildingSpiral = function (point) {
  966. var points = this.layer.calculateElement.GetSpiralpoints(point);
  967. this.tryAddSymbol.geometry.points = points;
  968. this.tryAddSymbol.geometry.point1 = { x: (point.x + this.layer.parameter.spiralR1), y: point.y };
  969. this.tryAddSymbol.geometry.point2 = { x: point.x, y: point.y + this.layer.parameter.spiralR1 };
  970. this.tryAddSymbol.geometry.point = point;
  971. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
  972. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  973. this.layer.drawSingleVector(this.tryAddSymbol);
  974. this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
  975. this.tryAddSymbol = null;
  976. };
  977. Build.prototype.BuildingWinderStair = function (point) {
  978. if (this.buildwallState == null) {
  979. if (this.tryAddSymbol.geometry.points.length == 0) {
  980. this.tryAddSymbol.geometry.points.push(point);
  981. this.buildwallState = 1;
  982. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.selectcontext;
  983. this.layer.drawSingleVector(this.tryAddSymbol);
  984. return;
  985. }
  986. else {
  987. this.layer.currentState.startbuild = null;
  988. this.tryAddSymbol.geometry.temp_points = [];
  989. this.tryAddSymbol.geometry.contextIndex = this.layer.parameter.contextIndex;
  990. this.tryAddSymbol.geometry.points.push(point);
  991. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
  992. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  993. this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
  994. this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
  995. this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
  996. this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
  997. this.tryAddSymbol.geometry.floor = this.layer.selectFloor;
  998. this.layer.data2d.stairIds.push(this.tryAddSymbol.id);
  999. this.layer.control.refreshSelectCanvas = true;
  1000. this.layer.control.refreshCanvas = true;
  1001. this.layer.renderer.autoRedraw();
  1002. this.tryAddSymbol = null;
  1003. return;
  1004. }
  1005. }
  1006. else if (this.buildwallState == 1) {
  1007. if (this.tryAddSymbol.geometry.lastpoint != null) {
  1008. this.tryAddSymbol.geometry.points.push(this.tryAddSymbol.geometry.lastpoint);
  1009. this.tryAddSymbol.geometry.lastpoint = null;
  1010. }
  1011. this.tryAddSymbol.geometry.temp_points = [];
  1012. for (var i = 0; i < this.tryAddSymbol.geometry.points.length; ++i) {
  1013. this.tryAddSymbol.geometry.temp_points.push(this.tryAddSymbol.geometry.points[i]);
  1014. }
  1015. this.tryAddSymbol.geometry.temp_points.push(point);
  1016. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.temp_points);
  1017. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  1018. this.tryAddSymbol.geometry.borderpoints.border1 = allpoints.border1;
  1019. this.tryAddSymbol.geometry.borderpoints.border2 = allpoints.border2;
  1020. this.tryAddSymbol.geometry.arrowpoints.arrows1 = allpoints.arrows1;
  1021. this.tryAddSymbol.geometry.arrowpoints.arrows2 = allpoints.arrows2;
  1022. this.layer.control.refreshSelectCanvas = true;
  1023. }
  1024. else if (this.buildwallState == 2) {
  1025. /*
  1026. this.tryAddSymbol.geometry.points.push(point);
  1027. this.tryAddSymbol.geometry.temp_points=[];
  1028. var allpoints = this.layer.calculateElement.getAllPointsFromStair(this.tryAddSymbol.geometry.points);
  1029. this.tryAddSymbol.geometry.linkedpoints = allpoints.vertical;
  1030. this.tryAddSymbol.geometry.borderpoints.border1=allpoints.border1;
  1031. this.tryAddSymbol.geometry.borderpoints.border2=allpoints.border2;
  1032. console.log("点击!");
  1033. */
  1034. this.tryAddSymbol.geometry.lastpoint = point;
  1035. this.tryAddSymbol.geometry.temp_points = [];
  1036. }
  1037. this.layer.renderer.autoRedraw();
  1038. };
  1039. /*
  1040. //添加symbol
  1041. Build.prototype.addbuildSymbol=function(wallid,startinidex,endindex,point)
  1042. {
  1043. if(wallid==null)
  1044. {
  1045. return;
  1046. }
  1047. var len=this.tryAddSymbol.getLen();
  1048. var point1,point2;
  1049. //不能是墙角
  1050. if(endindex!=null&&typeof(endindex)!=undefined)
  1051. {
  1052. point1=this.layer.vectors[wallid].geometry.points[startinidex];
  1053. point2=this.layer.vectors[wallid].geometry.points[endindex];
  1054. }
  1055. else if(this.tryAddSymbol.points.length>0)
  1056. {
  1057. point1=this.tryAddSymbol.points[0];
  1058. point2=this.tryAddSymbol.points[1];
  1059. }
  1060. //添加虚拟的symbol且在墙角
  1061. else
  1062. {
  1063. point1=this.layer.vectors[wallid].geometry.points[startinidex];
  1064. endindex=this.layer.calculateElement.getNextIndex(this.layer.vectors[wallid].geometry.points,startinidex);
  1065. point2=this.layer.vectors[wallid].geometry.points[endindex];
  1066. }
  1067. var line=this.layer.calculateLine.createLine(point1,point2);
  1068. var endpoint=this.layer.calculateLine.getDisPointsLine(line,point,len/2,len/2)
  1069. this.tryAddSymbol.wallid=wallid;
  1070. this.tryAddSymbol.startindex=startinidex;
  1071. this.tryAddSymbol.endindex=endindex;
  1072. this.tryAddSymbol.point1=endpoint.newpoint1;
  1073. this.tryAddSymbol.point2=endpoint.newpoint2;
  1074. this.tryAddSymbol.update(this.layer);
  1075. this.tryAddSymbol.select=true;
  1076. this.tryAddSymbol.draw(this.layer);
  1077. this.layer.pan.currentState.currentSymbolId=this.tryAddSymbol.id;
  1078. this.layer.pan.currentState.currentstartlinePointIndex=startinidex;
  1079. this.layer.pan.currentState.currentendlinePointIndex=endindex;
  1080. this.layer.select.f_selectWallLine=true;
  1081. this.layer.control.refreshCanvas=true;
  1082. this.layer.control.refreshSelectCanvas=true;
  1083. };
  1084. */