Menu.js 50 KB

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