Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
		
						commit
						48b3fa8579
					
				@ -290,6 +290,7 @@
 | 
			
		||||
                            var datas = data.split(",");
 | 
			
		||||
                            var urn = datas[0];
 | 
			
		||||
                            let m3d_names = datas[1].split(".");
 | 
			
		||||
                            translateObject(urn);// forge轉換模型
 | 
			
		||||
 | 
			
		||||
                            var url = "/BuildInfo/SaveBuildInfo";
 | 
			
		||||
 | 
			
		||||
@ -465,6 +466,7 @@
 | 
			
		||||
                            var datas = data.split(",");
 | 
			
		||||
                            var urn = datas[0];
 | 
			
		||||
                            let m3d_names = datas[1].split(".");
 | 
			
		||||
                            translateObject(urn);// forge轉換模型
 | 
			
		||||
 | 
			
		||||
                            var url = "/BuildInfo/EditBuildInfo";
 | 
			
		||||
                            var formData2 = new FormData();
 | 
			
		||||
@ -955,6 +957,24 @@
 | 
			
		||||
        }
 | 
			
		||||
        //#endregion
 | 
			
		||||
 | 
			
		||||
        //#region 翻譯模型
 | 
			
		||||
        function translateObject(urn) {
 | 
			
		||||
            $("#forgeViewer").empty();
 | 
			
		||||
            //if (node == null) node = $('#appBuckets').jstree(true).get_selected(true)[0];
 | 
			
		||||
            var bucketKey = "ta3hqsffzqbnouxkpldkuksew4sj21w5-bims_models";//forge上傳平台-資料夾
 | 
			
		||||
            var objectKey = urn;
 | 
			
		||||
 | 
			
		||||
            jQuery.post({
 | 
			
		||||
                url: '/api/forge/modelderivative/jobs',
 | 
			
		||||
                contentType: 'application/json',
 | 
			
		||||
                data: JSON.stringify({ 'bucketKey': bucketKey, 'objectName': objectKey }),
 | 
			
		||||
                success: function (res) {
 | 
			
		||||
                    //$("#forgeViewer").html('Translation started! Please try again in a moment.');
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        //#endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </script>
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,8 @@
 | 
			
		||||
<div class="row mb-3">
 | 
			
		||||
    <div class="col-12 d-flex justify-content-end">
 | 
			
		||||
        <a href="javascript:;" class="btn btn-success waves-effect waves-themed mb-3" id="addUser-btn" onclick="AddBuild()"><span class="fal fa-plus mr-1"></span>新增</a>
 | 
			
		||||
        <a href="/index.html" class="btn btn-dark waves-effect waves-themed mb-3" id="openForgeView-btn"><span class="fal fa-plus mr-1"></span>forge管理</a>
 | 
			
		||||
        <a href="/forgeDemo.html" class="btn btn-danger waves-effect waves-themed mb-3" id="openForgeDemo-btn"><span class="fal fa-plus mr-1"></span>forge Demo</a>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="row">
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										93
									
								
								Backend/Views/Forge/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Backend/Views/Forge/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,93 @@
 | 
			
		||||
<!--<!DOCTYPE html>
 | 
			
		||||
<html>-->
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <title>Autodesk Forge Tutorial</title>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="shortcut icon" href="https://github.com/Autodesk-Forge/learn.forge.viewmodels/raw/master/img/favicon.ico">
 | 
			
		||||
    <!-- Common packages: jQuery, Bootstrap, jsTree -->
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/jstree.min.js"></script>
 | 
			
		||||
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
 | 
			
		||||
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/themes/default/style.min.css" />
 | 
			
		||||
    <!-- Autodesk Forge Viewer files -->
 | 
			
		||||
    <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css" type="text/css">
 | 
			
		||||
    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script>
 | 
			
		||||
    <!-- this project files -->
 | 
			
		||||
    <link href="css/main.css" rel="stylesheet" />
 | 
			
		||||
    <script src="js/ForgeTree.js"></script>
 | 
			
		||||
    <script src="js/ForgeViewer.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
    @{
 | 
			
		||||
        ViewData["MainNum"] = "1";
 | 
			
		||||
        ViewData["SubNum"] = "4";
 | 
			
		||||
        ViewData["Title"] = "forge管理";
 | 
			
		||||
    }
 | 
			
		||||
    <!-- Fixed navbar by Bootstrap: https://getbootstrap.com/examples/navbar-fixed-top/ -->
 | 
			
		||||
    <nav class="navbar navbar-default navbar-fixed-top">
 | 
			
		||||
        <div class="container-fluid">
 | 
			
		||||
            <ul class="nav navbar-nav left">
 | 
			
		||||
                <li>
 | 
			
		||||
                    <a href="http://developer.autodesk.com" target="_blank">
 | 
			
		||||
                        <img alt="Autodesk Forge" src="//developer.static.autodesk.com/images/logo_forge-2-line.png" height="20">
 | 
			
		||||
                    </a>
 | 
			
		||||
                </li>
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    </nav>
 | 
			
		||||
    <!-- End of navbar -->
 | 
			
		||||
    <div class="container-fluid fill">
 | 
			
		||||
        <div class="row fill">
 | 
			
		||||
            <div class="col-sm-4 fill">
 | 
			
		||||
                <div class="panel panel-default fill">
 | 
			
		||||
                    <div class="panel-heading" data-toggle="tooltip">
 | 
			
		||||
                        Buckets & Objects
 | 
			
		||||
                        <span id="refreshBuckets" class="glyphicon glyphicon-refresh" style="cursor: pointer"></span>
 | 
			
		||||
                        <button class="btn btn-xs btn-info" style="float: right" id="showFormCreateBucket" data-toggle="modal" data-target="#createBucketModal">
 | 
			
		||||
                            <span class="glyphicon glyphicon-folder-close"></span> New bucket
 | 
			
		||||
                        </button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div id="appBuckets">
 | 
			
		||||
                        tree here
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="col-sm-8 fill">
 | 
			
		||||
                <div id="forgeViewer"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <form id="uploadFile" method='post' enctype="multipart/form-data">
 | 
			
		||||
        <input id="hiddenUploadField" type="file" name="theFile" style="visibility:hidden" />
 | 
			
		||||
    </form>
 | 
			
		||||
    <!-- Modal Create Bucket -->
 | 
			
		||||
    <div class="modal fade" id="createBucketModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
 | 
			
		||||
        <div class="modal-dialog" role="document">
 | 
			
		||||
            <div class="modal-content">
 | 
			
		||||
                <div class="modal-header">
 | 
			
		||||
                    <button type="button" class="close" data-dismiss="modal" aria-label="Cancel">
 | 
			
		||||
                        <span aria-hidden="true">×</span>
 | 
			
		||||
                    </button>
 | 
			
		||||
                    <h4 class="modal-title" id="myModalLabel">Create new bucket</h4>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="modal-body">
 | 
			
		||||
                    <input type="text" id="newBucketKey" class="form-control"> For demonstration purposes, objects (files)
 | 
			
		||||
                    are NOT automatically translated. After you upload, right click on
 | 
			
		||||
                    the object and select "Translate". Note: Technically your bucket name is required to be globally unique across
 | 
			
		||||
                    the entire platform - to keep things simple with this tutorial your client ID will be prepended by default to
 | 
			
		||||
                    your bucket name and in turn masked by the UI so you only have to make sure your bucket name is unique within
 | 
			
		||||
                    your current Forge app.
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="modal-footer">
 | 
			
		||||
                    <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
 | 
			
		||||
                    <button type="button" class="btn btn-primary" id="createNewBucket">Go ahead, create the bucket</button>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
<!--</html>-->
 | 
			
		||||
							
								
								
									
										23
									
								
								Backend/wwwroot/css/forge/main.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Backend/wwwroot/css/forge/main.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
html, body {
 | 
			
		||||
    min-height: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fill {
 | 
			
		||||
    height: calc(100vh - 100px);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    padding-top: 60px; /* space for the top nav bar */
 | 
			
		||||
    margin-right: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#appBuckets {
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: calc(100vh - 150px);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#forgeViewer {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										500
									
								
								Backend/wwwroot/forgeDemo.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										500
									
								
								Backend/wwwroot/forgeDemo.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,500 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <title></title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
    <link rel="shortcut icon" href="https://github.com/Autodesk-Forge/learn.forge.viewmodels/raw/master/img/favicon.ico">
 | 
			
		||||
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
 | 
			
		||||
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/themes/default/style.min.css" />
 | 
			
		||||
    <!-- Autodesk Forge Viewer files -->
 | 
			
		||||
    <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css" type="text/css">
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div id="MyControls" class="adsk control">
 | 
			
		||||
        <p style="text-align: center; font-weight: bold;">Robot Controls</p>
 | 
			
		||||
        <p id="id_printer">Selected_ID: </p>
 | 
			
		||||
        <p id="all_id">All_ID: </p>
 | 
			
		||||
        <!--<button id="1F1oor" onclick="move1Floor()">1 Floor</button>
 | 
			
		||||
        <button id="2F1oor" onclick="move2Floor()">2 Floor</button>
 | 
			
		||||
        <button id="3F1oor" onclick="move3Floor()">3 Floor</button>
 | 
			
		||||
 | 
			
		||||
        <button id="4F1oor" onclick="move4Floor()">4 Floor</button>
 | 
			
		||||
        <button id="5F1oor" onclick="move5Floor()">5 Floor</button>
 | 
			
		||||
        <button id="6F1oor" onclick="move6Floor()">6 Floor</button>
 | 
			
		||||
        <button id="7F1oor" onclick="move7Floor()">7 Floor</button>
 | 
			
		||||
        <button id="8F1oor" onclick="move8Floor()">8 Floor</button>
 | 
			
		||||
        <button id="9F1oor" onclick="move9Floor()">9 Floor</button>
 | 
			
		||||
        <button id="10F1oor" onclick="move10Floor()">10 Floor</button>
 | 
			
		||||
        <button id="11F1oor" onclick="move11Floor()">11 Floor</button>
 | 
			
		||||
        <button id="12F1oor" onclick="move12Floor()">12 Floor</button>
 | 
			
		||||
        <button id="13F1oor" onclick="moveB1Floor()">B1 Floor</button>-->
 | 
			
		||||
        <button type="button" class="btn btn-secondary" onclick="openOrCloseLight()">電源</button>
 | 
			
		||||
        <button type="button" class="btn btn-danger" onclick="changeColorHotspot()">變更熱點顏色</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="loadHeatMap()">載入熱圖</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="hideModel()">隱藏物件</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="openModel()">顯示物件</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="transparentModel()">透明化物件</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="cancelTransparentModel()">取消透明物件</button>
 | 
			
		||||
        <button type="button" class="btn btn-danger" onclick="proFile()">剖面</button>
 | 
			
		||||
        <button type="button" class="btn btn-dark" onclick="getLevels()">取得levels</button>
 | 
			
		||||
        <button type="button" class="btn btn-success" onclick="importDevCor()">匯入設備座標及dbid</button>
 | 
			
		||||
        <!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
 | 
			
		||||
        <!-- <input type="range">Main Axis</input> -->
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div>
 | 
			
		||||
        <div id="forgeViewer"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class="modal" id="hotspotModal" tabindex="-1" aria-labelledby="loginModalLabel" aria-hidden="true">
 | 
			
		||||
        <div class="modal-dialog">
 | 
			
		||||
            <div class="modal-content">
 | 
			
		||||
 | 
			
		||||
                <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
 | 
			
		||||
                    <li class="nav-item" role="presentation">
 | 
			
		||||
                        <a class="nav-link py-3 px-4" id="pills-register-tab" data-toggle="pill" href="#pills-register" role="tab" aria-controls="pills-register" aria-selected="false">即時值</a>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li class="nav-item" role="presentation">
 | 
			
		||||
                        <a class="nav-link py-3 px-4 active" id="pills-login-tab" data-toggle="pill" href="#pills-login" role="tab" aria-controls="pills-login" aria-selected="true">基本資料</a>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li class="nav-item" role="presentation">
 | 
			
		||||
                        <a class="nav-link py-3 px-4" id="pills-alarm-tab" data-toggle="pill" href="#pills-alarm" role="tab" aria-controls="pills-alarm" aria-selected="false">異常</a>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li class="nav-item" role="presentation">
 | 
			
		||||
                        <a class="nav-link py-3 px-4" id="pills-operation-tab" data-toggle="pill" href="#pills-operation" role="tab" aria-controls="pills-operation" aria-selected="false">運維</a>
 | 
			
		||||
                    </li>
 | 
			
		||||
                </ul>
 | 
			
		||||
                <div class="tab-content" id="pills-tabContent">
 | 
			
		||||
                    <div class="tab-pane fade" id="pills-register" role="tabpanel" aria-labelledby="pills-register-tab">
 | 
			
		||||
                        <div class="modal-header">
 | 
			
		||||
                            <h5 class="modal-title" id="loginModalLabel">即時值資訊</h5>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-body">
 | 
			
		||||
                            <form>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <input id="lightBar" type="range" min="0" max="100" step="1" onchange="changeLightPower()">明亮度
 | 
			
		||||
                                    <!--<button type="button" class="btn btn-secondary" onclick="openOrCloseLight()">電源</button>-->
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <!--<div class="form-group">
 | 
			
		||||
                                    <label for="register-recipient-name" class="col-form-label">訂閱時間:</label>
 | 
			
		||||
                                    <label class="col-form-label">100</label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="register-pwd-text" class="col-form-label">執行時間:</label>
 | 
			
		||||
                                    <label class="col-form-label">200</label>
 | 
			
		||||
                                </div>-->
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-footer">
 | 
			
		||||
                            <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="closeHotspotModal()">返回</button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                    <div class="tab-pane fade" id="pills-login" role="tabpanel" aria-labelledby="pills-login-tab">
 | 
			
		||||
                        <div class="modal-header">
 | 
			
		||||
                            <h5 class="modal-title" id="loginModalLabel">基本資料</h5>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-body">
 | 
			
		||||
                            <form>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="login-recipient-name" class="col-form-label">設備名稱:</label>
 | 
			
		||||
                                    <label class="col-form-label" id="deviceName"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="login-message-text" class="col-form-label">DBID:</label>
 | 
			
		||||
                                    <label class="col-form-label" id="deviceDbid"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="login-message-text" class="col-form-label">位置:</label>
 | 
			
		||||
                                    <label class="col-form-label" id="devicePosition"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-footer">
 | 
			
		||||
                            <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="closeHotspotModal()">返回</button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                    <div class="tab-pane fade" id="pills-alarm" role="tabpanel" aria-labelledby="pills-alarm-tab">
 | 
			
		||||
                        <div class="modal-header">
 | 
			
		||||
                            <h5 class="modal-title" id="loginModalLabel">異常資訊</h5>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-body">
 | 
			
		||||
                            <form>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="alarm-recipient-name" class="col-form-label">異常狀況:</label>
 | 
			
		||||
                                    <label class="col-form-label" id="alarmStatus"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-footer">
 | 
			
		||||
                            <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="closeHotspotModal()">返回</button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                    <div class="tab-pane fade" id="pills-operation" role="tabpanel" aria-labelledby="pills-operation-tab">
 | 
			
		||||
                        <div class="modal-header">
 | 
			
		||||
                            <h5 class="modal-title" id="loginModalLabel">運維資訊</h5>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-body">
 | 
			
		||||
                            <form>
 | 
			
		||||
                                <div class="form-group">
 | 
			
		||||
                                    <label for="operation-recipient-name" class="col-form-label">運維人員:</label>
 | 
			
		||||
                                    <label class="col-form-label" id="operationStatus"></label>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </form>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="modal-footer">
 | 
			
		||||
                            <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="closeHotspotModal()">返回</button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <!--Base JS-->
 | 
			
		||||
    <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js'></script>
 | 
			
		||||
    <!--<script src="js/init.js"></script>-->
 | 
			
		||||
 | 
			
		||||
    <!-- Common packages: jQuery, Bootstrap, jsTree -->
 | 
			
		||||
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
 | 
			
		||||
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/jstree.min.js"></script>
 | 
			
		||||
    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.js"></script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <script src="js/forge/ForgeDemo.js"></script>
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
        .show-env-bg-button {
 | 
			
		||||
            background: red;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .hide-env-bg-button {
 | 
			
		||||
            background: blue;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
 | 
			
		||||
    <script>
 | 
			
		||||
        var curLightIsOpen = true;
 | 
			
		||||
        var objSendData = { Data: null };
 | 
			
		||||
 | 
			
		||||
        $(document).ready(function () {
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDLm53ZA');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDMjAyMjEyMDEubndk');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQ18yMDIyMTIwNS5ud2Q');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQ18yMDIyMTIwNS5ud2Q');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmJ1NzRfMG9kUW1XWUlXWGI2bFBQemc_dmVyc2lvbj02');//wsp
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDXzEyMjEubndk');
 | 
			
		||||
 | 
			
		||||
            //測試熱圖
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDXzEyMjFfMjIzMC5ud2Q');
 | 
			
		||||
 | 
			
		||||
            //三菱 最新urn 資料庫
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDXzEyMjFfMjIzMC5ud2Q');
 | 
			
		||||
 | 
			
		||||
            //測試單獨 7樓熱圖 DEMO
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxN0ZfREVNT18yMDIyXzEyXzI2Lm53Yw');
 | 
			
		||||
 | 
			
		||||
            //測試 方案2 7樓熱圖
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MEFSQyVFMyU4MCU5MTdGXzIwMjJfMTJfMjYubndj');
 | 
			
		||||
 | 
			
		||||
            //測試 方案3 熱圖
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUU2JTk2JUI5JUU2JUExJTg4M18yMDIyXzEyXzI2Lm53ZA');
 | 
			
		||||
 | 
			
		||||
            //測試 方案4
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUU2JTk2JUI5JUU2JUExJTg4NF8yMDIyXzEyXzI2Lm53ZA');
 | 
			
		||||
 | 
			
		||||
            //12.28 三菱單層樓 + 系統
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvQVJDJUU1JTk2JUFFJUU1JUIxJUE0K01FUCVFNSU4NSVBOCVFNiVBMyU5Rl83Rl9ERU1PLm53ZA');
 | 
			
		||||
 | 
			
		||||
            //目前線上整棟模型
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUU2JTk2JUI5JUU2JUExJTg4NF8yMDIyXzEyXzI2Lm53ZA');
 | 
			
		||||
 | 
			
		||||
            //單層 + 系統
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvTUVQK0FSQzdGX0RFTU9fJUU1JTg5JThBJUU5JUEwJTgyXzEyMjgubndk');
 | 
			
		||||
 | 
			
		||||
            //單層
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxMUZfREVNT18yMDIyXzEyXzI5Lm53Yw');
 | 
			
		||||
 | 
			
		||||
            //MEP
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMjkubndj');
 | 
			
		||||
 | 
			
		||||
            //12.29 整棟
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
 | 
			
		||||
 | 
			
		||||
            //12.30 整棟樓 ARC + MEP
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q');
 | 
			
		||||
 | 
			
		||||
            //12.30 整棟樓 ARC + MEP 半透明
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
 | 
			
		||||
 | 
			
		||||
            //12.31 整棟樓
 | 
			
		||||
            launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIyXzEyXzMxLm53ZA');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxJUU1JTg1JUE4JUU2JUEzJTlGXzIwMjJfMTJfMTMubndj');//全棟 ARC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
        function move1Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(0);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move2Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(1);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move3Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(2);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move4Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(3);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move5Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(4);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move6Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(5);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move7Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(6);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move8Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(7);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move9Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(8);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move10Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(9);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move11Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(10);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function move12Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(11);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function moveB1Floor() {
 | 
			
		||||
            setElevatorSpeed(0.2);
 | 
			
		||||
            setElevatorFloor(-1);
 | 
			
		||||
            requestAnimationFrame(movElevator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function changeLightPower() {
 | 
			
		||||
            var value = document.getElementById('lightBar').value;
 | 
			
		||||
            console.log("power: " + value);
 | 
			
		||||
            setLightPower(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function openOrCloseLight() {
 | 
			
		||||
            if (curLightIsOpen) {
 | 
			
		||||
                curLightIsOpen = false;
 | 
			
		||||
                setLightOpenOrClose(curLightIsOpen);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                curLightIsOpen = true;
 | 
			
		||||
                setLightOpenOrClose(curLightIsOpen);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function changeColorHotspot() {
 | 
			
		||||
            changeColorForHotspot(10);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function loadHeatMap() {
 | 
			
		||||
            loadHeatmap();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function hideModel() {
 | 
			
		||||
            hideObject();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function openModel() {
 | 
			
		||||
            openObject();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function transparentModel() {
 | 
			
		||||
            setObjectTransparent();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function cancelTransparentModel() {
 | 
			
		||||
            cancelObjectTransparent();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function getLevels() {
 | 
			
		||||
            //取得levels
 | 
			
		||||
            getLevelsData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function proFile() {
 | 
			
		||||
            profile();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function importDevCor() {
 | 
			
		||||
            ImportDevForCor();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function ImportDevForCor() {//callback = null
 | 
			
		||||
            var url = "/DeviceImport/ImportDevForCor";
 | 
			
		||||
            //let sendData = {
 | 
			
		||||
            //    "device_number": pageAct.AreaTag,
 | 
			
		||||
            //    "device_coordinate_3d": "",
 | 
			
		||||
            //    "device_dbid": "",
 | 
			
		||||
            //};
 | 
			
		||||
            objSendData.Data = tagIdDevList;
 | 
			
		||||
            //ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
			
		||||
            //    if (!res || res.code != "0000" || !res.data) {
 | 
			
		||||
            //        console.log(rel.msg);
 | 
			
		||||
            //    } else {
 | 
			
		||||
            //        console.log(rel.msg);
 | 
			
		||||
            //    }
 | 
			
		||||
            //}, null, "POST").send();
 | 
			
		||||
 | 
			
		||||
            //$.post(url, objSendData.Data, function (rel) {
 | 
			
		||||
            //    if (rel.code != "0000") {
 | 
			
		||||
            //        if (rel.code == "9999") {
 | 
			
		||||
            //            //toast_error(rel.msg);
 | 
			
		||||
            //            console.log(rel.msg);
 | 
			
		||||
            //        }
 | 
			
		||||
            //        else {
 | 
			
		||||
            //            //toast_warning(rel.msg);
 | 
			
		||||
            //            console.log(rel.msg);
 | 
			
		||||
            //        }
 | 
			
		||||
            //        return;
 | 
			
		||||
            //    }
 | 
			
		||||
            //    else {
 | 
			
		||||
            //        //toast_ok(rel.msg);
 | 
			
		||||
            //        console.log(rel.msg);
 | 
			
		||||
            //        //ReloadRawDataCheckTable();
 | 
			
		||||
            //    }
 | 
			
		||||
 | 
			
		||||
            //}, 'json');
 | 
			
		||||
 | 
			
		||||
            //headers={'content-type': 'application/json'}
 | 
			
		||||
 | 
			
		||||
            //$.ajax({
 | 
			
		||||
            //    type: "POST",
 | 
			
		||||
            //    url: url,
 | 
			
		||||
            //    data: objSendData.Data,
 | 
			
		||||
            //    cache: false,
 | 
			
		||||
            //    contentType: 'application/json',
 | 
			
		||||
            //    processData: false,
 | 
			
		||||
            //    success: function (rel) {
 | 
			
		||||
            //        //$("#save-building-btn").html('確定').attr("disabled", false);
 | 
			
		||||
            //        if (rel.code != "0000") {
 | 
			
		||||
            //            if (rel.code == "9999") {
 | 
			
		||||
            //                //toast_error(rel.msg);
 | 
			
		||||
            //                console.log(rel.msg);
 | 
			
		||||
            //            }
 | 
			
		||||
            //            else {
 | 
			
		||||
            //                //toast_warning(rel.msg);
 | 
			
		||||
            //                console.log(rel.msg);
 | 
			
		||||
            //            }
 | 
			
		||||
            //            return;
 | 
			
		||||
            //        }
 | 
			
		||||
            //        else {
 | 
			
		||||
            //            //toast_ok(rel.msg);
 | 
			
		||||
            //            console.log(rel.msg);
 | 
			
		||||
            //            //buildInfoTable.ajax.reload(null, false);
 | 
			
		||||
            //            //$('#build-modal').modal('hide');
 | 
			
		||||
            //            return;
 | 
			
		||||
            //        }
 | 
			
		||||
            //    },
 | 
			
		||||
            //    fail: function (xhr, status, error) {
 | 
			
		||||
            //        //$("#save-building-btn").html('確定').attr("disabled", false);
 | 
			
		||||
            //        //toast_error(rel.msg);
 | 
			
		||||
            //    }
 | 
			
		||||
            //});
 | 
			
		||||
 | 
			
		||||
            $.ajax({
 | 
			
		||||
                method: "POST",
 | 
			
		||||
                url: url,
 | 
			
		||||
                data: JSON.stringify(tagIdDevList),
 | 
			
		||||
                cache: false,
 | 
			
		||||
                async: false,
 | 
			
		||||
                contentType: "application/json; charset=UTF-8",
 | 
			
		||||
                dataType: 'json',
 | 
			
		||||
                success: function (rel) {
 | 
			
		||||
                    //$("#save-building-btn").html('確定').attr("disabled", false);
 | 
			
		||||
                    if (rel.code != "0000") {
 | 
			
		||||
                        if (rel.code == "9999") {
 | 
			
		||||
                            //toast_error(rel.msg);
 | 
			
		||||
                            console.log(rel.msg);
 | 
			
		||||
                        }
 | 
			
		||||
                        else {
 | 
			
		||||
                            //toast_warning(rel.msg);
 | 
			
		||||
                            console.log(rel.msg);
 | 
			
		||||
                        }
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        //toast_ok(rel.msg);
 | 
			
		||||
                        console.log(rel.msg);
 | 
			
		||||
                        //buildInfoTable.ajax.reload(null, false);
 | 
			
		||||
                        //$('#build-modal').modal('hide');
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                fail: function (xhr, status, error) {
 | 
			
		||||
                    //$("#save-building-btn").html('確定').attr("disabled", false);
 | 
			
		||||
                    //toast_error(rel.msg);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										88
									
								
								Backend/wwwroot/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Backend/wwwroot/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,88 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
    <title>Autodesk Forge Tutorial</title>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="shortcut icon" href="https://github.com/Autodesk-Forge/learn.forge.viewmodels/raw/master/img/favicon.ico">
 | 
			
		||||
    <!-- Common packages: jQuery, Bootstrap, jsTree -->
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
 | 
			
		||||
    <script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/jstree.min.js"></script>
 | 
			
		||||
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
 | 
			
		||||
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/themes/default/style.min.css" />
 | 
			
		||||
    <!-- Autodesk Forge Viewer files -->
 | 
			
		||||
    <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css" type="text/css">
 | 
			
		||||
    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script>
 | 
			
		||||
    <!-- this project files -->
 | 
			
		||||
    <link href="css/forge/main.css" rel="stylesheet" />
 | 
			
		||||
    <script src="js/forge/ForgeTree.js"></script>
 | 
			
		||||
    <script src="js/forge/ForgeViewer.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
    <!-- Fixed navbar by Bootstrap: https://getbootstrap.com/examples/navbar-fixed-top/ -->
 | 
			
		||||
    <nav class="navbar navbar-default navbar-fixed-top">
 | 
			
		||||
        <div class="container-fluid">
 | 
			
		||||
            <ul class="nav navbar-nav left">
 | 
			
		||||
                <li>
 | 
			
		||||
                    <a href="http://developer.autodesk.com" target="_blank">
 | 
			
		||||
                        <img alt="Autodesk Forge" src="//developer.static.autodesk.com/images/logo_forge-2-line.png" height="20">
 | 
			
		||||
                    </a>
 | 
			
		||||
                </li>
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    </nav>
 | 
			
		||||
    <!-- End of navbar -->
 | 
			
		||||
    <div class="container-fluid fill">
 | 
			
		||||
        <div class="row fill">
 | 
			
		||||
            <div class="col-sm-4 fill">
 | 
			
		||||
                <div class="panel panel-default fill">
 | 
			
		||||
                    <div class="panel-heading" data-toggle="tooltip">
 | 
			
		||||
                        Buckets & Objects
 | 
			
		||||
                        <span id="refreshBuckets" class="glyphicon glyphicon-refresh" style="cursor: pointer"></span>
 | 
			
		||||
                        <button class="btn btn-xs btn-info" style="float: right" id="showFormCreateBucket" data-toggle="modal" data-target="#createBucketModal">
 | 
			
		||||
                            <span class="glyphicon glyphicon-folder-close"></span> New bucket
 | 
			
		||||
                        </button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div id="appBuckets">
 | 
			
		||||
                        tree here
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="col-sm-8 fill">
 | 
			
		||||
                <div id="forgeViewer"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <form id="uploadFile" method='post' enctype="multipart/form-data">
 | 
			
		||||
        <input id="hiddenUploadField" type="file" name="theFile" style="visibility:hidden" />
 | 
			
		||||
    </form>
 | 
			
		||||
    <!-- Modal Create Bucket -->
 | 
			
		||||
    <div class="modal fade" id="createBucketModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
 | 
			
		||||
        <div class="modal-dialog" role="document">
 | 
			
		||||
            <div class="modal-content">
 | 
			
		||||
                <div class="modal-header">
 | 
			
		||||
                    <button type="button" class="close" data-dismiss="modal" aria-label="Cancel">
 | 
			
		||||
                        <span aria-hidden="true">×</span>
 | 
			
		||||
                    </button>
 | 
			
		||||
                    <h4 class="modal-title" id="myModalLabel">Create new bucket</h4>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="modal-body">
 | 
			
		||||
                    <input type="text" id="newBucketKey" class="form-control"> For demonstration purposes, objects (files)
 | 
			
		||||
                    are NOT automatically translated. After you upload, right click on
 | 
			
		||||
                    the object and select "Translate". Note: Technically your bucket name is required to be globally unique across
 | 
			
		||||
                    the entire platform - to keep things simple with this tutorial your client ID will be prepended by default to
 | 
			
		||||
                    your bucket name and in turn masked by the UI so you only have to make sure your bucket name is unique within
 | 
			
		||||
                    your current Forge app.
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="modal-footer">
 | 
			
		||||
                    <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
 | 
			
		||||
                    <button type="button" class="btn btn-primary" id="createNewBucket">Go ahead, create the bucket</button>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										1463
									
								
								Backend/wwwroot/js/forge/ForgeDemo.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1463
									
								
								Backend/wwwroot/js/forge/ForgeDemo.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										166
									
								
								Backend/wwwroot/js/forge/ForgeTree.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								Backend/wwwroot/js/forge/ForgeTree.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,166 @@
 | 
			
		||||
 | 
			
		||||
$(document).ready(function () {
 | 
			
		||||
    prepareAppBucketTree();
 | 
			
		||||
    $('#refreshBuckets').click(function () {
 | 
			
		||||
        $('#appBuckets').jstree(true).refresh();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('#createNewBucket').click(function () {
 | 
			
		||||
        createNewBucket();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('#createBucketModal').on('shown.bs.modal', function () {
 | 
			
		||||
        $("#newBucketKey").focus();
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    $('#hiddenUploadField').change(function () {
 | 
			
		||||
        var node = $('#appBuckets').jstree(true).get_selected(true)[0];
 | 
			
		||||
        var _this = this;
 | 
			
		||||
        if (_this.files.length == 0) return;
 | 
			
		||||
        var file = _this.files[0];
 | 
			
		||||
        switch (node.type) {
 | 
			
		||||
            case 'bucket':
 | 
			
		||||
                var formData = new FormData();
 | 
			
		||||
                formData.append('fileToUpload', file);
 | 
			
		||||
                formData.append('bucketKey', node.id);
 | 
			
		||||
 | 
			
		||||
                $.ajax({
 | 
			
		||||
                    url: '/api/forge/oss/objects',
 | 
			
		||||
                    data: formData,
 | 
			
		||||
                    processData: false,
 | 
			
		||||
                    contentType: false,
 | 
			
		||||
                    type: 'POST',
 | 
			
		||||
                    success: function (data) {
 | 
			
		||||
                        $('#appBuckets').jstree(true).refresh_node(node);
 | 
			
		||||
                        _this.value = '';
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function createNewBucket() {
 | 
			
		||||
    var bucketKey = $('#newBucketKey').val();
 | 
			
		||||
    var policyKey = $('#newBucketPolicyKey').val();
 | 
			
		||||
    jQuery.post({
 | 
			
		||||
        url: '/api/forge/oss/buckets',
 | 
			
		||||
        contentType: 'application/json',
 | 
			
		||||
        data: JSON.stringify({ 'bucketKey': bucketKey, 'policyKey': policyKey }),
 | 
			
		||||
        success: function (res) {
 | 
			
		||||
            $('#appBuckets').jstree(true).refresh();
 | 
			
		||||
            $('#createBucketModal').modal('toggle');
 | 
			
		||||
        },
 | 
			
		||||
        error: function (err) {
 | 
			
		||||
            if (err.status == 409)
 | 
			
		||||
                alert('Bucket already exists - 409: Duplicated')
 | 
			
		||||
            console.log(err);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function prepareAppBucketTree() {
 | 
			
		||||
    $('#appBuckets').jstree({
 | 
			
		||||
        'core': {
 | 
			
		||||
            'themes': { "icons": true },
 | 
			
		||||
            'data': {
 | 
			
		||||
                "url": '/api/forge/oss/buckets',
 | 
			
		||||
                "dataType": "json",
 | 
			
		||||
                'multiple': false,
 | 
			
		||||
                "data": function (node) {
 | 
			
		||||
                    return { "id": node.id };
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        'types': {
 | 
			
		||||
            'default': {
 | 
			
		||||
                'icon': 'glyphicon glyphicon-question-sign'
 | 
			
		||||
            },
 | 
			
		||||
            '#': {
 | 
			
		||||
                'icon': 'glyphicon glyphicon-cloud'
 | 
			
		||||
            },
 | 
			
		||||
            'bucket': {
 | 
			
		||||
                'icon': 'glyphicon glyphicon-folder-open'
 | 
			
		||||
            },
 | 
			
		||||
            'object': {
 | 
			
		||||
                'icon': 'glyphicon glyphicon-file'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "plugins": ["types", "state", "sort", "contextmenu"],
 | 
			
		||||
        contextmenu: { items: autodeskCustomMenu }
 | 
			
		||||
    }).on('loaded.jstree', function () {
 | 
			
		||||
        $('#appBuckets').jstree('open_all');
 | 
			
		||||
    }).bind("activate_node.jstree", function (evt, data) {
 | 
			
		||||
        if (data != null && data.node != null && data.node.type == 'object') {
 | 
			
		||||
            $("#forgeViewer").empty();
 | 
			
		||||
            var urn = data.node.id;
 | 
			
		||||
            getForgeToken(function (access_token) {
 | 
			
		||||
                jQuery.ajax({
 | 
			
		||||
                    url: 'https://developer.api.autodesk.com/modelderivative/v2/designdata/' + urn + '/manifest',
 | 
			
		||||
                    headers: { 'Authorization': 'Bearer ' + access_token },
 | 
			
		||||
                    success: function (res) {
 | 
			
		||||
                        if (res.progress === 'success' || res.progress === 'complete') launchViewer(urn);
 | 
			
		||||
                        else $("#forgeViewer").html('The translation job still running: ' + res.progress + '. Please try again in a moment.');
 | 
			
		||||
                    },
 | 
			
		||||
                    error: function (err) {
 | 
			
		||||
                        var msgButton = 'This file is not translated yet! ' +
 | 
			
		||||
                            '<button class="btn btn-xs btn-info" onclick="translateObject()"><span class="glyphicon glyphicon-eye-open"></span> ' +
 | 
			
		||||
                            'Start translation</button>'
 | 
			
		||||
                        $("#forgeViewer").html(msgButton);
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function autodeskCustomMenu(autodeskNode) {
 | 
			
		||||
    var items;
 | 
			
		||||
 | 
			
		||||
    switch (autodeskNode.type) {
 | 
			
		||||
        case "bucket":
 | 
			
		||||
            items = {
 | 
			
		||||
                uploadFile: {
 | 
			
		||||
                    label: "Upload file",
 | 
			
		||||
                    action: function () {
 | 
			
		||||
                        uploadFile();
 | 
			
		||||
                    },
 | 
			
		||||
                    icon: 'glyphicon glyphicon-cloud-upload'
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
            break;
 | 
			
		||||
        case "object":
 | 
			
		||||
            items = {
 | 
			
		||||
                translateFile: {
 | 
			
		||||
                    label: "Translate",
 | 
			
		||||
                    action: function () {
 | 
			
		||||
                        var treeNode = $('#appBuckets').jstree(true).get_selected(true)[0];
 | 
			
		||||
                        translateObject(treeNode);
 | 
			
		||||
                    },
 | 
			
		||||
                    icon: 'glyphicon glyphicon-eye-open'
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return items;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function uploadFile() {
 | 
			
		||||
    $('#hiddenUploadField').click();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function translateObject(node) {
 | 
			
		||||
    $("#forgeViewer").empty();
 | 
			
		||||
    if (node == null) node = $('#appBuckets').jstree(true).get_selected(true)[0];
 | 
			
		||||
    var bucketKey = node.parents[0];
 | 
			
		||||
    var objectKey = node.id;
 | 
			
		||||
    jQuery.post({
 | 
			
		||||
        url: '/api/forge/modelderivative/jobs',
 | 
			
		||||
        contentType: 'application/json',
 | 
			
		||||
        data: JSON.stringify({ 'bucketKey': bucketKey, 'objectName': objectKey }),
 | 
			
		||||
        success: function (res) {
 | 
			
		||||
            $("#forgeViewer").html('Translation started! Please try again in a moment.');
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								Backend/wwwroot/js/forge/ForgeViewer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Backend/wwwroot/js/forge/ForgeViewer.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
 | 
			
		||||
var viewer;
 | 
			
		||||
 | 
			
		||||
function launchViewer(urn) {
 | 
			
		||||
    var options = {
 | 
			
		||||
        env: 'AutodeskProduction',
 | 
			
		||||
        getAccessToken: getForgeToken
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    Autodesk.Viewing.Initializer(options, () => {
 | 
			
		||||
        viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
 | 
			
		||||
        viewer.start();
 | 
			
		||||
        var documentId = 'urn:' + urn;
 | 
			
		||||
        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onDocumentLoadSuccess(doc) {
 | 
			
		||||
    var viewables = doc.getRoot().getDefaultGeometry();
 | 
			
		||||
    viewer.loadDocumentNode(doc, viewables).then(i => {
 | 
			
		||||
        // documented loaded, any action?
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onDocumentLoadFailure(viewerErrorCode) {
 | 
			
		||||
    console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getForgeToken(callback) {
 | 
			
		||||
    fetch('/api/forge/oauth/token').then(res => {
 | 
			
		||||
        res.json().then(data => {
 | 
			
		||||
            callback(data.access_token, data.expires_in);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
@ -227,8 +227,14 @@
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMjkubndj');
 | 
			
		||||
 | 
			
		||||
            //12.29 整棟
 | 
			
		||||
            launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
 | 
			
		||||
 | 
			
		||||
            //12.30 整棟樓 ARC + MEP
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q');
 | 
			
		||||
 | 
			
		||||
            //12.30 整棟樓 ARC + MEP 半透明
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
 | 
			
		||||
            launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
 | 
			
		||||
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
 | 
			
		||||
 | 
			
		||||
@ -172,7 +172,7 @@ function onDocumentLoadSuccess(doc) {
 | 
			
		||||
    const fragList = model.getFragmentList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
     /*loadHeatmaps(model);*/
 | 
			
		||||
     loadHeatmaps(model);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -270,11 +270,11 @@ function onDocumentLoadSuccess(doc) {
 | 
			
		||||
            e.properties.forEach(function (item) {
 | 
			
		||||
                if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
 | 
			
		||||
                    if (item.displayValue != "") {
 | 
			
		||||
                        //if ((item.displayValue).indexOf('TPE_B1_EE_E4') > -1) {
 | 
			
		||||
                        if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) {
 | 
			
		||||
                            console.log("--------------------------------------------------");
 | 
			
		||||
                            console.log("Tag_name dbid: " + e.dbId);
 | 
			
		||||
                            console.log("value: " + item.displayValue);
 | 
			
		||||
                        //}
 | 
			
		||||
                        }
 | 
			
		||||
                        //var v = getFragmentWorldMatrixByNodeId(e.dbId, viewer);
 | 
			
		||||
                        //console.log("v: " + v);
 | 
			
		||||
 | 
			
		||||
@ -295,10 +295,10 @@ function onDocumentLoadSuccess(doc) {
 | 
			
		||||
                            bounds.union(box);
 | 
			
		||||
                        }, true);
 | 
			
		||||
                        var position = bounds.center();
 | 
			
		||||
                        //if ((item.displayValue).indexOf('TPE_B1_EE_E4') > -1) {
 | 
			
		||||
                        if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) {
 | 
			
		||||
                        console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
 | 
			
		||||
                        console.log("--------------------------------------------------");
 | 
			
		||||
                        //}
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    //getFragmentWorldMatrixByNodeId(e.dbId, viewer);
 | 
			
		||||
                    //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
 | 
			
		||||
@ -1067,19 +1067,19 @@ async function loadHeatmaps(model) {
 | 
			
		||||
    //x: -17.33, y: 51.03, z: -2.52
 | 
			
		||||
    const devices = [
 | 
			
		||||
        {
 | 
			
		||||
            id: "Oficina 5",
 | 
			
		||||
            id: "Oficina 3",
 | 
			
		||||
            //name: "Oficina-",
 | 
			
		||||
            position: { x: 6.98, y: -19.00, z: 16.86 }, // x: 0, y: 25, z: -2.5      (-4.93, -20.61, 16.86)
 | 
			
		||||
            sensorTypes: ["temperature", "humidity"]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            id: "Oficina 4",
 | 
			
		||||
            id: "Oficina 2",
 | 
			
		||||
            //name: "Oficina-",
 | 
			
		||||
            position: { x: 35.85, y: -2.24, z: 16.86 }, // x: 0, y: 25.03, z: -2.52  (23.94, -3.85, 16.86)
 | 
			
		||||
            sensorTypes: ["temperature", "humidity"]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            id: "Oficina 3",
 | 
			
		||||
            id: "Oficina 1",
 | 
			
		||||
            //name: "Oficina-",
 | 
			
		||||
            position: { x: 6.98, y: -2.24, z: 16.86 }, // x: 0, y: 25.03, z: -2.52   (-4.93, -3.85, 16.86)
 | 
			
		||||
            sensorTypes: ["temperature", "humidity"]
 | 
			
		||||
@ -1130,7 +1130,7 @@ async function loadHeatmaps(model) {
 | 
			
		||||
    //    },
 | 
			
		||||
    //    true
 | 
			
		||||
    //);
 | 
			
		||||
    roomDbIds.push(7567);//5113 834 838 8106 8177 792 8181
 | 
			
		||||
    roomDbIds.push(11449);//5113 834 838 8106 8177 792 8181 7567
 | 
			
		||||
    //roomDbIds.push(8183);
 | 
			
		||||
    //roomDbIds.push(8185);
 | 
			
		||||
 | 
			
		||||
@ -1166,9 +1166,11 @@ async function loadHeatmaps(model) {
 | 
			
		||||
    dataVizExtn.registerSurfaceShadingColors("temperature", [0xff0000, 0x0000ff]);
 | 
			
		||||
 | 
			
		||||
    function getSensorValue(device, sensorType) {
 | 
			
		||||
        return sensorVals[parseInt(device.id.slice(-1)) - 1];
 | 
			
		||||
        return sensorVals[parseInt(device.id.slice(-1)) - 1]; // 值: 0~1之間
 | 
			
		||||
        //return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    dataVizExtn.renderSurfaceShading("Room Panel", "temperature", getSensorValue);
 | 
			
		||||
 | 
			
		||||
    setInterval(() => {
 | 
			
		||||
@ -1336,7 +1338,7 @@ async function test() {
 | 
			
		||||
 | 
			
		||||
        if (material) {
 | 
			
		||||
            //设置透明度
 | 
			
		||||
            material.opacity = 0.5;
 | 
			
		||||
            material.opacity = 0;
 | 
			
		||||
            material.transparent = true;
 | 
			
		||||
            //标记更新
 | 
			
		||||
            material.needsUpdate = true
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user