mx3d 2024.5.28 → 2024.6.2-8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +8 -8
  2. package/docs/README.md +24 -0
  3. package/docs/_sidebar.md +29 -0
  4. package/docs/cabinet/24_back.jpg +0 -0
  5. package/docs/cabinet/24_font.jpg +0 -0
  6. package/docs/cabinet/43_back.jpg +0 -0
  7. package/docs/cabinet/43_font.jpg +0 -0
  8. package/docs/cabinet/cabinet.md +250 -0
  9. package/docs/camera.md +109 -0
  10. package/docs/css/dark.css +979 -0
  11. package/docs/css/local.google.fonts.css +295 -0
  12. package/docs/css/vue.css +1025 -0
  13. package/docs/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2 +0 -0
  14. package/docs/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2 +0 -0
  15. package/docs/fonts/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2 +0 -0
  16. package/docs/gui/2D.md +153 -0
  17. package/docs/gui/3D.md +154 -0
  18. package/docs/gui/bg.png +0 -0
  19. package/docs/heatMap/heatMap.md +290 -0
  20. package/docs/index.html +90 -0
  21. package/docs/js/bootstrap/bootstrap-theme.min.css +5 -0
  22. package/docs/js/bootstrap/bootstrap.min.css +5 -0
  23. package/docs/js/bootstrap/bootstrap.min.js +1 -0
  24. package/docs/js/bootstrap/jquery.min.js +1 -0
  25. package/docs/js/docsify@4.min.js +1 -0
  26. package/docs/js/search.min.js +1 -0
  27. package/docs/models/capacity.md +88 -0
  28. package/docs/models/effect.md +73 -0
  29. package/docs/models/event.md +100 -0
  30. package/docs/models/line.md +97 -0
  31. package/docs/models/model.md +164 -0
  32. package/docs/models/modelmgr.md +79 -0
  33. package/docs/project/projectmgr.md +64 -0
  34. package/docs/releases.md +128 -0
  35. package/docs/started/environment.md +103 -0
  36. package/docs/started/quickstart.md +112 -0
  37. package/index.d.ts +1109 -23
  38. package/mx3d.min.js +1 -1
  39. package/mx3d.seat.min.js +1 -1
  40. package/package.json +1 -1
  41. package/components/AlarmFlashing.d.ts +0 -12
  42. package/components/App.d.ts +0 -39
  43. package/components/Builder.d.ts +0 -73
  44. package/components/Capacity.d.ts +0 -11
  45. package/components/Environment.d.ts +0 -31
  46. package/components/HeatMap.d.ts +0 -14
  47. package/components/Icon.d.ts +0 -33
  48. package/components/IconFromMesh.d.ts +0 -29
  49. package/components/Line.d.ts +0 -14
  50. package/components/LineFromMesh.d.ts +0 -13
  51. package/components/StatusType.d.ts +0 -5
  52. package/components/UI.d.ts +0 -10
  53. package/earths/TileLoader.d.ts +0 -6
  54. package/effects/Cloud.d.ts +0 -42
  55. package/effects/Effect.d.ts +0 -13
  56. package/effects/IEffect.d.ts +0 -4
  57. package/effects/Rain.d.ts +0 -34
  58. package/effects/Thunder.d.ts +0 -31
  59. package/events/DefaultEvent.d.ts +0 -14
  60. package/events/EventType.d.ts +0 -9
  61. package/events/FPSCameraEvent.d.ts +0 -18
  62. package/events/IEvent.d.ts +0 -7
  63. package/hub/HubService.d.ts +0 -5
  64. package/lights/Directional.d.ts +0 -8
  65. package/lights/Hemispheric.d.ts +0 -7
  66. package/lights/ILightObject.d.ts +0 -11
  67. package/lights/LightObject.d.ts +0 -16
  68. package/lights/LightType.d.ts +0 -8
  69. package/lights/Point.d.ts +0 -8
  70. package/lights/Spot.d.ts +0 -11
  71. package/mapboxgl/BabylonLayer.d.ts +0 -0
  72. package/mapboxgl/Earth.d.ts +0 -0
  73. package/mapboxgl/Parse3dtile.d.ts +0 -0
  74. package/models/BaseModel.d.ts +0 -15
  75. package/models/BuildingObject.d.ts +0 -7
  76. package/models/CabinetObject.d.ts +0 -13
  77. package/models/CampusObject.d.ts +0 -8
  78. package/models/ConduitObject.d.ts +0 -17
  79. package/models/CornerObject.d.ts +0 -45
  80. package/models/DefaultObject.d.ts +0 -61
  81. package/models/DoorObject.d.ts +0 -7
  82. package/models/FloorObject.d.ts +0 -12
  83. package/models/IBase.d.ts +0 -23
  84. package/models/IObject.d.ts +0 -15
  85. package/models/IRegion.d.ts +0 -49
  86. package/models/LeakWaterObject.d.ts +0 -12
  87. package/models/ObjectType.d.ts +0 -17
  88. package/models/OptimizedWallObject.d.ts +0 -7
  89. package/models/Project.d.ts +0 -30
  90. package/models/RackModel.d.ts +0 -12
  91. package/models/RackObject.d.ts +0 -61
  92. package/models/StoreyObject.d.ts +0 -10
  93. package/models/UI3DTextObject.d.ts +0 -14
  94. package/models/VirtualBoxObject.d.ts +0 -13
  95. package/models/WallObject.d.ts +0 -12
  96. package/models/WindowObject.d.ts +0 -7
  97. package/mx3d.kernel.min.js +0 -1
  98. package/runtime/index.d.ts +0 -52
  99. package/tools/ArrayEx.d.ts +0 -3
  100. package/tools/BaseNode.d.ts +0 -5
  101. package/tools/CameraController.d.ts +0 -26
  102. package/tools/Dictionary.d.ts +0 -13
  103. package/tools/GUID.d.ts +0 -3
  104. package/tools/RES.d.ts +0 -3
  105. package/tools/Resources.d.ts +0 -26
  106. package/tools/Sight.d.ts +0 -15
  107. package/tools/ToolTips.d.ts +0 -14
  108. package/tools/Tools.d.ts +0 -21
  109. package/tools/axios.d.ts +0 -2
  110. /package/{earths/3dTile.d.ts → docs/.nojekyll} +0 -0
@@ -0,0 +1 @@
1
+ !function(){var e={},n="docsify.search.expires",t="docsify.search.index";function a(e){var n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};return String(e).replace(/[&<>"']/g,(function(e){return n[e]}))}function i(e){return e.text||"table"!==e.type||(e.cells.unshift(e.header),e.text=e.cells.map((function(e){return e.join(" | ")})).join(" |\n ")),e.text}function r(e){return e.text||"list"!==e.type||(e.text=e.raw),e.text}function o(e,n,t,o){void 0===n&&(n="");n=window.marked.lexer(n);var s,c=window.Docsify.slugify,d={},l="";return n.forEach((function(n,p){if("heading"===n.type&&n.depth<=o){var h=function(e){void 0===e&&(e="");var n={};return{str:e=e&&e.replace(/^('|")/,"").replace(/('|")$/,"").replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g,(function(e,t,a){return-1===t.indexOf(":")?(n[t]=a&&a.replace(/&quot;/g,"")||!0,""):e})).trim(),config:n}}(n.text),f=h.str;h=h.config;s=h.id?t.toURL(e,{id:c(h.id)}):t.toURL(e,{id:c(a(n.text))}),f&&(l=f.replace(/<!-- {docsify-ignore} -->/,"").replace(/{docsify-ignore}/,"").replace(/<!-- {docsify-ignore-all} -->/,"").replace(/{docsify-ignore-all}/,"").trim()),d[s]={slug:s,title:l,body:""}}else{if(0===p&&(s=t.toURL(e),d[s]={slug:s,title:"/"!==e?e.slice(1):"Home Page",body:n.text||""}),!s)return;d[s]?d[s].body?(n.text=i(n),n.text=r(n),d[s].body+="\n"+(n.text||"")):(n.text=i(n),n.text=r(n),d[s].body=d[s].body?d[s].body+n.text:n.text):d[s]={slug:s,title:"",body:""}}})),c.clear(),d}function s(e){return e&&e.normalize?e.normalize("NFD").replace(/[\u0300-\u036f]/g,""):e}function c(a,i){var r,s,c,d,l="auto"===a.paths,p=l?(r=i.router,s=[],Docsify.dom.findAll(".sidebar-nav a:not(.section-link):not([data-nosearch])").forEach((function(e){var n=e.href;e=e.getAttribute("href");(n=r.parse(n).path)&&-1===s.indexOf(n)&&!Docsify.util.isAbsolutePath(e)&&s.push(n)})),s):a.paths,h="";p.length&&l&&a.pathNamespaces?(c=p[0],Array.isArray(a.pathNamespaces)?h=a.pathNamespaces.filter((function(e){return c.slice(0,e.length)===e}))[0]||h:a.pathNamespaces instanceof RegExp&&(f=c.match(a.pathNamespaces))&&(h=f[0]),d=-1===p.indexOf(h+"/"),f=-1===p.indexOf(h+"/README"),d&&f&&p.unshift(h+"/")):-1===p.indexOf("/")&&-1===p.indexOf("/README")&&p.unshift("/");var f,u=((f=a.namespace)?n+"/"+f:n)+h,m=((f=a.namespace)?t+"/"+f:t)+h;h=localStorage.getItem(u)<Date.now();if(e=JSON.parse(localStorage.getItem(m)),h)e={};else if(!l)return;var g=p.length,y=0;p.forEach((function(n){return e[n]?y++:void Docsify.get(i.router.getFile(n),!1,i.config.requestHeaders).then((function(t){var r,s;e[n]=o(n,t,i.router,a.depth),g===++y&&(r=a.maxAge,s=u,t=m,localStorage.setItem(s,Date.now()+r),localStorage.setItem(t,JSON.stringify(e)))}))}))}var d,l="";function p(n){var t=Docsify.dom.find("div.search"),i=Docsify.dom.find(t,".results-panel"),r=Docsify.dom.find(t,".clear-button"),o=Docsify.dom.find(".sidebar-nav");t=Docsify.dom.find(".app-name");if(!n)return i.classList.remove("show"),r.classList.remove("show"),i.innerHTML="",void(d.hideOtherSidebarContent&&(o&&o.classList.remove("hide"),t&&t.classList.remove("hide")));n=function(n){var t=[],i=[];Object.keys(e).forEach((function(n){i=i.concat(Object.keys(e[n]).map((function(t){return e[n][t]})))}));var r=(n=n.trim()).split(/[\s\-,\\/]+/);1!==r.length&&(r=[].concat(n,r));for(var o=0;o<i.length;o++)!function(e){e=i[e];var n=0,o="",c="",d="",l=e.title&&e.title.trim(),p=e.body&&e.body.trim();e=e.slug||"";l&&(r.forEach((function(e){var t,i=new RegExp(a(s(e)).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&"),"gi"),r=-1,h=-1;c=l?a(s(l)):l,d=p?a(s(p)):p,r=l?c.search(i):-1,h=p?d.search(i):-1,(0<=r||0<=h)&&(n+=0<=r?3:0<=h?2:0,h<0&&(h=0),r=(r=0)==(t=h<11?0:h-10)?70:h+e.length+60,p&&r>p.length&&(r=p.length),i="..."+d.substring(t,r).replace(i,(function(e){return'<em class="search-keyword">'+e+"</em>"}))+"...",o+=i)})),0<n&&(e={title:c,content:p?o:"",url:e,score:n},t.push(e)))}(o);return t.sort((function(e,n){return n.score-e.score}))}(n);var c="";n.forEach((function(e){c+='<div class="matching-post">\n<a href="'+e.url+'">\n<h2>'+e.title+"</h2>\n<p>"+e.content+"</p>\n</a>\n</div>"})),i.classList.add("show"),r.classList.add("show"),i.innerHTML=c||'<p class="empty">'+l+"</p>",d.hideOtherSidebarContent&&(o&&o.classList.add("hide"),t&&t.classList.add("hide"))}function h(e){d=e}var f={placeholder:"Type to search",noData:"No Results!",paths:"auto",depth:2,maxAge:864e5,hideOtherSidebarContent:!1,namespace:void 0,pathNamespaces:void 0};$docsify.plugins=[].concat((function(e,n){var t=Docsify.util,a=n.config.search||f;Array.isArray(a)?f.paths=a:"object"==typeof a&&(f.paths=Array.isArray(a.paths)?a.paths:"auto",f.maxAge=(t.isPrimitive(a.maxAge)?a:f).maxAge,f.placeholder=a.placeholder||f.placeholder,f.noData=a.noData||f.noData,f.depth=a.depth||f.depth,f.hideOtherSidebarContent=a.hideOtherSidebarContent||f.hideOtherSidebarContent,f.namespace=a.namespace||f.namespace,f.pathNamespaces=a.pathNamespaces||f.pathNamespaces);var i="auto"===f.paths;e.mounted((function(e){(function(e,n){var t,a,i=n.router.parse().query.s;h(e),Docsify.dom.style("\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .input-wrap {\n display: flex;\n align-items: center;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 0 7px;\n line-height: 36px;\n font-size: 14px;\n border: 1px solid transparent;\n}\n\n.search input:focus {\n box-shadow: 0 0 5px var(--theme-color, #42b983);\n border: 1px solid var(--theme-color, #42b983);\n}\n\n.search input::-webkit-search-decoration,\n.search input::-webkit-search-cancel-button,\n.search input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.search .clear-button {\n cursor: pointer;\n width: 36px;\n text-align: right;\n display: none;\n}\n\n.search .clear-button.show {\n display: block;\n}\n\n.search .clear-button svg {\n transform: scale(.5);\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}\n\n.app-name.hide, .sidebar-nav.hide {\n display: none;\n}"),function(e){void 0===e&&(e="");var n='<div class="input-wrap">\n <input type="search" value="'+e+'" aria-label="Search text" />\n <div class="clear-button">\n <svg width="26" height="24">\n <circle cx="12" cy="12" r="11" fill="#ccc" />\n <path stroke="white" stroke-width="2" d="M8.25,8.25,15.75,15.75" />\n <path stroke="white" stroke-width="2"d="M8.25,15.75,15.75,8.25" />\n </svg>\n </div>\n </div>\n <div class="results-panel"></div>\n </div>';e=Docsify.dom.create("div",n),n=Docsify.dom.find("aside"),Docsify.dom.toggleClass(e,"search"),Docsify.dom.before(n,e)}(i),n=Docsify.dom.find("div.search"),a=Docsify.dom.find(n,"input"),e=Docsify.dom.find(n,".input-wrap"),Docsify.dom.on(n,"click",(function(e){return-1===["A","H2","P","EM"].indexOf(e.target.tagName)&&e.stopPropagation()})),Docsify.dom.on(a,"input",(function(e){clearTimeout(t),t=setTimeout((function(n){return p(e.target.value.trim())}),100)})),Docsify.dom.on(e,"click",(function(e){"INPUT"!==e.target.tagName&&(a.value="",p())})),i&&setTimeout((function(e){return p(i)}),500)})(f,n),i||c(f,n)})),e.doneEach((function(e){(function(e,n){var t,a,i,r,o;h(e),t=e.placeholder,a=n.route.path,(r=Docsify.dom.getNode('.search input[type="search"]'))&&("string"==typeof t?r.placeholder=t:(i=Object.keys(t).filter((function(e){return-1<a.indexOf(e)}))[0],r.placeholder=t[i])),e=e.noData,o=n.route.path,l="string"==typeof e?e:e[Object.keys(e).filter((function(e){return-1<o.indexOf(e)}))[0]]})(f,n),i&&c(f,n)}))}),$docsify.plugins)}();
@@ -0,0 +1,88 @@
1
+ ## 创建容量效果
2
+
3
+ ```javascript
4
+ /// <summary>
5
+ /// 创建容量效果
6
+ /// </summary>
7
+ /// <param name="anchor">挂载的物体(非空)</param>
8
+ /// <param name="RATIO">容量占比;0-1(非空)></param>
9
+ /// <param name="_text">显示的文字(可空)</param>
10
+ /// <param name="_fontSize">字体的大小(可空),默认200px</param>
11
+ var map= MX3D.Builder.createCapacity(obj: IObject, RATIO: number, _text: string, _fontSize: string = "200px")
12
+ ```
13
+
14
+ ## 示例
15
+
16
+ ### 代码
17
+
18
+ ```javascript
19
+ //创建的容量
20
+ var maps=[];
21
+ //创建
22
+ //获取当前界面机柜
23
+ var _objs = app.project.findObjectsByCustomType('Cabinet',{ isCurrent: false, isEnabled: true });
24
+ for (let i = 0; i < _objs.length; i++) {
25
+ //将机柜设为透明
26
+ _objs[i].setTransparent();
27
+ let value=Math.random();
28
+ //创建容量效果
29
+ let map = MX3D.Builder.createCapacity(_objs[i],value,(value*100).toFixed(1)+"%","100px");
30
+ maps.push(map);
31
+ }
32
+
33
+ //销毁
34
+ for (let i = 0; i < maps.length; i++) {
35
+ maps[i].dispose();
36
+ maps[i].anchor.setOpaque();
37
+ }
38
+ maps=[];
39
+ ```
40
+
41
+ <div id="container" style="width: 100%;height: 500px;position: relative;">
42
+ <div style="position: absolute;top: 20px;left: 20px;width: 120px;z-index: 5;" class="btn-group-vertical" role="group">
43
+ <button type="button" id="but_createMatrixHeatMap" class="btn btn-default">创建</button>
44
+ <button type="button" id="but_detele" class="btn btn-default">销毁</button>
45
+ </div>
46
+ </div>
47
+
48
+ <script>
49
+ MX3D.accessToken = "0498A36E67B5ED17E7A7B23D0AC4ACB2E1D6DE1209A0C0894BA0B6973C606201DDCEF2EACFE268AB31FBE04616680A3F453EA85544AE248BA2B115141E029B13C3C90718BA0F15AE6A78BA9F3D70C41650FA4EDDC64D1DEFE5CBA2767EC3A52B347393871ACAC3FF01DF62EAF2F0AEB93578E90EB1F3B7B0793949E88BB4AF1EBB9AA0B0635B93738EC96287638F8716DD6FAC6087C8C8BE4F674F3853042BC60E391D9F5D54";
50
+ app = new MX3D.App({
51
+ container: document.getElementById("container")
52
+ });
53
+ app.load({
54
+ pk: "9a0b0f36-f283-49b5-b964-9a3bc630abda",
55
+ progress: (_x) => { //加载进度
56
+ console.log(_x)
57
+ },
58
+ complete:()=>{ ///加载完成
59
+ console.log("加载完成");
60
+ // console.log(app.project.getSceneTree());
61
+ }
62
+ });
63
+
64
+
65
+ var maps=[];
66
+
67
+
68
+ $("#but_createMatrixHeatMap").click(function(){
69
+
70
+ var _objs = app.project.findObjectsByCustomType('Cabinet',{ isCurrent: false, isEnabled: true });
71
+ for (let i = 0; i < _objs.length; i++) {
72
+ _objs[i].setTransparent();
73
+ //_objs[i].setEnabled(false);
74
+ let value=Math.random();
75
+ let map = MX3D.Builder.createCapacity(_objs[i],value,(value*100).toFixed(1)+"%","100px");
76
+ maps.push(map);
77
+ }
78
+
79
+ });
80
+
81
+ $("#but_detele").click(function(){
82
+ for (let i = 0; i < maps.length; i++) {
83
+ maps[i].dispose();
84
+ maps[i].anchor.setOpaque();
85
+ }
86
+ maps=[];
87
+ });
88
+ </script>
@@ -0,0 +1,73 @@
1
+ ## 添加特效
2
+
3
+ ```javascript
4
+ /// <summary>
5
+ /// 添加特效
6
+ /// </summary>
7
+ /// <param name="Thunder">特效枚举</param>
8
+ /// <param name="_objs">3D实例</param>
9
+ MX3D.Effect.add('Thunder', app)
10
+ ```
11
+
12
+ ## 去除特效
13
+
14
+ ```javascript
15
+ /// <summary>
16
+ /// 去除特效
17
+ /// </summary>
18
+ /// <param name="Thunder">特效枚举</param>
19
+ MX3D.Effect.remove('Thunder')
20
+ ```
21
+
22
+ ## 现支持的特效
23
+
24
+ ```javascript
25
+ //雷电
26
+ 'Thunder'
27
+ //下雨
28
+ 'Rain'
29
+ //乌云
30
+ 'Cloud'
31
+ ```
32
+
33
+ ## 示例
34
+
35
+ <div id="container" style="width: 100%;height: 500px;position: relative;">
36
+ <div style="position: absolute;top: 20px;left: 20px;width: 120px;z-index: 5;" class="btn-group-vertical" role="group">
37
+ <button type="button" id="Thunder" class="btn btn-default">雷电</button>
38
+ <button type="button" id="Rain" class="btn btn-default">下雨</button>
39
+ <button type="button" id="Cloud" class="btn btn-default">乌云</button>
40
+ <button type="button" id="close" class="btn btn-default">清除</button>
41
+ </div>
42
+ </div>
43
+
44
+ <script>
45
+ MX3D.accessToken = "0498A36E67B5ED17E7A7B23D0AC4ACB2E1D6DE1209A0C0894BA0B6973C606201DDCEF2EACFE268AB31FBE04616680A3F453EA85544AE248BA2B115141E029B13C3C90718BA0F15AE6A78BA9F3D70C41650FA4EDDC64D1DEFE5CBA2767EC3A52B347393871ACAC3FF01DF62EAF2F0AEB93578E90EB1F3B7B0793949E88BB4AF1EBB9AA0B0635B93738EC96287638F8716DD6FAC6087C8C8BE4F674F3853042BC60E391D9F5D54";
46
+ app = new MX3D.App({
47
+ container: document.getElementById("container")
48
+ });
49
+ app.load({
50
+ pk: "9a0b0f36-f283-49b5-b964-9a3bc630abda",
51
+ progress: (_x) => { //加载进度
52
+ console.log(_x)
53
+ },
54
+ complete:()=>{ ///加载完成
55
+ console.log("加载完成");
56
+ }
57
+ });
58
+
59
+ $("#Thunder").click(function(){
60
+ MX3D.Effect.add('Thunder', app);
61
+ });
62
+ $("#Rain").click(function(){
63
+ MX3D.Effect.add('Rain', app);
64
+ });
65
+ $("#Cloud").click(function(){
66
+ MX3D.Effect.add('Cloud', app);
67
+ });
68
+ $("#close").click(function(){
69
+ MX3D.Effect.remove('Thunder')
70
+ MX3D.Effect.remove('Cloud')
71
+ MX3D.Effect.remove('Rain')
72
+ });
73
+ </script>
@@ -0,0 +1,100 @@
1
+ ## 注册事件
2
+
3
+ ```javascript
4
+ /// <summary>
5
+ /// 添加对象事件
6
+ /// </summary>
7
+ /// <param name="MX3D.EventType">事件类型,查看事件类型选项</param>
8
+ /// <param name="function">事件回调</param>
9
+ obj.addEventListener(MX3D.EventType, function);
10
+ ```
11
+
12
+ ## 事件类型
13
+
14
+ ```javascript
15
+ /// <summary>
16
+ /// 左键单击
17
+ /// </summary>
18
+ leftClick
19
+ /// <summary>
20
+ /// 右键单击
21
+ /// </summary>
22
+ rightClick
23
+ /// <summary>
24
+ /// 双击
25
+ /// </summary>
26
+ doubleClick
27
+ /// <summary>
28
+ /// 移入
29
+ /// </summary>
30
+ eover
31
+ /// <summary>
32
+ /// 长按
33
+ /// </summary>
34
+ longPress
35
+ /// <summary>
36
+ /// 移出
37
+ /// </summary>
38
+ out = 'out'
39
+ ```
40
+
41
+ ### 事件实例
42
+
43
+ 当用户左键点击某个对象时浏览器控制台输出此对象:
44
+
45
+ ```javascript
46
+ var obj = app.project.findObjectById('O8z6oQcz6SV3') //获取指定编号对象
47
+ obj.addEventListener(MX3D.EventType.leftClick, function (e) {
48
+ console.log(e)
49
+ })
50
+ ```
51
+
52
+ ## 事件删除
53
+
54
+ ```javascript
55
+ obj.removeEventListener(MX3D.EventType.leftClick)
56
+ ```
57
+
58
+ ## 示例
59
+
60
+ <div id="container" style="width: 100%;height: 500px;position: relative;">
61
+ <div style="position: absolute;top: 20px;left: 20px;width: 120px;z-index: 5;" class="btn-group-vertical" role="group">
62
+ <button type="button" id="but_setFlash" class="btn btn-default">事件监听</button>
63
+ <button type="button" id="but_setTransparent" class="btn btn-default">事件取消</button>
64
+ </div>
65
+ </div>
66
+
67
+ <script>
68
+ MX3D.accessToken = "0498A36E67B5ED17E7A7B23D0AC4ACB2E1D6DE1209A0C0894BA0B6973C606201DDCEF2EACFE268AB31FBE04616680A3F453EA85544AE248BA2B115141E029B13C3C90718BA0F15AE6A78BA9F3D70C41650FA4EDDC64D1DEFE5CBA2767EC3A52B347393871ACAC3FF01DF62EAF2F0AEB93578E90EB1F3B7B0793949E88BB4AF1EBB9AA0B0635B93738EC96287638F8716DD6FAC6087C8C8BE4F674F3853042BC60E391D9F5D54";
69
+ app = new MX3D.App({
70
+ container: document.getElementById("container")
71
+ });
72
+ app.load({
73
+ pk: "9a0b0f36-f283-49b5-b964-9a3bc630abda",
74
+ progress: (_x) => { //加载进度
75
+ console.log(_x)
76
+ },
77
+ complete:()=>{ ///加载完成
78
+ console.log("加载完成");
79
+ // console.log(app.Project.getSceneTree());
80
+ // console.log(parseInt(new Date().getTime() - _t) / 1000);
81
+ }
82
+ });
83
+
84
+ $("#but_setFlash").click(function(){
85
+ var _objs = app.project.findObjectsByCustomType("Cabinet");
86
+ for (let i = 0; i < _objs.length; i++) {
87
+ _objs[i].addEventListener(MX3D.EventType.leftClick, function (e) {
88
+ console.log(e);
89
+ alert("你点击了机柜:"+e.customNumber)
90
+ })
91
+ }
92
+ });
93
+
94
+ $("#but_setTransparent").click(function(){
95
+ var _objs = app.project.findObjectsByCustomType("Cabinet");
96
+ for (let i = 0; i < _objs.length; i++) {
97
+ _objs[i].removeEventListener(MX3D.EventType.leftClick)
98
+ }
99
+ });
100
+ </script>
@@ -0,0 +1,97 @@
1
+ ## 2d 连线
2
+
3
+ ```javascript
4
+ /// <summary>
5
+ /// 创建2d连线效果
6
+ /// </summary>
7
+ /// <param name="_id">线编号自定义(非空)</param>
8
+ /// <param name="_objs">需要相连的对象数组(非空,且大于2)></param>
9
+ /// <param name="_options">线的样式配置(可空)
10
+ ////// <param name="width">宽度</param>
11
+ ////// <param name="color">颜色</param>
12
+ ////// <param name="isDotted">是否是虚线</param>
13
+ /// </param>
14
+ var line = MX3D.Builder.create2DLine(_id: string, _objs: Array<IObject>, _options?: { width: number, color: string, isDotted: boolean });
15
+ ```
16
+
17
+ ## 3d 连线
18
+
19
+ ```javascript
20
+ /// <summary>
21
+ /// 创建3d连线效果
22
+ /// </summary>
23
+ /// <param name="_id">线编号自定义(非空)</param>
24
+ /// <param name="_objs">需要相连的对象数组(非空,且大于2)></param>
25
+ /// <param name="_options">线的样式配置(可空)
26
+ ////// <param name="width">宽度</param>
27
+ ////// <param name="color">颜色</param>
28
+ /// </param>
29
+ var line = MX3D.Builder.create2DLine(_id: string, _objs: Array<IObject>, _options?: { width: number, color: string });
30
+ ```
31
+
32
+ ## 线属性
33
+
34
+ ## 点击事件
35
+
36
+ ```javascript
37
+ /// <param name="_action">回调方法</param>
38
+ line.addEventListener(_action: Function)
39
+ ```
40
+
41
+ ## 示例
42
+
43
+ ### 代码
44
+
45
+ ```javascript
46
+ /// 线实例
47
+ var line;
48
+ ///创建2d连线
49
+ var _objs = app.project.findObjectsByCustomType('Humiture', { isCurrent: false, isEnabled: true,});
50
+ line = MX3D.Builder.create2DLine('line_5498797', _objs);
51
+ line.update();
52
+ ///创建3d连线
53
+ var _objs = app.project.findObjectsByCustomType('Humiture', { isCurrent: false, isEnabled: true,});
54
+ line = MX3D.Builder.create3DLine('line_5498797', _objs);
55
+ line.update();
56
+
57
+ ```
58
+
59
+ ### 效果
60
+
61
+ <div id="container" style="width: 100%;height: 500px;position: relative;">
62
+ <div style="position: absolute;top: 20px;left: 20px;width: 120px;z-index: 5;" class="btn-group-vertical" role="group">
63
+ <button type="button" id="but_2d" class="btn btn-default">2d连线</button>
64
+ <button type="button" id="but_3d" class="btn btn-default">3d连线</button>
65
+ </div>
66
+ </div>
67
+
68
+ <script>
69
+ MX3D.accessToken = "0498A36E67B5ED17E7A7B23D0AC4ACB2E1D6DE1209A0C0894BA0B6973C606201DDCEF2EACFE268AB31FBE04616680A3F453EA85544AE248BA2B115141E029B13C3C90718BA0F15AE6A78BA9F3D70C41650FA4EDDC64D1DEFE5CBA2767EC3A52B347393871ACAC3FF01DF62EAF2F0AEB93578E90EB1F3B7B0793949E88BB4AF1EBB9AA0B0635B93738EC96287638F8716DD6FAC6087C8C8BE4F674F3853042BC60E391D9F5D54";
70
+ app = new MX3D.App({
71
+ container: document.getElementById("container")
72
+ });
73
+ app.load({
74
+ pk: "9a0b0f36-f283-49b5-b964-9a3bc630abda",
75
+ progress: (_x) => { //加载进度
76
+ console.log(_x)
77
+ },
78
+ complete:()=>{ ///加载完成
79
+ console.log("加载完成");
80
+ }
81
+ });
82
+
83
+ var uis;
84
+
85
+ $("#but_2d").click(function(){
86
+ if(uis)uis.dispose();
87
+ var _objs = app.project.findObjectsByCustomType('Humiture',{ isCurrent: false, isEnabled: true });
88
+ uis = MX3D.Builder.create2DLine("line_5498797", _objs);
89
+ uis.update();
90
+ });
91
+ $("#but_3d").click(function(){
92
+ if(uis)uis.dispose();
93
+ var _objs = app.project.findObjectsByCustomType('Humiture',{ isCurrent: false, isEnabled: true });
94
+ uis = MX3D.Builder.create3DLine("line_5498797", _objs);
95
+ uis.update();
96
+ });
97
+ </script>
@@ -0,0 +1,164 @@
1
+ ## 属性
2
+
3
+ ```javascript
4
+ id: string //编号
5
+ name: string //名称
6
+ parentId: string //父编号
7
+ objectType: string //模型类型
8
+ customNumber: string //自定义编号
9
+ customType: string //自定义类型
10
+ modelId: string //模型资源编号
11
+ Sight: Sight //视角
12
+ effectType: EffectType //设备状态
13
+ ```
14
+
15
+ ### 视角 Sight
16
+
17
+ #### 视角属性
18
+
19
+ ```javascript
20
+ alpha: number //视角方向;弧度0-3.14
21
+ focus: Vector3 //聚焦点
22
+ radius: number //距离聚焦点的半径
23
+ beta: number //视角高度;弧度0-3.14
24
+ minimumLimit: number //距离聚焦点最近半径
25
+ maximumLimit: number //距离聚焦点最远半径
26
+ minBeta: number //最小视角高度限制;弧度0-3.14
27
+ maxBeta: number //最高视角限制;弧度0-3.14
28
+ ```
29
+
30
+ #### 视角方法
31
+
32
+ ```javascript
33
+ //视角转成字符串形式
34
+ let _sightJson = obj.Sight.toString();
35
+ //视角json字符串转json
36
+ obj.Sight.toJosn(_sightJson);
37
+ //设置缩放范围
38
+ obj.Sight.setLimit(_miniLimit: number, _maxiLimit: number) {}
39
+ //设置上下视角限制
40
+ obj.Sight.setBeta(_minBeta: number, _maxBeta: number) {}
41
+ ```
42
+
43
+ ## 方法
44
+
45
+ ### 设置闪烁
46
+
47
+ ```javascript
48
+ /// <summary>
49
+ /// 设置对象闪烁
50
+ /// </summary>
51
+ /// <param name="level">闪烁等级;1-5</param>
52
+ obj.setFlash(level: number)
53
+ ```
54
+
55
+ ### 设置透明
56
+
57
+ ```javascript
58
+ /// <summary>
59
+ /// 设置透明
60
+ /// </summary>
61
+ obj.setTransparent()
62
+ ```
63
+
64
+ ### 设置正常
65
+
66
+ ```javascript
67
+ /// <summary>
68
+ /// 设置正常
69
+ /// </summary>
70
+ obj.setOpaque()
71
+ ```
72
+
73
+ ### 显示隐藏
74
+
75
+ ```javascript
76
+ /// <summary>
77
+ /// 显示隐藏
78
+ /// </summary>
79
+ obj.setEnabled(isEnabled)
80
+ ```
81
+
82
+ ### 设置颜色
83
+
84
+ ```javascript
85
+ /// <summary>
86
+ /// 设置颜色
87
+ /// </summary>
88
+ /// <param name="_color">带透明通道的16进制颜色字符串;可为空、为空则清除颜色设置</param>
89
+ obj.setColor(_color: string="#ffffff")
90
+ ```
91
+
92
+ ### 播放动画
93
+
94
+ ```javascript
95
+ /// <summary>
96
+ /// 播放动画
97
+ /// </summary>
98
+ obj.play()
99
+ ```
100
+
101
+ ### 关闭动画
102
+
103
+ ```javascript
104
+ /// <summary>
105
+ /// 关闭动画
106
+ /// </summary>
107
+ obj.stop()
108
+ ```
109
+
110
+ ## 示例
111
+
112
+ <div id="container" style="width: 100%;height: 500px;position: relative;">
113
+ <div style="position: absolute;top: 20px;left: 20px;width: 120px;z-index: 5;" class="btn-group-vertical" role="group">
114
+ <button type="button" id="but_setFlash" class="btn btn-default">告警闪烁</button>
115
+ <button type="button" id="but_setTransparent" class="btn btn-default">透明</button>
116
+ <button type="button" id="but_setOpaque" class="btn btn-default">正常</button>
117
+ <button type="button" id="but_hide" class="btn btn-default">隐藏</button>
118
+ <button type="button" id="but_show" class="btn btn-default">显示</button>
119
+ </div>
120
+ </div>
121
+
122
+ <script>
123
+ MX3D.accessToken = "0498A36E67B5ED17E7A7B23D0AC4ACB2E1D6DE1209A0C0894BA0B6973C606201DDCEF2EACFE268AB31FBE04616680A3F453EA85544AE248BA2B115141E029B13C3C90718BA0F15AE6A78BA9F3D70C41650FA4EDDC64D1DEFE5CBA2767EC3A52B347393871ACAC3FF01DF62EAF2F0AEB93578E90EB1F3B7B0793949E88BB4AF1EBB9AA0B0635B93738EC96287638F8716DD6FAC6087C8C8BE4F674F3853042BC60E391D9F5D54";
124
+ app = new MX3D.App({
125
+ container: document.getElementById("container")
126
+ });
127
+ app.load({
128
+ pk: "9a0b0f36-f283-49b5-b964-9a3bc630abda",
129
+ // isDefaultLevel:false,
130
+ progress: (_x) => { //加载进度
131
+ console.log(_x)
132
+ },
133
+ complete:()=>{ ///加载完成
134
+ console.log("加载完成");
135
+ // console.log(app.Project.getSceneTree());
136
+ // console.log(parseInt(new Date().getTime() - _t) / 1000);
137
+ }
138
+ });
139
+
140
+ $("#but_setFlash").click(function(){
141
+ var obj = app.project.findObjectById("qLokZixaMv5K");
142
+ obj.setFlash(1);
143
+ });
144
+
145
+ $("#but_setTransparent").click(function(){
146
+ var obj = app.project.findObjectById("qLokZixaMv5K");
147
+ obj.setTransparent();
148
+ //app.Environment.showDebug();
149
+ });
150
+
151
+ $("#but_setOpaque").click(function(){
152
+ var obj = app.project.findObjectById("qLokZixaMv5K");
153
+ obj.setOpaque();
154
+ });
155
+
156
+ $("#but_hide").click(function(){
157
+ var obj=app.project.findObjectById("qLokZixaMv5K")
158
+ obj.setEnabled(false);
159
+ });
160
+ $("#but_show").click(function(){
161
+ var obj=app.project.findObjectById("qLokZixaMv5K")
162
+ obj.setEnabled(true);
163
+ });
164
+ </script>
@@ -0,0 +1,79 @@
1
+ # 场景管理
2
+
3
+ ## 获取指定编号层级树
4
+
5
+ ```javascript
6
+ /// <summary>
7
+ /// 获取指定编号层级树
8
+ /// </summary>
9
+ /// <param name="_id">对象编号;为空则为根层级</param>
10
+ /// <param name="_excludeTypes">需排除的类型集合,默认为空</param>
11
+ let treeData = app.project.getSceneTree(_id: string = this.root.id, _excludeTypes: Array<string> = [])
12
+ ```
13
+
14
+ ## 切换层级
15
+
16
+ ```javascript
17
+ /// <summary>
18
+ /// 切换层级
19
+ /// </summary>
20
+ /// <param name="_id">对象编号;为null则为根层级</param>
21
+ /// <param name="_isFocus">切换完成后是否聚焦</param>
22
+ let treeData = app.project.switchLevel(_id: string, _isFocus: boolean = false);
23
+ ```
24
+
25
+ ## 层级切换监听事件
26
+
27
+ ```javascript
28
+ /// <summary>
29
+ /// 层级切换监听事件
30
+ /// </summary>
31
+ /// <param>值为回调方法</param>
32
+ app.levelEvent=(_obj)=>{
33
+ console.log(_obj);
34
+ };
35
+ ```
36
+
37
+ ## 根据指定自定义编号获取对象数组
38
+
39
+ ```javascript
40
+ /// <summary>
41
+ /// 根据指定自定义编号获取对象
42
+ /// </summary>
43
+ /// <param name="_customNumber">对象自定义编号</param>
44
+ let object = app.project.findObjectByCustomNumber(_customNumber: string);
45
+ ```
46
+
47
+ ## 获取指定类型对象
48
+
49
+ ```javascript
50
+ /// <summary>
51
+ /// 获取指定类型对象
52
+ /// </summary>
53
+ /// <param name="_customType">对象类型</param>
54
+ /// <param name="queryParameters">查询参数:可选</param>
55
+ /// <param name="queryParameters.isCurrent">是否排除不在当前节点的对象;默认false</param>
56
+ /// <param name="queryParameters.isEnabled">是否排除隐藏的对象;默认false</param>
57
+ let objects = app.project.findObjectsByCustomType(_customType: string,queryParameters: { isCurrent: boolean, isEnabled: boolean });
58
+ ```
59
+
60
+ ## 根据编号获取对象
61
+
62
+ ```javascript
63
+ /// <summary>
64
+ /// 根据编号获取对象
65
+ /// </summary>
66
+ /// <param name="_id">对象编号</param>
67
+ let object = app.project.findObjectById(_id: string);
68
+ ```
69
+
70
+ ## 获取指定对象编号下的所有子对象
71
+
72
+ ```javascript
73
+ /// <summary>
74
+ /// 获取指定对象编号下的子对象数组
75
+ /// </summary>
76
+ /// <param name="_id">对象编号;为null则为根层级</param>
77
+ /// <param name="_includeSub">是否包括孙物体;默认false</param>
78
+ let objects = app.project.getChildsById(_id: string, _includeSub: boolean = false);
79
+ ```