Menu.js 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500
  1. function Menu(layer) {
  2. this.layer = layer;
  3. this.clickItem;
  4. this.state = false;
  5. this.productEdit = null;
  6. this.init();
  7. };
  8. Menu.prototype.init = function () {
  9. this.dragWindow();
  10. this.addWallMenuItem();
  11. this.addDoorsMenuItem();
  12. this.addWindowMenuItem();
  13. this.addStairwayMenuItem();
  14. this.addBedroomMenuItem();
  15. this.addOutsideMenuItem();
  16. this.addFloorMenuItem();
  17. this.addWallpaperMenuItem();
  18. this.addsoftDecorationMenuItem();
  19. //this.addMenuItemEvents();
  20. this.addMenuTabsEvent();
  21. //左上角的楼层按钮
  22. this.addfloorAddMenuItem();
  23. this.editProduct();
  24. var deletewall = document.getElementById("deleteWall");
  25. deletewall.addEventListener("click", Menu.prototype.deleteWall.bind(this));
  26. var changeWall = document.getElementById("changeWall");
  27. changeWall.addEventListener("click", Menu.prototype.changeWall.bind(this));
  28. };
  29. //使得弹出框能拖拽
  30. Menu.prototype.dragWindow = function () {
  31. ["editproducttitle", "addModelTitle", "addfloorTitle", "edit2DTitle"].forEach(function (id) {
  32. var header = document.getElementById(id);
  33. var control = {};
  34. control.dragging = false;
  35. control.lastX = 0;
  36. control.lastY = 0;
  37. var configWindow = header.parentElement;
  38. header.addEventListener("mousedown", function (e) {
  39. control.dragging = true;
  40. control.lastX = e.clientX;
  41. control.lastY = e.clientY;
  42. this.layer.control.draggingDialog = true;
  43. e.stopPropagation();
  44. }.bind(this));
  45. header.addEventListener("mouseup", function (e) {
  46. control.dragging = false;
  47. control.lastX = 0;
  48. control.lastY = 0;
  49. this.layer.control.draggingDialog = false;
  50. e.stopPropagation();
  51. }.bind(this));
  52. document.addEventListener("mousemove", function (e) {
  53. if (control.dragging) {
  54. var dx = e.clientX - control.lastX;
  55. var dy = e.clientY - control.lastY;
  56. var top = configWindow.style.top.replace("px", "");
  57. var left = configWindow.style.left.replace("px", "");
  58. top = parseInt(top);
  59. left = parseInt(left);
  60. top += dy;
  61. left += dx;
  62. configWindow.style.top = top + "px";
  63. configWindow.style.left = left + "px";
  64. control.lastX = e.clientX;
  65. control.lastY = e.clientY;
  66. }
  67. e.stopPropagation();
  68. }.bind(this));
  69. for (var i = 0; i < header.childNodes.length; ++i) {
  70. if (header.childNodes[i].className == "window-close") {
  71. header.childNodes[i].addEventListener("click", function () {
  72. configWindow.style.display = "none";
  73. });
  74. break;
  75. }
  76. }
  77. });
  78. ["edit2D1", "edit2D2"].forEach(function (id) {
  79. var range = document.getElementById(id);
  80. var value = null;
  81. if (id == "edit2D1") {
  82. value = document.getElementById("edit2D11");
  83. } else if (id == "edit2D2") {
  84. value = document.getElementById("edit2D22");
  85. } else {
  86. return;
  87. }
  88. range.addEventListener("input", function () {
  89. value.value = range.value;
  90. var id = this.layer.select.selectWall.wallid;
  91. var index = this.layer.select.selectWall.index;
  92. if (range.id == "edit2D1") {
  93. this.layer.vectors[id].geometry.wallInfo[index].thick = parseInt(range.value);
  94. this.layer.control.refreshCanvas = true;
  95. this.layer.renderer.autoRedraw();
  96. } else if (range.id == "edit2D2") {
  97. this.layer.vectors[id].geometry.wallInfo[index].height = parseInt(range.value);
  98. this.layer.control.refreshCanvas = true;
  99. this.layer.renderer.autoRedraw();
  100. }
  101. }.bind(this), false);
  102. });
  103. }
  104. Menu.prototype.addfloorAddMenuItem = function () {
  105. var button = document.getElementById("floorAdd");
  106. button.addEventListener("click", Menu.prototype.showDialog.bind(this));
  107. //开始时,自动添加一层
  108. var controlFloor = document.getElementById("wnp-floor-controller-node");
  109. var a = document.createElement("a");
  110. a.setAttribute('class', 'photonui-wnpfloorcontrollerbutton photonui-widget editable deletable selected');
  111. var span = document.createElement("span");
  112. var index = parseInt(button.rel);
  113. span.innerHTML = "+0.00米" + "&nbsp;&nbsp;&nbsp;&nbsp;" + index + "楼";
  114. a.appendChild(span);
  115. var div1 = document.createElement("div");
  116. div1.setAttribute('class', 'delete');
  117. div1.innerText = "x";
  118. //删除
  119. div1.addEventListener("click", Menu.prototype.deleteFloors.bind(this));
  120. a.appendChild(div1);
  121. var div2 = document.createElement("div");
  122. div2.setAttribute('class', 'settings');
  123. div2.style = "color: rgb(0, 255, 0);";
  124. div2.innerText = "i";
  125. a.appendChild(div2);
  126. a.rel = index;
  127. // 选择楼层
  128. a.addEventListener("click", Menu.prototype.seleteFloor.bind(this));
  129. controlFloor.insertBefore(a, button);
  130. var createbutton = document.getElementById("widget-createfloor");
  131. var cancelbutton = document.getElementById("widget-cancelfloor");
  132. createbutton.addEventListener("click", Menu.prototype.createFloor.bind(this));
  133. cancelbutton.addEventListener("click", Menu.prototype.cancelFloor.bind(this));
  134. //编辑弹出框的checkbox
  135. var check1 = document.getElementById("wnp-floor-controller_walls");
  136. var check2 = document.getElementById("wnp-floor-controller_overtures");
  137. var check3 = document.getElementById("wnp-floor-controller_stairways");
  138. check1.addEventListener("click", function (e) {
  139. if (e.currentTarget.children[0].checked) {
  140. e.currentTarget.children[0].checked = false;
  141. } else if (!e.currentTarget.children[0].checked) {
  142. e.currentTarget.children[0].checked = true;
  143. }
  144. }.bind(this));
  145. check2.addEventListener("click", function (e) {
  146. if (e.currentTarget.children[0].checked) {
  147. e.currentTarget.children[0].checked = false;
  148. } else if (!e.currentTarget.children[0].checked) {
  149. e.currentTarget.children[0].checked = true;
  150. }
  151. }.bind(this));
  152. check3.addEventListener("click", function (e) {
  153. if (e.currentTarget.children[0].checked) {
  154. e.currentTarget.children[0].checked = false;
  155. } else if (!e.currentTarget.children[0].checked) {
  156. e.currentTarget.children[0].checked = true;
  157. }
  158. }.bind(this));
  159. };
  160. //显示添加楼层的弹出框
  161. Menu.prototype.showDialog = function (e) {
  162. var newfloor = document.getElementById("editFloor");
  163. newfloor.style.display = "";
  164. document.getElementById("wnp-floor-controller_walls-input").checked = true;
  165. document.getElementById("wnp-floor-controller_overtures-input").checked = true;
  166. e.stopPropagation();
  167. };
  168. Menu.prototype.createFloor = function (e) {
  169. var but = document.getElementById("floorAdd");
  170. var index = parseInt(but.rel);
  171. ++index;
  172. but.rel = index;
  173. var height = this.layer.parameter.floorHeight * (index - 1);
  174. var controlFloor = document.getElementById("wnp-floor-controller-node");
  175. var a = document.createElement("a");
  176. a.rel = index;
  177. a.setAttribute('class', 'photonui-wnpfloorcontrollerbutton photonui-widget editable deletable selected');
  178. var span = document.createElement("span");
  179. span.innerHTML = "+" + height.toFixed(2) + "米&nbsp;&nbsp;&nbsp;&nbsp;" + index + "楼";
  180. a.appendChild(span);
  181. var div1 = document.createElement("div");
  182. div1.setAttribute('class', 'delete');
  183. div1.innerText = "x";
  184. //删除
  185. div1.addEventListener("click", Menu.prototype.deleteFloors.bind(this));
  186. a.appendChild(div1);
  187. var div2 = document.createElement("div");
  188. div2.setAttribute('class', 'settings');
  189. div2.style = "color: rgb(0, 255, 0);";
  190. div2.innerText = "i";
  191. a.appendChild(div2);
  192. // 选择楼层
  193. a.addEventListener("click", Menu.prototype.seleteFloor.bind(this));
  194. for (var i = 0; i < controlFloor.children.length - 1; ++i) {
  195. controlFloor.children[i].classList.remove("selected");
  196. }
  197. controlFloor.insertBefore(a, but);
  198. this.layer.selectFloor = index;
  199. this.copyFloor();
  200. this.layer.control.refreshCanvas = true;
  201. this.layer.renderer.autoRedraw();
  202. if (show3D) {
  203. my3DEngine.decorate3D.deleteRoomMeshes();
  204. GetWallPoints(layer);
  205. if (!one3d) {
  206. //initRoom3D();
  207. one3d = true;
  208. }
  209. my3DEngine.scene3D.render();
  210. }
  211. //编辑
  212. //div2.addEventListener("click",Menu.prototype.editFloor.bind(this));
  213. var newfloor = document.getElementById("editFloor");
  214. newfloor.style.display = "none";
  215. e.stopPropagation();
  216. };
  217. //从下一楼层拷贝过来
  218. //wnp-floor-controller_walls-input表示墙
  219. //wnp-floor-controller_overtures-input表示门,窗
  220. Menu.prototype.copyFloor = function () {
  221. var wallc = document.getElementById("wnp-floor-controller_walls-input");
  222. var doorwindowc = document.getElementById("wnp-floor-controller_overtures-input");
  223. if (wallc.checked) {
  224. for (var i = 0; i < this.layer.data2d.wallIds.length; ++i) {
  225. var id = this.layer.data2d.wallIds[i];
  226. if (this.layer.vectors[id].geometry.floor == (parseInt(this.layer.selectFloor) - 1)) {
  227. //var points = this.layer.vectors[id].geometry.points;
  228. var points = [];
  229. for (var k = 0; k < this.layer.vectors[id].geometry.points.length; ++k) {
  230. points[k] = {};
  231. points[k].x = this.layer.vectors[id].geometry.points[k].x;
  232. points[k].y = this.layer.vectors[id].geometry.points[k].y;
  233. }
  234. var wall = new Wall(points, document.getElementById("imgWall"));
  235. var vector = new Vector(wall, wallStyle);
  236. vector.geometry.floor = parseInt(this.layer.selectFloor);
  237. vector.geometry.state = this.layer.vectors[id].geometry.state;
  238. //vector.geometry.copyWallId = id;
  239. this.layer.drawSingleVector(vector);
  240. this.layer.data2d.wallIds.push(vector.id);
  241. if (doorwindowc.checked) {
  242. for (var j in this.layer.vectors[id].symbol2Ds) {
  243. var symbolid = this.layer.vectors[id].symbol2Ds[j].id;
  244. var symbolpoints = this.layer.vectors[symbolid].geometry.points;
  245. var symbol = this.layer.build.createSymbol2(this.layer.vectors[symbolid].geometry.geoType);
  246. if (symbol == null) {
  247. alert("149");
  248. } else {
  249. symbol.geometry.point1 = {};
  250. symbol.geometry.point1.x = this.layer.vectors[symbolid].geometry.point1.x;
  251. symbol.geometry.point1.y = this.layer.vectors[symbolid].geometry.point1.y;
  252. symbol.geometry.point2 = {};
  253. symbol.geometry.point2.x = this.layer.vectors[symbolid].geometry.point2.x;
  254. symbol.geometry.point2.y = this.layer.vectors[symbolid].geometry.point2.y;
  255. for (var i = 0; i < symbolpoints.length; ++i) {
  256. if (symbolpoints[i].x) {
  257. symbol.geometry.points[i] = {};
  258. symbol.geometry.points[i].x = symbolpoints[i].x;
  259. symbol.geometry.points[i].y = symbolpoints[i].y;
  260. } else {
  261. symbol.geometry.points[i] = symbolpoints[i];
  262. }
  263. }
  264. symbol.geometry.wallType = this.layer.vectors[symbolid].geometry.wallType;
  265. symbol.attributes.wallId = this.layer.vectors[symbolid].attributes.wallId;
  266. symbol.attributes.wallendindex = this.layer.vectors[symbolid].attributes.wallendindex;
  267. symbol.attributes.wallstartindex = this.layer.vectors[symbolid].attributes.wallstartindex;
  268. symbol.attributes.toward = this.layer.vectors[symbolid].attributes.toward;
  269. symbol.attributes.draw = this.layer.vectors[symbolid].attributes.draw;
  270. symbol.attributes.selectSymbolIds = [];
  271. this.layer.drawSingleVector(symbol);
  272. symbol.geometry.floor = parseInt(this.layer.selectFloor);
  273. vector.symbol2Ds[symbolid] = symbol;
  274. ++vector.symbol2dsCount;
  275. this.layer.data2d.symbol2DIds.push(symbol.id);
  276. }
  277. }
  278. }
  279. }
  280. }
  281. }
  282. };
  283. //选择楼层
  284. Menu.prototype.seleteFloor = function (e) {
  285. var controlFloor = document.getElementById("wnp-floor-controller-node");
  286. for (var i = 0; i < controlFloor.children.length - 1; ++i) {
  287. controlFloor.children[i].classList.remove("selected");
  288. }
  289. e.currentTarget.classList.add("selected");
  290. this.layer.selectFloor = e.currentTarget.rel;
  291. if (document.getElementById("mainMenuTitle").innerHTML == "绘图") {
  292. this.layer.control.refreshCanvas = true;
  293. this.layer.renderer.autoRedraw();
  294. } else {
  295. my3DEngine.decorate3D.showFloors(parseInt(this.layer.selectFloor));
  296. my3DEngine.decorate3D.hideFloors(parseInt(this.layer.selectFloor));
  297. if (document.getElementById("transparencyButton").children[0].children[0].src.indexOf("icon-opacity.png") > -1) {
  298. my3DEngine.decorate3D.transparentWall(0.05);
  299. } else {
  300. my3DEngine.decorate3D.transparentWall(1);
  301. }
  302. }
  303. e.stopPropagation();
  304. };
  305. Menu.prototype.cancelFloor = function (e) {
  306. var newfloor = document.getElementById("editFloor");
  307. newfloor.style.display = "none";
  308. e.stopPropagation();
  309. };
  310. //删除楼层
  311. //"floorAdd"的rel表示当前的楼层是多少
  312. Menu.prototype.deleteFloors = function (e) {
  313. if (window.confirm('你确定要删除楼层吗?')) {
  314. var but = document.getElementById("floorAdd");
  315. var index = parseInt(but.rel);
  316. --index;
  317. but.rel = index;
  318. var controlFloor = document.getElementById("wnp-floor-controller-node");
  319. var deletefloor = null;
  320. for (var i = 0; i < controlFloor.children.length - 1; ++i) {
  321. if (e.currentTarget.parentElement == controlFloor.children[i]) {
  322. deletefloor = i;
  323. controlFloor.removeChild(controlFloor.children[i]);
  324. --i;
  325. if (i != -1) {
  326. this.layer.selectFloor = i + 1;
  327. controlFloor.children[i].classList.add("selected");
  328. } else {
  329. this.layer.selectFloor = i;
  330. controlFloor.children[0].classList.add("selected");
  331. }
  332. continue;
  333. } else if (deletefloor) {
  334. var floor = controlFloor.children[i].rel;
  335. floor = parseInt(floor);
  336. --floor;
  337. controlFloor.children[i].rel = floor;
  338. var height = this.layer.parameter.floorHeight * (floor - 1);
  339. controlFloor.children[i].children[0].innerHTML = "+" + height.toFixed(2) + "&nbsp;&nbsp;&nbsp;&nbsp;" + floor + "楼";
  340. controlFloor.children[i].classList.remove("selected");
  341. }
  342. }
  343. }
  344. e.stopPropagation();
  345. };
  346. Menu.prototype.addWallMenuItem = function () {
  347. var id = this.layer.parameter.draw2DMenuItemsId[0];
  348. var name = this.layer.parameter.menuitem2DName[0];
  349. var menuitems = this.layer.parameter.menuitemwall;
  350. this.addSymbolMenuItem(id, name, menuitems, 0);
  351. };
  352. Menu.prototype.addDoorsMenuItem = function () {
  353. var id = this.layer.parameter.draw2DMenuItemsId[1];
  354. var name = this.layer.parameter.menuitem2DName[1];
  355. var menuitems = this.layer.parameter.menuitemdoor;
  356. this.addSymbolMenuItem(id, name, menuitems, 0);
  357. };
  358. Menu.prototype.addWindowMenuItem = function () {
  359. var id = this.layer.parameter.draw2DMenuItemsId[2];
  360. var name = this.layer.parameter.menuitem2DName[2];
  361. var menuitems = this.layer.parameter.menuitemwindow;
  362. this.addSymbolMenuItem(id, name, menuitems, 0);
  363. };
  364. Menu.prototype.addStairwayMenuItem = function () {
  365. var id = this.layer.parameter.draw2DMenuItemsId[3];
  366. var name = this.layer.parameter.menuitem2DName[3];
  367. var menuitems = this.layer.parameter.menuitemstairway;
  368. this.addSymbolMenuItem(id, name, menuitems, 0);
  369. };
  370. Menu.prototype.addBedroomMenuItem = function () {
  371. var id = this.layer.parameter.draw3DMenuItemsId[0];
  372. var name = this.layer.parameter.menuitem3DName[0];
  373. var menuitems = this.layer.parameter.menuitembedroom;
  374. this.addSymbolMenuItem(id, name, menuitems, 1);
  375. document.getElementById(this.layer.parameter.draw3DMenuItemsId[0]).style.display = "none";
  376. };
  377. Menu.prototype.addOutsideMenuItem = function () {
  378. var id = this.layer.parameter.drawDecorateMenuItemsId[0];
  379. var name = this.layer.parameter.menuitemDecorateName[0];
  380. this.addDecorateMenuItem(id, name);
  381. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[0]).style.display = "none";
  382. };
  383. Menu.prototype.addWallpaperMenuItem = function () {
  384. var id = this.layer.parameter.drawDecorateMenuItemsId[1];
  385. var name = this.layer.parameter.menuitemDecorateName[1];
  386. this.addDecorateMenuItem2(id, name);
  387. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[1]).style.display = "none";
  388. };
  389. Menu.prototype.addFloorMenuItem = function () {
  390. var id = this.layer.parameter.drawDecorateMenuItemsId[2];
  391. var name = this.layer.parameter.menuitemDecorateName[2];
  392. this.addDecorateMenuItem3(id, name);
  393. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[2]).style.display = "none";
  394. };
  395. Menu.prototype.addsoftDecorationMenuItem = function () {
  396. var id = this.layer.parameter.drawDecorateMenuItemsId[3];
  397. var name = this.layer.parameter.menuitemDecorateName[3];
  398. var menuitems = this.layer.parameter.menuitemsoftDecoration;
  399. this.addSymbolMenuItem(id, name, menuitems, 1);
  400. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[3]).style.display = "none";
  401. };
  402. //添加墙和地板的贴图
  403. Menu.prototype.addDecorateMenuItem3 = function (id, name) {
  404. var symbol = document.createElement("li");
  405. symbol.id = id;
  406. symbol.className = "menu-item menu-subitem";
  407. var span = document.createElement("span");
  408. span.className = "menu-title";
  409. var oText = document.createTextNode(name);
  410. span.appendChild(oText);
  411. symbol.appendChild(span);
  412. symbol.addEventListener("click", Menu.prototype.opened2.bind(this));
  413. var ul = this.addWallFloorTexture();
  414. symbol.appendChild(ul);
  415. var main = document.getElementById("mainMenuContentList");
  416. main.appendChild(symbol);
  417. };
  418. //添加装修墙纸
  419. Menu.prototype.addDecorateMenuItem2 = function (id, name) {
  420. var symbol = document.createElement("li");
  421. symbol.id = id;
  422. symbol.className = "menu-item menu-subitem";
  423. var span = document.createElement("span");
  424. span.className = "menu-title";
  425. var oText = document.createTextNode(name);
  426. span.appendChild(oText);
  427. symbol.appendChild(span);
  428. symbol.addEventListener("click", Menu.prototype.opened2.bind(this));
  429. var ul = this.addPaint();
  430. symbol.appendChild(ul);
  431. var main = document.getElementById("mainMenuContentList");
  432. main.appendChild(symbol);
  433. };
  434. //添加装修户外
  435. Menu.prototype.addDecorateMenuItem = function (id, name) {
  436. var symbol = document.createElement("li");
  437. symbol.id = id;
  438. symbol.className = "menu-item menu-subitem";
  439. var span = document.createElement("span");
  440. span.className = "menu-title";
  441. var oText = document.createTextNode(name);
  442. span.appendChild(oText);
  443. symbol.appendChild(span);
  444. symbol.addEventListener("click", Menu.prototype.opened2.bind(this));
  445. var ul = this.addGround();
  446. symbol.appendChild(ul);
  447. var main = document.getElementById("mainMenuContentList");
  448. main.appendChild(symbol);
  449. };
  450. //0表示二维,1表示三维
  451. Menu.prototype.addSymbolMenuItem = function (id, name, menuitems, flag) {
  452. var symbol = document.createElement("li");
  453. symbol.id = id;
  454. symbol.className = "menu-item menu-subitem";
  455. var span = document.createElement("span");
  456. span.className = "menu-title";
  457. var oText = document.createTextNode(name);
  458. span.appendChild(oText);
  459. symbol.appendChild(span);
  460. symbol.addEventListener("click", Menu.prototype.opened);
  461. var ul = document.createElement("ul");
  462. var len = menuitems.length;
  463. for (var i = 0; i < len; ++i) {
  464. var li = document.createElement("li");
  465. li.id = "menuitem" + id + i;
  466. li.className = "menu-item";
  467. var span = document.createElement("span");
  468. span.className = "menu-title";
  469. var oText = document.createTextNode(menuitems[i]);
  470. span.appendChild(oText);
  471. li.appendChild(span);
  472. if (flag == 0) {
  473. var type = this.Events[0][0];
  474. var listener = this.Events[0][1];
  475. li.addEventListener(type, listener.bind(this), true);
  476. } else if (flag == 1) {
  477. li.addEventListener("click", Menu.prototype.openProduct);
  478. } else if (flag == 2) {
  479. var type = this.Events[2][0];
  480. var listener = this.Events[2][1];
  481. li.addEventListener(type, listener.bind(this), true);
  482. }
  483. ul.appendChild(li);
  484. }
  485. symbol.appendChild(ul);
  486. var main = document.getElementById("mainMenuContentList");
  487. main.appendChild(symbol);
  488. };
  489. Menu.prototype.addMenuTabsEvent = function () {
  490. var tabs = document.getElementById("mainMenuTabs");
  491. var len = mainMenu.children.length;
  492. for (var i = 0; i < len; ++i) {
  493. var tab = tabs.children[i];
  494. var type = this.Events[1][0];
  495. var listener = this.Events[1][1];
  496. listener = CanvasSketch.bindAsEventListener(listener, this);
  497. tab.addEventListener(type, listener, true);
  498. }
  499. };
  500. Menu.prototype.addMenuItemEvents = function () {
  501. var mainMenu = document.getElementById("mainMenuContentList");
  502. //var len=mainMenu.children.length;
  503. var len = 3;
  504. for (var i = 0; i < len; ++i) {
  505. var item = mainMenu.children[i];
  506. item.addEventListener("click", Menu.prototype.opened);
  507. var ul = item.lastChild;
  508. for (var j = 0; j < ul.children.length; ++j) {
  509. var childitem = ul.children[j];
  510. var type = this.Events[0][0];
  511. var listener = this.Events[0][1];
  512. listener = CanvasSketch.bindAsEventListener(listener, this);
  513. childitem.addEventListener(type, listener, true);
  514. childitem.children[0].addEventListener(type, listener, true);
  515. }
  516. }
  517. };
  518. // 点击绘图各个菜单 改变当前绘画状态
  519. Menu.prototype.add2DSymbol = (function () {
  520. // 各大菜单策咯 index为第几个菜单,id为点击的菜单的标识
  521. var strategy = {
  522. menuitemrooms_walls: function (index) {
  523. this.tryAddSymbol = null
  524. this.layer.currentState.addSymbol = null;
  525. this.layer.currentState.startbuild = index ? "partition" : "wall";
  526. },
  527. menuitemdoors: function (index, id) {
  528. this.layer.currentState.startbuild = null
  529. this.layer.currentState.addSymbol = id;
  530. this.layer.build.createSymbol(id);
  531. console.log(this.layer.build)
  532. }
  533. }
  534. strategy.menuitemstairways = strategy.menuitemwindows = strategy.menuitemdoors;
  535. return function (e) {
  536. var target = e.currentTarget
  537. var result = /\d$/.exec(target.id)
  538. var instructions = result && target.id.substr(0, result.index)
  539. if (strategy[instructions]) {
  540. strategy[instructions].call(this, Number(result[0]), result.input)
  541. e.stopPropagation()
  542. }
  543. }
  544. })()
  545. Menu.prototype.addWallFloorTexture = function (e) {
  546. var ul_floor = document.createElement("ul");
  547. ul_floor.className = "layout-table-60";
  548. for (var i = 0; i < this.layer.parameter.floorTypeLength; ++i) {
  549. var li_floor = document.createElement("li");
  550. li_floor.id = "floor" + i;
  551. li_floor.className = "menu-item";
  552. var span = document.createElement("span");
  553. span.className = "menu-icon";
  554. var img = document.createElement("img");
  555. img.src = this.layer.parameter.floorSrc_Pre + i + ".jpg";
  556. img.id = "txt_img" + i;
  557. span.appendChild(img);
  558. li_floor.appendChild(span);
  559. if (i == 0) {
  560. li_floor.classList.add("selected");
  561. ul_floor.lang = i;
  562. }
  563. ul_floor.appendChild(li_floor);
  564. }
  565. ul_floor.addEventListener("click", function (e) {
  566. if (e.target.parentNode.className == "menu-icon") {
  567. var img = document.getElementById(e.target.id);
  568. my3DEngine.decorate3D.floors.floorImg = img.src;
  569. my3DEngine.paint.beginPaint = true;
  570. var txtindex = img.id.replace("txt_img", "");
  571. ul_floor.children[ul_floor.lang].classList.remove("selected");
  572. ul_floor.children[parseInt(txtindex)].classList.add("selected");
  573. ul_floor.lang = parseInt(txtindex);
  574. document.getElementById("container3d").style.cursor = "url('images/brush.ico'),auto";
  575. }
  576. });
  577. return ul_floor;
  578. };
  579. Menu.prototype.addPaint = function (e) {
  580. var ul = document.createElement("ul");
  581. ul.className = "layout-table-26";
  582. for (var i = 0; i < this.layer.parameter.paint.length; ++i) {
  583. var li = document.createElement("li");
  584. li.id = "paintitem" + i;
  585. li.className = "menu-item";
  586. var span = document.createElement("span");
  587. span.className = "menu-icon";
  588. span.style.backgroundColor = this.layer.parameter.paint[i];
  589. if (i == 0) {
  590. li.classList.add("selected");
  591. ul.lang = i;
  592. }
  593. li.appendChild(span);
  594. ul.appendChild(li);
  595. }
  596. ul.addEventListener("click", function (e) {
  597. if (e.target.className == "menu-icon") {
  598. var parentid = e.target.parentNode.id;
  599. document.getElementById(parentid).classList.add("selected");
  600. my3DEngine.paint.beginPaint = true;
  601. my3DEngine.paint.value = document.getElementById(parentid).children[0].style.backgroundColor;
  602. var color = my3DEngine.paint.value.replace("rgb(", "").replace(")", "").split(",");
  603. my3DEngine.paint.value = {};
  604. my3DEngine.paint.value.r = color[0].trim() / 255;
  605. my3DEngine.paint.value.g = color[1].trim() / 255;
  606. my3DEngine.paint.value.b = color[2].trim() / 255;
  607. var selectid = "paintitem" + ul.lang;
  608. document.getElementById(selectid).classList.remove("selected");
  609. ul.lang = parentid.replace("paintitem", "");
  610. document.getElementById("container3d").style.cursor = "url('images/brush.ico'),auto";
  611. }
  612. });
  613. return ul;
  614. };
  615. Menu.prototype.addGround = function (e) {
  616. var ul = document.createElement("ul");
  617. ul.className = "layout-list";
  618. var li = document.createElement("li");
  619. li.id = "ground";
  620. li.className = "menu-item menu-subitem";
  621. var span = document.createElement("span");
  622. span.className = "menu-title";
  623. span.innerText = "地面";
  624. li.appendChild(span);
  625. ul.appendChild(li);
  626. var ul_ground = document.createElement("ul");
  627. ul_ground.className = "layout-table-60";
  628. for (var i = 0; i < this.layer.parameter.groundTypeLength; ++i) {
  629. var li_ground = document.createElement("li");
  630. li_ground.id = "ground" + i;
  631. li_ground.className = "menu-item";
  632. var span = document.createElement("span");
  633. span.className = "menu-icon";
  634. var img = document.createElement("img");
  635. img.src = this.layer.parameter.groundSrc_Pre + i + ".jpg";
  636. img.id = "grd_img" + i;
  637. span.appendChild(img);
  638. li_ground.appendChild(span);
  639. if (i == 0) {
  640. li_ground.classList.add("selected");
  641. ul_ground.lang = i;
  642. }
  643. ul_ground.appendChild(li_ground);
  644. }
  645. li.appendChild(ul_ground);
  646. ul_ground.addEventListener("click", function (e) {
  647. if (e.target.parentNode.className == "menu-icon") {
  648. var img = document.getElementById(e.target.id);
  649. //my3DEngine.groundTexture=img.src;
  650. var grdindex = img.id.replace("grd_img", "");
  651. ul_ground.children[ul_ground.lang].classList.remove("selected");
  652. ul_ground.children[parseInt(grdindex)].classList.add("selected");
  653. ul_ground.lang = parseInt(grdindex);
  654. my3DEngine.decorate3D.refreshGround(img.src);
  655. }
  656. });
  657. var li2 = document.createElement("li");
  658. li2.id = "sky";
  659. li2.className = "menu-item menu-subitem";
  660. var span2 = document.createElement("span");
  661. span2.className = "menu-title";
  662. span2.innerText = "天空";
  663. li2.appendChild(span2);
  664. ul.appendChild(li2);
  665. var ul_sky = document.createElement("ul");
  666. ul_sky.className = "layout-table-60";
  667. for (var i = 0; i < this.layer.parameter.skyTypeLength; ++i) {
  668. var li_sky = document.createElement("li");
  669. li_sky.id = "sky" + i;
  670. li_sky.className = "menu-item";
  671. var span = document.createElement("span");
  672. span.className = "menu-icon";
  673. var img = document.createElement("img");
  674. img.src = this.layer.parameter.skySrc_Pre + i + ".jpg";
  675. img.id = "sky_img" + i;
  676. span.appendChild(img);
  677. li_sky.appendChild(span);
  678. if (i == 0) {
  679. li_sky.classList.add("selected");
  680. ul_sky.lang = i;
  681. }
  682. ul_sky.appendChild(li_sky);
  683. }
  684. li2.appendChild(ul_sky);
  685. ul_sky.addEventListener("click", function (e) {
  686. if (e.target.parentNode.className == "menu-icon") {
  687. var img = document.getElementById(e.target.id);
  688. var skyindex = img.id.replace("sky_img", "");
  689. ul_sky.children[ul_sky.lang].classList.remove("selected");
  690. ul_sky.children[parseInt(skyindex)].classList.add("selected");
  691. ul_sky.lang = parseInt(skyindex);
  692. my3DEngine.decorate3D.refreshSkybox(img.src.replace(".jpg", ""));
  693. }
  694. });
  695. return ul;
  696. };
  697. Menu.prototype.opened = function (e) {
  698. if (e.currentTarget.className == "menu-item menu-subitem") {
  699. e.currentTarget.className = "menu-item menu-subitem selected opened";
  700. } else if (e.currentTarget.className == "menu-item menu-subitem selected opened") {
  701. e.currentTarget.className = "menu-item menu-subitem";
  702. }
  703. };
  704. Menu.prototype.opened2 = function (e) {
  705. if (e.currentTarget.className == "menu-item menu-subitem") {
  706. e.currentTarget.className = "menu-item menu-subitem selected opened";
  707. } else if (e.currentTarget.className == "menu-item menu-subitem selected opened") {
  708. if (e.target.id == this.layer.parameter.drawDecorateMenuItemsId[0]) {
  709. e.currentTarget.className = "menu-item menu-subitem";
  710. } else if (e.target.id == this.layer.parameter.drawDecorateMenuItemsId[1]) {
  711. e.currentTarget.className = "menu-item menu-subitem";
  712. } else if (e.target.id == this.layer.parameter.drawDecorateMenuItemsId[2]) {
  713. e.currentTarget.className = "menu-item menu-subitem";
  714. }
  715. }
  716. };
  717. Menu.prototype.show2D = function () {
  718. var container2d = document.getElementById("container2d");
  719. container2d.style.display = "block";
  720. container2d.style.cursor = "default";
  721. container3d.style.display = "none";
  722. document.getElementById("mark").style.marginTop = this.layer.scale.top;
  723. document.getElementById("mainMenuTitle").innerHTML = "绘图";
  724. for (var i = 0; i < this.layer.parameter.draw2DMenuItemsId.length; ++i) {
  725. document.getElementById(this.layer.parameter.draw2DMenuItemsId[i]).style.display = "block";
  726. }
  727. for (var i = 0; i < this.layer.parameter.draw3DMenuItemsId.length; ++i) {
  728. document.getElementById(this.layer.parameter.draw3DMenuItemsId[i]).style.display = "none";
  729. }
  730. for (var i = 0; i < this.layer.parameter.drawDecorateMenuItemsId.length; ++i) {
  731. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[i]).style.display = "none";
  732. }
  733. show3D = false;
  734. document.getElementById("lock-icon").classList.add("hidden");
  735. document.getElementById("transparencyButton").classList.add("hidden");
  736. };
  737. Menu.prototype.addSelectTab = function (e) {
  738. var tabs = document.getElementById("mainMenuTabs");
  739. var len = mainMenu.children.length;
  740. for (var i = 0; i < len; ++i) {
  741. var tab = tabs.children[i];
  742. tab.classList.remove("selected");
  743. }
  744. e.currentTarget.classList.add("selected");
  745. var container2d = document.getElementById("container2d");
  746. var container3d = document.getElementById("container3d");
  747. if (e.currentTarget.id == "draw2D") {
  748. this.show2D();
  749. } else if (e.currentTarget.id == "furnishing3D") {
  750. container3d.style.display = "block";
  751. container3d.style.cursor = "default";
  752. container2d.style.display = "none";
  753. document.getElementById("mark").style.marginTop = this.layer.scale.top3d;
  754. document.getElementById("mainMenuTitle").innerHTML = "家具";
  755. for (var i = 0; i < this.layer.parameter.draw2DMenuItemsId.length; ++i) {
  756. document.getElementById(this.layer.parameter.draw2DMenuItemsId[i]).style.display = "none";
  757. }
  758. for (var i = 0; i < this.layer.parameter.drawDecorateMenuItemsId.length; ++i) {
  759. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[i]).style.display = "none";
  760. }
  761. for (var i = 0; i < this.layer.parameter.draw3DMenuItemsId.length; ++i) {
  762. document.getElementById(this.layer.parameter.draw3DMenuItemsId[i]).style.display = "block";
  763. }
  764. Show3DBase();
  765. document.getElementById("lock-icon").classList.remove("hidden");
  766. document.getElementById("transparencyButton").classList.remove("hidden");
  767. } else if (e.currentTarget.id == "decorate3D") {
  768. if (container2d.style.display == "block") {
  769. container3d.style.display = "block";
  770. container3d.style.cursor = "default";
  771. container2d.style.display = "none";
  772. document.getElementById("mark").style.marginTop = this.layer.scale.top3d;
  773. for (var i = 0; i < this.layer.parameter.draw2DMenuItemsId.length; ++i) {
  774. document.getElementById(this.layer.parameter.draw2DMenuItemsId[i]).style.display = "none";
  775. }
  776. Show3DBase();
  777. } else {
  778. for (var i = 0; i < this.layer.parameter.draw3DMenuItemsId.length; ++i) {
  779. document.getElementById(this.layer.parameter.draw3DMenuItemsId[i]).style.display = "none";
  780. }
  781. }
  782. for (var i = 0; i < this.layer.parameter.drawDecorateMenuItemsId.length; ++i) {
  783. document.getElementById(this.layer.parameter.drawDecorateMenuItemsId[i]).style.display = "block";
  784. }
  785. document.getElementById("mainMenuTitle").innerHTML = "装修";
  786. document.getElementById("lock-icon").classList.remove("hidden");
  787. document.getElementById("transparencyButton").classList.remove("hidden");
  788. }
  789. };
  790. Menu.prototype.closeProduct = function (e) {
  791. var product = document.getElementById("productList");
  792. product.style.display = "none";
  793. };
  794. Menu.prototype.editProduct = function (e) {
  795. var product_size = document.getElementById("editsize");
  796. var product_ptrot = document.getElementById("editptrot");
  797. var tabSize = document.getElementById("tabSize");
  798. var tabPtRot = document.getElementById("tabPtRot");
  799. product_size.addEventListener("click", function () {
  800. if (product_size.className == "") {
  801. product_size.className = "active";
  802. tabSize.classList.add("active");
  803. product_ptrot.classList.remove("active");
  804. tabPtRot.classList.remove("active");
  805. }
  806. });
  807. product_ptrot.addEventListener("click", function () {
  808. if (product_ptrot.className == "") {
  809. product_ptrot.className = "active";
  810. tabPtRot.classList.add("active");
  811. product_size.classList.remove("active");
  812. tabSize.classList.remove("active");
  813. }
  814. });
  815. /*
  816. var header=document.getElementById("editproducttitle");
  817. if(this.productEdit==null)
  818. {
  819. this.productEdit={};
  820. this.productEdit.dragging=false;
  821. this.productEdit.lastX=null;
  822. this.productEdit.lastY=null;
  823. }
  824. //var dragging=false;
  825. //var lastX,lastY;
  826. var configuratorProduct=document.getElementById("configuratorWindow");
  827. header.addEventListener("mousedown", function(e){
  828. this.productEdit.dragging=true;
  829. this.productEdit.lastX = e.clientX;
  830. this.productEdit.lastY = e.clientY;
  831. e.stopPropagation();
  832. }.bind(this));
  833. header.addEventListener("mouseup", function(e){
  834. this.productEdit.dragging=false;
  835. e.stopPropagation();
  836. }.bind(this));
  837. document.addEventListener("mousemove", function(e){
  838. if(this.productEdit.dragging)
  839. {
  840. var dx = e.clientX - this.productEdit.lastX;
  841. var dy = e.clientY - this.productEdit.lastY;
  842. var top=configuratorProduct.style.top.replace("px","");
  843. var left=configuratorProduct.style.left.replace("px","");
  844. top=parseInt(top);
  845. left=parseInt(left);
  846. top+=dy;
  847. left+=dx;
  848. configuratorProduct.style.top=top+"px";
  849. configuratorProduct.style.left=left+"px";
  850. this.productEdit.lastX = e.clientX;
  851. this.productEdit.lastY = e.clientY;
  852. }
  853. e.stopPropagation();
  854. }.bind(this));
  855. header.childNodes[0].addEventListener("click",function(){
  856. configuratorProduct.style.display="none";
  857. });
  858. */
  859. var anglevalue = document.getElementById("angleValue");
  860. var range = document.getElementById("rangeAngle");
  861. range.addEventListener("input", function () {
  862. anglevalue.value = range.value;
  863. var diffangle = range.value / 180 * Math.PI - my3DEngine.action3D.currentModelMesh.rotation.y;
  864. my3DEngine.action3D.currentModelMesh.rotate(BABYLON.Axis.Y, diffangle, BABYLON.Space.LOCAL);
  865. my3DEngine.action3D.currentModelMesh.rotation.y += diffangle;
  866. my3DEngine.action3D.currentModelMesh.angle = my3DEngine.action3D.currentModelMesh.rotation.y;
  867. for (var i = 0; i < my3DEngine.collectMeshes.arrowMeshes.length; ++i) {
  868. if (my3DEngine.collectMeshes.arrowMeshes[i] != null && typeof (my3DEngine.collectMeshes.arrowMeshes[i]) != "undefined") {
  869. my3DEngine.collectMeshes.arrowMeshes[i].dispose();
  870. my3DEngine.collectMeshes.arrowMeshes[i] = null;
  871. my3DEngine.collectMeshes.arrowMeshes.splice(i, 1);
  872. --i;
  873. }
  874. }
  875. }, false);
  876. var removeMesh = document.getElementById("removeMesh");
  877. removeMesh.addEventListener("click", function () {
  878. if (my3DEngine.action3D.currentModelMesh != null) {
  879. for (var i = 0; i < my3DEngine.collectMeshes.collidableMeshes.length; ++i) {
  880. if (my3DEngine.collectMeshes.collidableMeshes[i].name == my3DEngine.action3D.currentModelMesh.name) {
  881. my3DEngine.collectMeshes.collidableMeshes.splice(i, 1);
  882. --i;
  883. break;
  884. }
  885. }
  886. my3DEngine.action3D.currentModelMesh.dispose();
  887. my3DEngine.action3D.currentModelMesh = null;
  888. }
  889. if (my3DEngine.modelLoader.currentPhotoMesh != null) {
  890. my3DEngine.modelLoader.currentPhotoMesh.dispose();
  891. my3DEngine.modelLoader.currentPhotoMesh = null;
  892. }
  893. if (my3DEngine.collectMeshes.arrowMeshes.length > 0) {
  894. for (var i = 0; i < my3DEngine.collectMeshes.arrowMeshes.length; ++i) {
  895. my3DEngine.collectMeshes.arrowMeshes[i].dispose();
  896. my3DEngine.collectMeshes.arrowMeshes[i] = null;
  897. }
  898. }
  899. configuratorProduct.style.display = "none";
  900. my3DEngine.action3D.editProduct = false;
  901. });
  902. var editMesh = document.getElementById("editMesh");
  903. editMesh.addEventListener("click", function () {
  904. //var calculateLine=new CalculateLine();
  905. var calculateLine = layer.calculateLine;
  906. var length = document.getElementById("params-length").childNodes[1].childNodes[0].value;
  907. if (!calculateLine.checkRate(length)) {
  908. alert("输入的长度有误!");
  909. return;
  910. }
  911. length = parseFloat(length);
  912. var lastlength = document.getElementById("params-length").childNodes[1].childNodes[0].alt;
  913. var height = document.getElementById("params-height").childNodes[1].childNodes[0].value;
  914. if (!calculateLine.checkRate(height)) {
  915. alert("输入的高度有误!");
  916. return;
  917. }
  918. height = parseFloat(height);
  919. var lastheight = document.getElementById("params-height").childNodes[1].childNodes[0].alt;
  920. if (my3DEngine.action3D.currentModelMesh != null && my3DEngine.action3D.currentModelMesh.name != "photo") {
  921. var width = document.getElementById("params-width").childNodes[1].childNodes[0].value;
  922. if (!calculateLine.checkRate(width)) {
  923. alert("输入的宽度有误!");
  924. return;
  925. }
  926. width = parseFloat(width);
  927. var lastwidth = document.getElementById("params-width").childNodes[1].childNodes[0].alt;
  928. var positionX = document.getElementById("position-x").childNodes[1].childNodes[0].value;
  929. var positionY = document.getElementById("position-y").childNodes[1].childNodes[0].value;
  930. var positionZ = document.getElementById("position-z").childNodes[1].childNodes[0].value;
  931. if (!calculateLine.checkRate2(positionX)) {
  932. alert("输入的位置X有误!");
  933. return;
  934. }
  935. if (!calculateLine.checkRate2(positionY)) {
  936. alert("输入的位置Y有误!");
  937. return;
  938. }
  939. if (!calculateLine.checkRate2(positionZ)) {
  940. alert("输入的位置Z有误!");
  941. return;
  942. }
  943. var mesh = my3DEngine.action3D.currentModelMesh;
  944. mesh.position.x = parseFloat(positionX);
  945. mesh.position.y = parseFloat(positionY);
  946. mesh.position.z = parseFloat(positionZ);
  947. var newscal = new BABYLON.Vector3(length / lastlength * mesh.scaling.x.toFixed(2), height / lastheight * mesh.scaling.y.toFixed(2), width / lastwidth * mesh.scaling.z.toFixed(2));
  948. if (width != lastwidth) {
  949. mesh.scaling.z = newscal.z;
  950. }
  951. if (height != lastheight) {
  952. mesh.scaling.y = newscal.y;
  953. }
  954. if (length != lastlength) {
  955. mesh.scaling.x = newscal.x;
  956. }
  957. if (my3DEngine.collectMeshes.arrowMeshes.length > 0) {
  958. for (var i = 0; i < my3DEngine.collectMeshes.arrowMeshes.length; ++i) {
  959. my3DEngine.collectMeshes.arrowMeshes[i].dispose();
  960. my3DEngine.collectMeshes.arrowMeshes[i] = null;
  961. }
  962. }
  963. mesh.computeWorldMatrix(true);
  964. mesh.refreshBoundingInfo();
  965. my3DEngine.refreshSelectMesh(mesh);
  966. } else if (my3DEngine.modelLoader.currentPhotoMesh != null) {
  967. var mesh = my3DEngine.modelLoader.currentPhotoMesh;
  968. var newscal = new BABYLON.Vector2(length / lastlength * mesh.scaling.x.toFixed(2), height / lastheight * mesh.scaling.y.toFixed(2));
  969. if (length != lastlength) {
  970. mesh.scaling.x = newscal.x;
  971. mesh.length = length;
  972. }
  973. if (height != lastheight) {
  974. mesh.scaling.y = newscal.y;
  975. mesh.height = height;
  976. }
  977. }
  978. configuratorProduct.style.display = "none";
  979. my3DEngine.action3D.editProduct = false;
  980. });
  981. };
  982. Menu.prototype.openProduct = function (e) {
  983. var product = document.getElementById("productList");
  984. product.style.display = "block";
  985. var productItems = document.getElementById("productItems");
  986. while (productItems.hasChildNodes()) //当div下还存在子节点时 循环继续
  987. {
  988. productItems.removeChild(productItems.firstChild);
  989. }
  990. var load = document.createElement("div");
  991. load.id = "loadproduct";
  992. load.innerText = "加载中。。。";
  993. productItems.appendChild(load);
  994. var productCount = 0;
  995. var productDivs = [];
  996. var addProductItem = function (id, text, type) {
  997. var div = document.createElement("div");
  998. div.className = "product-item";
  999. div.id = "div" + id;
  1000. div.addEventListener("click", function () {
  1001. var div = document.getElementById(this.id);
  1002. if (div != null) {
  1003. div.children[0].className = "selected show";
  1004. }
  1005. });
  1006. var span1 = document.createElement("span");
  1007. span1.className = "selected";
  1008. var oText = document.createTextNode("Added");
  1009. span1.appendChild(oText);
  1010. var span2 = document.createElement("span");
  1011. span2.className = "product-item-image";
  1012. var img = document.createElement("img");
  1013. img.src = "images/product/" + id + ".jpg";
  1014. img.id = "product" + id;
  1015. if (type == 1) {
  1016. img.addEventListener("click", showPhoFrame);
  1017. } else if (type == 2) {
  1018. img.addEventListener("click", showPicture);
  1019. } else {
  1020. img.addEventListener("click", showProduct3D);
  1021. }
  1022. span2.appendChild(img);
  1023. var span3 = document.createElement("span");
  1024. span3.className = "product-item-description";
  1025. //span3.rel="wnp.engine3D.addProgrammable_"+id;
  1026. var oText2 = document.createTextNode(text);
  1027. span3.appendChild(oText2);
  1028. div.appendChild(span1);
  1029. div.appendChild(span2);
  1030. div.appendChild(span3);
  1031. --productCount;
  1032. productDivs.push(div);
  1033. if (productCount == 0) {
  1034. for (var i = 0; i < productDivs.length; ++i) {
  1035. productItems.appendChild(productDivs[i]);
  1036. }
  1037. productItems.removeChild(productItems.firstChild);
  1038. }
  1039. //return div;
  1040. }
  1041. if (e.target.innerHTML.indexOf(">床</span>") > 0) {
  1042. productCount = 4;
  1043. addProductItem("c1", "床1");
  1044. addProductItem("c2", "床2");
  1045. addProductItem("c3", "床3");
  1046. addProductItem("c4", "床4");
  1047. } else if (e.target.innerHTML.indexOf(">沙发</span>") > 0) {
  1048. productCount = 12;
  1049. addProductItem("s1", "沙发1");
  1050. addProductItem("d", "沙发2");
  1051. addProductItem("s3", "沙发3");
  1052. addProductItem("s4", "沙发4");
  1053. addProductItem("s5", "沙发5");
  1054. addProductItem("s6", "沙发6");
  1055. addProductItem("s7", "沙发7");
  1056. addProductItem("s8", "沙发8");
  1057. addProductItem("s9", "沙发9");
  1058. addProductItem("s10", "沙发10");
  1059. addProductItem("s11", "沙发11");
  1060. addProductItem("s12", "沙发12");
  1061. } else if (e.target.innerHTML.indexOf(">椅子</span>") > 0) {
  1062. productCount = 10;
  1063. addProductItem("y1", "椅子1");
  1064. addProductItem("y2", "椅子2");
  1065. addProductItem("y3", "椅子3");
  1066. addProductItem("y4", "椅子4");
  1067. addProductItem("y5", "椅子5");
  1068. addProductItem("y6", "椅子6");
  1069. addProductItem("y7", "椅子7");
  1070. addProductItem("y8", "椅子8");
  1071. addProductItem("y9", "椅子9");
  1072. addProductItem("y10", "椅子10");
  1073. } else if (e.target.innerHTML.indexOf(">柜子</span>") > 0) {
  1074. productCount = 24;
  1075. addProductItem("g1", "柜子1");
  1076. addProductItem("g2", "柜子2");
  1077. addProductItem("g3", "柜子3");
  1078. addProductItem("g4", "柜子4");
  1079. addProductItem("g5", "柜子5");
  1080. addProductItem("g6", "柜子6");
  1081. addProductItem("g7", "柜子7");
  1082. addProductItem("g8", "柜子8");
  1083. addProductItem("g9", "柜子9");
  1084. addProductItem("g10", "柜子10");
  1085. addProductItem("g11", "柜子11");
  1086. addProductItem("g12", "柜子12");
  1087. addProductItem("g13", "柜子13");
  1088. addProductItem("g14", "柜子14");
  1089. addProductItem("g15", "柜子15");
  1090. addProductItem("g16", "柜子16");
  1091. //addProductItem("g17","柜子17");
  1092. addProductItem("g18", "柜子18");
  1093. addProductItem("g19", "柜子19");
  1094. addProductItem("g20", "柜子20");
  1095. addProductItem("g21", "柜子21");
  1096. addProductItem("g22", "柜子22");
  1097. addProductItem("g23", "柜子23");
  1098. addProductItem("g24", "柜子24");
  1099. addProductItem("g25", "柜子25");
  1100. } else if (e.target.innerHTML.indexOf(">桌子</span>") > 0) {
  1101. productCount = 6;
  1102. addProductItem("z1", "桌子1");
  1103. addProductItem("z2", "桌子2");
  1104. addProductItem("z3", "桌子3");
  1105. addProductItem("z4", "桌子4");
  1106. addProductItem("z5", "桌子5");
  1107. addProductItem("gui", "桌子6");
  1108. /*
  1109. addProductItem("d1","桌子6");
  1110. addProductItem("d2","桌子7");
  1111. addProductItem("d3","桌子8");
  1112. addProductItem("w1","桌子9");
  1113. addProductItem("w2","桌子10");
  1114. addProductItem("w3","桌子11");
  1115. addProductItem("test","桌子12");
  1116. addProductItem("test1","桌子13");
  1117. addProductItem("test2","桌子14");
  1118. */
  1119. } else if (e.target.innerHTML.indexOf(">古董</span>") > 0) {
  1120. productCount = 17;
  1121. addProductItem("11", "古董1");
  1122. addProductItem("12", "古董2");
  1123. addProductItem("13", "古董3");
  1124. addProductItem("15", "古董4");
  1125. addProductItem("17", "古董5");
  1126. addProductItem("21", "古董6");
  1127. addProductItem("37", "古董7");
  1128. addProductItem("44", "古董8");
  1129. addProductItem("45", "古董9");
  1130. addProductItem("52", "古董11");
  1131. addProductItem("54", "古董12");
  1132. addProductItem("64", "古董13");
  1133. addProductItem("65", "古董14");
  1134. addProductItem("66", "古董15");
  1135. addProductItem("67", "古董16");
  1136. addProductItem("84", "古董17");
  1137. addProductItem("86", "古董18");
  1138. } else if (e.target.innerHTML.indexOf(">相框</span>") > 0) {
  1139. //productCount=11;
  1140. productCount = 1;
  1141. addProductItem("h2_11", "相框1", 1);
  1142. /*
  1143. addProductItem("h2_2","相框2",1);
  1144. addProductItem("h2_3","相框3",1);
  1145. addProductItem("h3_1","相框4",1);
  1146. addProductItem("h3_2","相框5",1);
  1147. addProductItem("h3_3","相框6",1);
  1148. addProductItem("h3_4","相框7",1);
  1149. addProductItem("h3_5","相框8",1);
  1150. addProductItem("h4_1","相框9",1);
  1151. addProductItem("h4_2","相框10",1);
  1152. */
  1153. }
  1154. };
  1155. Menu.prototype.deleteWall = function (e) {
  1156. var wallid = this.layer.select.selectWall.wallid;
  1157. var index = this.layer.select.selectWall.index;
  1158. var state = this.layer.vectors[wallid].geometry.state;
  1159. var vector = null;
  1160. //0表示闭合
  1161. if (state == 0) {
  1162. this.layer.vectors[wallid].geometry.state = 1;
  1163. //处理wallInfo
  1164. if (index != this.layer.vectors[wallid].geometry.wallInfo.length - 1) {
  1165. var wallInfo = [];
  1166. var points = [];
  1167. var mapping = {};
  1168. for (var i = 0; i < this.layer.vectors[wallid].geometry.wallInfo.length; ++i) {
  1169. mapping[i] = index + 1;
  1170. wallInfo[i] = this.layer.vectors[wallid].geometry.wallInfo[index + 1];
  1171. points[i] = this.layer.vectors[wallid].geometry.points[index + 1];
  1172. ++index;
  1173. if (index == this.layer.vectors[wallid].geometry.wallInfo.length - 1) {
  1174. index = -1;
  1175. }
  1176. }
  1177. //删除symbols
  1178. for (var key in this.layer.vectors[wallid].symbol2Ds) {
  1179. var symbol2d = this.layer.vectors[id].symbol2Ds[key];
  1180. if (symbol2d.attributes.wallstartindex == index) {
  1181. this.layer.deleteSymbol(symbol2d.id, symbol2d.attributes.wallId);
  1182. } else {
  1183. symbol2d.wallstartindex = mapping[symbol2d.wallstartindex];
  1184. symbol2d.wallendindex = mapping[symbol2d.wallendindex];
  1185. }
  1186. }
  1187. this.layer.vectors[wallid].geometry.wallInfo = wallInfo;
  1188. this.layer.vectors[wallid].geometry.points = points;
  1189. }
  1190. //删除symbols
  1191. else {
  1192. for (var key in this.layer.vectors[wallid].symbol2Ds) {
  1193. var symbol2d = this.layer.vectors[id].symbol2Ds[key];
  1194. if (symbol2d.attributes.wallstartindex == index) {
  1195. this.layer.deleteSymbol(symbol2d.id, symbol2d.attributes.wallId);
  1196. }
  1197. }
  1198. }
  1199. //修改border以及wallInfo
  1200. var len = this.layer.vectors[wallid].geometry.wallInfo.length;
  1201. this.layer.vectors[wallid].geometry.wallInfo[len - 1].thick = 0;
  1202. this.layer.vectors[wallid].geometry.wallInfo[len - 1].height = 0;
  1203. this.layer.vectors[wallid].geometry.wallInfo[len - 1].measuredistance = 0;
  1204. }
  1205. //1表示不闭合
  1206. else {
  1207. //删除墙
  1208. if (this.layer.vectors[wallid].geometry.points.length == 2) {
  1209. this.layer.deleteVector(wallid);
  1210. }
  1211. //删除最后一个点
  1212. else if (index == this.layer.vectors[wallid].geometry.wallInfo.length - 2) {
  1213. this.layer.vectors[wallid].geometry.points.pop();
  1214. this.layer.vectors[wallid].geometry.wallInfo.pop();
  1215. //修改border以及wallInfo
  1216. this.layer.vectors[wallid].geometry.wallInfo[index].thick = 0;
  1217. this.layer.vectors[wallid].geometry.wallInfo[index].height = 0;
  1218. this.layer.vectors[wallid].geometry.wallInfo[index].measuredistance = 0;
  1219. }
  1220. //分成两堵墙
  1221. else {
  1222. var points = [];
  1223. var mapping = {};
  1224. //var wallInfo=[];
  1225. //修改border以及wallInfo
  1226. this.layer.vectors[wallid].geometry.wallInfo[index].thick = 0;
  1227. this.layer.vectors[wallid].geometry.wallInfo[index].height = 0;
  1228. this.layer.vectors[wallid].geometry.wallInfo[index].measuredistance = 0;
  1229. //array.splice(start,delCount);//从start的位置开始向后删除delCount个元素
  1230. for (var i = index + 1; i < this.layer.vectors[wallid].geometry.wallInfo.length; ++i) {
  1231. mapping[i] = points.length;
  1232. points.push(this.layer.vectors[wallid].geometry.points[i]);
  1233. //wallInfo.push(this.layer.vectors[wallid].geometry.wallInfo[i]);
  1234. }
  1235. this.layer.vectors[wallid].geometry.wallInfo.splice(index + 1, points.length);
  1236. this.layer.vectors[wallid].geometry.points.splice(index + 1, points.length);
  1237. //新建墙
  1238. var wall = new Wall(points, document.getElementById("imgWall"));
  1239. var vector = new Vector(wall, wallStyle);
  1240. vector.geometry.state = 1;
  1241. vector.geometry.wallInfo[points.length - 1].thick = 0;
  1242. vector.geometry.wallInfo[points.length - 1].height = 0;
  1243. vector.geometry.wallInfo[points.length - 1].measuredistance = 0;
  1244. vector.geometry.floor = this.layer.selectFloor;
  1245. vector.geometry.contextIndex = this.layer.vectors[wallid].geometry.contextIndex;
  1246. //处理symbols
  1247. for (var key in this.layer.vectors[wallid].symbol2Ds) {
  1248. var symbol2d = this.layer.vectors[id].symbol2Ds[key];
  1249. if (symbol2d.attributes.wallstartindex == index) {
  1250. this.layer.deleteSymbol(symbol2d.id, symbol2d.attributes.wallId);
  1251. } else if (symbol2d.attributes.wallstartindex > index) {
  1252. symbol2d.wallstartindex = mapping[symbol2d.wallstartindex];
  1253. symbol2d.wallendindex = mapping[symbol2d.wallendindex];
  1254. }
  1255. }
  1256. }
  1257. }
  1258. //更新
  1259. this.layer.control.refreshCanvas = true;
  1260. this.layer.renderer.autoRedraw();
  1261. if (vector != null) {
  1262. this.layer.data2d.wallIds.push(vector.id);
  1263. this.layer.drawSingleVector(vector);
  1264. }
  1265. document.getElementById('configuratorWindow2').style.display = "none";
  1266. e.stopPropagation();
  1267. };
  1268. Menu.prototype.showWallDialog = function () {
  1269. document.getElementById('configuratorWindow2').style.display = "";
  1270. };
  1271. Menu.prototype.changeWall = function (e) {
  1272. var wallid = this.layer.select.selectWall.wallid;
  1273. var index = this.layer.select.selectWall.index;
  1274. var thick = document.getElementById("edit2D1").value;
  1275. var height = document.getElementById("edit2D2").value;
  1276. this.layer.vectors[wallid].geometry.wallInfo[index].height = parseInt(height);
  1277. this.layer.vectors[wallid].geometry.wallInfo[index].thick = parseInt(thick);
  1278. this.layer.control.refreshCanvas = true;
  1279. this.layer.renderer.autoRedraw();
  1280. document.getElementById('configuratorWindow2').style.display = "none";
  1281. e.stopPropagation();
  1282. };
  1283. Menu.prototype.initEdit2D = function (wallid, index) {
  1284. var height = this.layer.vectors[wallid].geometry.wallInfo[index].height;
  1285. var thick = this.layer.vectors[wallid].geometry.wallInfo[index].thick;
  1286. var measuredistance = this.layer.vectors[wallid].geometry.wallInfo[index].measuredistance;
  1287. document.getElementById("edit2D1").value = thick;
  1288. document.getElementById("edit2D11").value = thick;
  1289. document.getElementById("edit2D2").value = height;
  1290. document.getElementById("edit2D22").value = height;
  1291. this.layer.select.selectWall.wallid = wallid;
  1292. this.layer.select.selectWall.index = index;
  1293. };
  1294. Menu.prototype.Events = [
  1295. ["click", Menu.prototype.add2DSymbol],
  1296. ["click", Menu.prototype.addSelectTab],
  1297. ["click", Menu.prototype.addGround]
  1298. ];