This commit is contained in:
dev02 2023-01-04 09:14:04 +08:00
commit 84bddaaa94
8 changed files with 432 additions and 462 deletions

View File

@ -761,13 +761,42 @@ namespace Backend.Controllers
{ {
if (post.Count > 0) if (post.Count > 0)
{ {
//清空device_node資料表
//await backendRepository.TruncateTable("device_node");
//int node_priority = 1;
foreach(var idfc in post) foreach(var idfc in post)
{ {
//if(idfc.device_number.IndexOf("_LT_L1") > -1)
//{
// //取得device_guid
// var sWhere = $@"where deleted = 0 and device_number = " + idfc.device_number;
// var device_guid = await backendRepository.GetOneAsync<string>("device_node", sWhere, "device_guid");
// //燈具
// Dictionary<string, object> device = new Dictionary<string, object>();
// device.Add("@device_node_guid", Guid.NewGuid());
// device.Add("@deleted", 0);
// device.Add("@device_guid", device_guid);
// device.Add("@device_node_coordinate_3d", idfc.device_coordinate_3d);
// device.Add("@forge_dbid", idfc.forge_dbid);
// device.Add("@priority", node_priority);
// device.Add("@created_by", myUserInfo.Userinfo_guid);
// device.Add("@created_at", DateTime.Now);
// node_priority++;
// await backendRepository.AddOneByCustomTableReturnId(device, "device_node", false);
//}
//else
//{
Dictionary<string, object> device = new Dictionary<string, object>(); Dictionary<string, object> device = new Dictionary<string, object>();
device.Add("@device_coordinate_3d", idfc.device_coordinate_3d); device.Add("@device_coordinate_3d", idfc.device_coordinate_3d);
device.Add("@forge_dbid", idfc.forge_dbid); device.Add("@forge_dbid", idfc.forge_dbid);
await backendRepository.UpdateOneByCustomTable(device, "device", $@" device_number = '{idfc.device_number}'"); await backendRepository.UpdateOneByCustomTable(device, "device", $@" device_number = '{idfc.device_number}'");
//}
} }
} }
apiResult.Code = "0000"; apiResult.Code = "0000";

View File

@ -1,93 +0,0 @@
<!--<!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 &amp; 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">&times;</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>-->

View File

@ -7,16 +7,20 @@
<div class="row"> <div class="row">
<div class="col-2"> <div class="col-2">
<div class="row d-inline-block col-12 alert alert-secondary p-1 px-2 mb-0">
<span><i class="fas fa-exclamation-circle mr-2"></i>按右鍵即可展開選單</span>
</div>
<div class="row d-inline-block col-12 p-0 my-2 text-center"> <div class="row d-inline-block col-12 p-0 my-2 text-center">
<input id="graCatSearch" name="graCatSearch" type="text" class="form-control form-control-sm d-inline-block" placeholder="搜尋" /> <input id="graCatSearch" name="graCatSearch" type="text" class="form-control form-control-sm d-inline-block" placeholder="搜尋" />
</div> </div>
<div class="d-flex" id="graTree"></div> <div class="d-flex" id="graTree"></div>
</div> </div>
<div class="col-10"> <div class="col-10">
<div class="my-2"> <div class="row my-2">
<a href="javascript:;" id="creGraMan" class="btn btn-success"> <a href="javascript:;" id="creGraMan" class="btn btn-success">
+新增 +新增
</a> </a>
<label id="curLevText" class="ml-3 mb-0 row m-0 align-items-center fs-1"></label>
</div> </div>
<table id="graTable" class="table table-bordered table-striped text-center m-0"> <table id="graTable" class="table table-bordered table-striped text-center m-0">
@ -42,7 +46,7 @@
<form id="uploadForm"> <form id="uploadForm">
<div class="modal-body"> <div class="modal-body">
<div class="row"> <div class="row">
<div class="col-md-6"> <!--<div class="col-md-6">
<div class="form-group"> <div class="form-group">
<label class="form-label" for="upPicNum">圖號</label> <label class="form-label" for="upPicNum">圖號</label>
<input type="text" id="graPicNum" name="graPicNum" class="form-control"> <input type="text" id="graPicNum" name="graPicNum" class="form-control">
@ -53,14 +57,14 @@
<label class="form-label" for="upPicName">圖名</label> <label class="form-label" for="upPicName">圖名</label>
<input type="text" id="graPicName" name="graPicName" class="form-control"> <input type="text" id="graPicName" name="graPicName" class="form-control">
</div> </div>
</div> </div>-->
<div class="col-md-6 mt-3"> <div class="col-md-6">
<div class="form-group"> <div class="form-group">
<label class="form-label" for="graSelMain">圖資類別</label> <label class="form-label" for="graSelMain">圖資類別</label>
<label id="graLayer" class="m-0 fs-1 col-12 p-0"></label> <label id="graLayer" class="m-0 fs-1 col-12 p-0"></label>
</div> </div>
</div> </div>
<div class="col-md-12 mt-6"> <div class="col-md-12 mt-2">
<label>原設計</label> <label>原設計</label>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
@ -82,7 +86,7 @@
</div> </div>
</div> </div>
<div class="col-md-12 mt-3"> <!--<div class="col-md-12 mt-3">
<label>竣工圖</label> <label>竣工圖</label>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
@ -100,7 +104,7 @@
<input name="file" type="file" multiple /> <input name="file" type="file" multiple />
</div> </div>
</div> </div>
</div> </div>-->
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
@ -159,39 +163,25 @@
let tag = "#graTable"; let tag = "#graTable";
let column_defs = [ let column_defs = [
{ "targets": [0], "width": "10%", "sortable": true }, { "targets": [0], "width": "20%", "sortable": true },
{ "targets": [1], "width": "25%", "sortable": true }, { "targets": [1], "width": "60%", "sortable": true },
{ "targets": [2], "width": "25%", "sortable": true }, { "targets": [2], "width": "20%", "sortable": true },
{ "targets": [3], "width": "25%", "sortable": true },
{ "targets": [4], "width": "15%", "sortable": false },
]; ];
let columns = [ let columns = [
{ {
"title": "號", "title": "號",
"data": "code", "data": "id",
}, },
{ {
"title": "圖名", "title": "檔案",
"data": "name",
},
{
"title": "原設計",
"data": "oriOrgName", "data": "oriOrgName",
"render": function (data, type, row, meta) { "render": function (data, type, row, meta) {
return `<a id="oriDwgDown${row.id}" href="javascript:;">${row.oriOrgName ?? ""}</a>`; return `<a id="oriDwgDown${row.id}" href="javascript:;">${row.oriOrgName ?? ""}</a>`;
} }
}, },
{
"title": "竣工圖",
"data": "donOrgName",
"render": function (data, type, row, meta) {
return `<a id="donDwgDown${row.id}" href="javascript:;">${row.donOrgName ?? ""}</a>`;
}
},
{ {
"title": "功能", "title": "功能",
"data": "id", "data": "id",
@ -246,25 +236,25 @@
}; };
uploader.graMyDesignDiagram = $("#graMyDesignDiagram").dropzone(option); uploader.graMyDesignDiagram = $("#graMyDesignDiagram").dropzone(option);
uploader.graMyAsBuilt = $("#graMyAsBuilt").dropzone(option); /*uploader.graMyAsBuilt = $("#graMyAsBuilt").dropzone(option);*/
uploader["graMyDesignDiagram"][0].dropzone.on("addedfile", file => { uploader["graMyDesignDiagram"][0].dropzone.on("addedfile", file => {
uploadFiles["graMyDesignDiagram"] = file; uploadFiles["graMyDesignDiagram"] = file;
}) })
uploader["graMyAsBuilt"][0].dropzone.on("addedfile", file => { //uploader["graMyAsBuilt"][0].dropzone.on("addedfile", file => {
uploadFiles["graMyAsBuilt"] = file; // uploadFiles["graMyAsBuilt"] = file;
}) //})
uploader["graMyDesignDiagram"][0].dropzone.on("removedfile", file => { uploader["graMyDesignDiagram"][0].dropzone.on("removedfile", file => {
uploadFiles["graMyDesignDiagram"] = {}; uploadFiles["graMyDesignDiagram"] = {};
file.previewElement.remove(); file.previewElement.remove();
}) })
uploader["graMyAsBuilt"][0].dropzone.on("removedfile", file => { //uploader["graMyAsBuilt"][0].dropzone.on("removedfile", file => {
uploadFiles["graMyAsBuilt"] = {}; // uploadFiles["graMyAsBuilt"] = {};
file.previewElement.remove(); // file.previewElement.remove();
}) //})
} }
// 新增資料 // 新增資料
@ -319,8 +309,6 @@
fileHelper.readAndPreviewImages(this.files, 'upForAsBuilt', 0, 86, '<div class="file-item">', '<button class="del-small-trash" name="btnDelImg" ><i class="fa fa-times"></i></button></div>'); fileHelper.readAndPreviewImages(this.files, 'upForAsBuilt', 0, 86, '<div class="file-item">', '<button class="del-small-trash" name="btnDelImg" ><i class="fa fa-times"></i></button></div>');
}); });
// 關閉 modal // 關閉 modal
$('#uploadPicture').on('hidden.bs.modal', function (e) { $('#uploadPicture').on('hidden.bs.modal', function (e) {
console.log("123456789"); console.log("123456789");
@ -349,11 +337,11 @@
$("#graPicNum").val(""); $("#graPicNum").val("");
$("#graPicName").val(""); $("#graPicName").val("");
uploadFiles["graMyDesignDiagram"] = {}; uploadFiles["graMyDesignDiagram"] = {};
uploadFiles["graMyAsBuilt"] = {}; /*uploadFiles["graMyAsBuilt"] = {};*/
uploader["graMyDesignDiagram"][0].dropzone.removeAllFiles(true); uploader["graMyDesignDiagram"][0].dropzone.removeAllFiles(true);
$("#graMyDesignDiagram .dz-preview").remove(); $("#graMyDesignDiagram .dz-preview").remove();
uploader["graMyAsBuilt"][0].dropzone.removeAllFiles(true); //uploader["graMyAsBuilt"][0].dropzone.removeAllFiles(true);
$("#graMyAsBuilt .dz-preview").remove(); //$("#graMyAsBuilt .dz-preview").remove();
}) })
function getGraCatList(callback) { function getGraCatList(callback) {
@ -365,18 +353,19 @@
} else { } else {
res.data.forEach(x => x.parent = x.system_parent_id); res.data.forEach(x => x.parent = x.system_parent_id);
res.data.forEach(x => x.text = x.system_key); res.data.forEach(x => x.text = x.system_key);
res.data.forEach(x => x.parent = x.parent == 0 ? "#" : x.parent); res.data.forEach(x => x.parent = x.parent);
callback ? callback(res.data) : ""; callback ? callback(res.data) : "";
} }
}, null, "POST").send(); }, null, "POST").send();
} }
function initTree(data) { function initTree(data) {
treeEvent(); treeEvent();
let option = { let option = {
core: { core: {
"check_callback": true, "check_callback": true,
data: data, data: setTreeData(data),
themes: { themes: {
name: "default-dark" name: "default-dark"
}, },
@ -440,6 +429,7 @@
$('#graTree').on("loaded.jstree", function (e, data) { $('#graTree').on("loaded.jstree", function (e, data) {
let topNode = $('#graTree').jstree(true).get_node("#"); let topNode = $('#graTree').jstree(true).get_node("#");
$('#graTree').jstree(true).select_node(topNode.children[0]); $('#graTree').jstree(true).select_node(topNode.children[0]);
$("#graTree").jstree("open_node", 0);
}) })
$('#graTree').on("select_node.jstree", function (e, data) { $('#graTree').on("select_node.jstree", function (e, data) {
dtAjaxResetSendData(graTable, { layer_id: parseInt(data.node.id) }); dtAjaxResetSendData(graTable, { layer_id: parseInt(data.node.id) });
@ -447,6 +437,7 @@
curLayerId = parseInt(data.node.id); curLayerId = parseInt(data.node.id);
$("#graLayer").text(levelNameByNodeId(data.node)); $("#graLayer").text(levelNameByNodeId(data.node));
$("#curLevText").text(levelNameByNodeId(data.node));
}) })
$("#graTree").on('create_node.jstree', function (e, data) { $("#graTree").on('create_node.jstree', function (e, data) {
let main = {}; let main = {};
@ -479,7 +470,7 @@
toast_error(res.msg || common.SysErr); toast_error(res.msg || common.SysErr);
} else { } else {
getGraCatList((graCatData) => { getGraCatList((graCatData) => {
data.instance.settings.core.data = graCatData; data.instance.settings.core.data = setTreeData(graCatData);
data.instance.refresh(true); data.instance.refresh(true);
}) })
} }
@ -509,6 +500,12 @@
}) })
} }
function setTreeData(dataList) {
let parent = { parent: "#", text: "圖資管理", id: 0 };
dataList.push(parent);
return dataList;
}
function readGraph(id) { function readGraph(id) {
let url = baseApiUrl + "/GraphManage/GraManRead"; let url = baseApiUrl + "/GraphManage/GraManRead";
objSendData.Data = { id: parseInt(id) }; objSendData.Data = { id: parseInt(id) };
@ -527,10 +524,10 @@
fileObj = { name: res.data?.oriOrgName, dataUrl: baseApiUrl + varGraPath + res.data?.oriSavName, savename: res.data?.oriSavName, size: res.data?.oriSize }; fileObj = { name: res.data?.oriOrgName, dataUrl: baseApiUrl + varGraPath + res.data?.oriSavName, savename: res.data?.oriSavName, size: res.data?.oriSize };
uploader["graMyDesignDiagram"][0].dropzone?.displayExistingFile(fileObj); uploader["graMyDesignDiagram"][0].dropzone?.displayExistingFile(fileObj);
} }
if (res.data?.donSavName != null) { //if (res.data?.donSavName != null) {
fileObj = { name: res.data?.donOrgName, dataUrl: baseApiUrl + varGraPath + res.data?.donSavName, savename: res.data?.donSavName, size: res.data?.donSize }; // fileObj = { name: res.data?.donOrgName, dataUrl: baseApiUrl + varGraPath + res.data?.donSavName, savename: res.data?.donSavName, size: res.data?.donSize };
uploader["graMyAsBuilt"][0].dropzone?.displayExistingFile(fileObj); // uploader["graMyAsBuilt"][0].dropzone?.displayExistingFile(fileObj);
} //}
} }
}, null, "POST").send(); }, null, "POST").send();
@ -539,13 +536,14 @@
function levelNameByNodeId(node) { function levelNameByNodeId(node) {
let names = []; let names = [];
let curNode = $('#graTree').jstree(true).get_node(node); let curNode = $('#graTree').jstree(true).get_node(node);
let parents = curNode.parents.reverse();
$.each(curNode.parents, (idx, nodeId) => { for (let i = parents.length - 1; i >= 0; i--) {
if (nodeId != "#") { if (parents[i] != "#") {
let node = $('#graTree').jstree(true).get_node(nodeId); let node = $('#graTree').jstree(true).get_node(parents[i]);
names.push(node.text); names.push(node.text);
} }
}) }
names.push(curNode.text); names.push(curNode.text);
return names.join("/"); return names.join("/");
@ -556,17 +554,17 @@
let cookies = new YourTeam.Utility.Cookie(); let cookies = new YourTeam.Utility.Cookie();
let url = ""; let url = "";
let graMyDesDiaFile = uploader["graMyDesignDiagram"][0].dropzone.files.filter(x => x.accepted == true)[0]; let graMyDesDiaFile = uploader["graMyDesignDiagram"][0].dropzone.files.filter(x => x.accepted == true)[0];
let graMyAsBuiFile = uploader["graMyAsBuilt"][0].dropzone.files.filter(x => x.accepted == true)[0]; /*let graMyAsBuiFile = uploader["graMyAsBuilt"][0].dropzone.files.filter(x => x.accepted == true)[0];*/
let fd = new FormData(); let fd = new FormData();
fd.append("code", $("#graPicNum").val()); fd.append("code", $("#graPicNum").val());
fd.append("layer_id", curLayerId); fd.append("layer_id", curLayerId);
fd.append("name", $("#graPicName").val()); fd.append("name", $("#graPicName").val());
fd.append("oriOrgName", graMyDesDiaFile?.name ?? null); fd.append("oriOrgName", graMyDesDiaFile?.name ?? null);
fd.append("donOrgName", graMyAsBuiFile?.name ?? null); /*fd.append("donOrgName", graMyAsBuiFile?.name ?? null);*/
fd.append("oriSavName", graMyDesDiaFile?.savename ?? null); fd.append("oriSavName", graMyDesDiaFile?.savename ?? null);
fd.append("donSavName", graMyAsBuiFile?.savename ?? null); /*fd.append("donSavName", graMyAsBuiFile?.savename ?? null);*/
fd.append("oriFile", graMyDesDiaFile?.savename ? null : graMyDesDiaFile ?? null); fd.append("oriFile", graMyDesDiaFile?.savename ? null : graMyDesDiaFile ?? null);
fd.append("donFile", graMyAsBuiFile?.savename ? null : graMyAsBuiFile ?? null); /*fd.append("donFile", graMyAsBuiFile?.savename ? null : graMyAsBuiFile ?? null);*/
if (curActGraid == 0) { if (curActGraid == 0) {
url = baseApiUrl + "/GraphManage/SaveGraMan"; url = baseApiUrl + "/GraphManage/SaveGraMan";

View File

@ -17,7 +17,7 @@
<p style="text-align: center; font-weight: bold;">Robot Controls</p> <p style="text-align: center; font-weight: bold;">Robot Controls</p>
<p id="id_printer">Selected_ID: </p> <p id="id_printer">Selected_ID: </p>
<p id="all_id">All_ID: </p> <p id="all_id">All_ID: </p>
<button id="1F1oor" onclick="move1Floor()">1 Floor</button> <!--<button id="1F1oor" onclick="move1Floor()">1 Floor</button>
<button id="2F1oor" onclick="move2Floor()">2 Floor</button> <button id="2F1oor" onclick="move2Floor()">2 Floor</button>
<button id="3F1oor" onclick="move3Floor()">3 Floor</button> <button id="3F1oor" onclick="move3Floor()">3 Floor</button>
@ -30,7 +30,14 @@
<button id="10F1oor" onclick="move10Floor()">10 Floor</button> <button id="10F1oor" onclick="move10Floor()">10 Floor</button>
<button id="11F1oor" onclick="move11Floor()">11 Floor</button> <button id="11F1oor" onclick="move11Floor()">11 Floor</button>
<button id="12F1oor" onclick="move12Floor()">12 Floor</button> <button id="12F1oor" onclick="move12Floor()">12 Floor</button>
<button id="13F1oor" onclick="moveB1Floor()">B1 Floor</button> <button id="13F1oor" onclick="moveB1Floor()">B1 Floor</button>-->
<label>Intensity:</label><input id="LightIntensity" />
<label>Distance:</label><input id="LightDistance" />
<label>Angle:</label><input id="LightAngle" />
<label>Penumbra:</label><input id="LightPenumbra" />
<label>Decay:</label><input id="LightDecay" />
<button onclick="setLightValue()">設定燈光</button>
<button id="Light1" onclick="newALight()">新增燈光</button>
<button type="button" class="btn btn-secondary" onclick="openOrCloseLight()">電源</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-danger" onclick="changeColorHotspot()">變更熱點顏色</button>
<button type="button" class="btn btn-dark" onclick="loadHeatMap()">載入熱圖</button> <button type="button" class="btn btn-dark" onclick="loadHeatMap()">載入熱圖</button>
@ -184,6 +191,7 @@
<script> <script>
var curLightIsOpen = true; var curLightIsOpen = true;
var light;
$(document).ready(function () { $(document).ready(function () {
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDLm53ZA'); //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDLm53ZA');
@ -230,11 +238,11 @@
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk'); //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk');
//12.30 整棟樓 ARC + MEP //12.30 整棟樓 ARC + MEP
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q'); launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q');
//12.30 整棟樓 ARC + MEP 半透明 //12.30 整棟樓 ARC + MEP 半透明
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk'); //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk'); //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk');
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxXzIwMjJfMTJfMTMubndk');//new ARC
//launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP
@ -244,82 +252,96 @@
}); });
function move1Floor() { //function move1Floor() {
setElevatorSpeed(0.2); // setElevatorSpeed(0.2);
setElevatorFloor(0); // setElevatorFloor(0);
requestAnimationFrame(movElevator); // 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 newALight() {
//light = newLight();
//newLight();
} }
function move2Floor() { function setLightValue() {
setElevatorSpeed(0.2); var intensity = document.getElementById("LightIntensity").value;
setElevatorFloor(1); var distance = document.getElementById("LightDistance").value;
requestAnimationFrame(movElevator); var angle = document.getElementById("LightAngle").value;
} var penumbra = document.getElementById("LightPenumbra").value;
var decay = document.getElementById("LightDecay").value;
function move3Floor() { setLightValues(intensity, distance, angle, penumbra, decay);
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() { function changeLightPower() {
@ -329,13 +351,15 @@
} }
function openOrCloseLight() { function openOrCloseLight() {
if (light != null) {
if (curLightIsOpen) { if (curLightIsOpen) {
curLightIsOpen = false; curLightIsOpen = false;
setLightOpenOrClose(curLightIsOpen); setLightOpenOrClose(curLightIsOpen, light);
} }
else { else {
curLightIsOpen = true; curLightIsOpen = true;
setLightOpenOrClose(curLightIsOpen); setLightOpenOrClose(curLightIsOpen, light);
}
} }
} }

View File

@ -4,7 +4,8 @@ let fragProxy;
var targetFloorZ; var targetFloorZ;
var elevatorSpeed; var elevatorSpeed;
var selector = "#forgeViewer"; var selector = "#forgeViewer";
let myDataList; var myDataList;
var lightList = [];//燈光清單
var levels;//剖面用 var levels;//剖面用
var lowerIdx;//剖面的下方樓層 var lowerIdx;//剖面的下方樓層
var upperIdx;//剖面的上方樓層 var upperIdx;//剖面的上方樓層
@ -675,15 +676,7 @@ function hideColor(nodeId) {//顏色改成透明
} }
//------------------ 紀錄熱點座標 ---------------
function getHopspotPoint(data) {
//var av = Autodesk.Viewing;
myDataList = data;
//viewer.addEventListener(av.GEOMETRY_LOADED_EVENT, addHotPoint, {
// once: true,
//});
}
//-------------------- end ----------------------
//------------------- 加入熱點 ----------------- //------------------- 加入熱點 -----------------
async function addHotPoint(data) { async function addHotPoint(data) {
@ -714,10 +707,13 @@ async function addHotPoint(data) {
myDataList.forEach((myData, index) => { myDataList.forEach((myData, index) => {
const dbId = 10 + index; const dbId = 10 + index;
const myPosition = myData.position; const myPosition = JSON.parse(myData.device_coordinate_3d);
const viewable = new DataVizCore.SpriteViewable(myPosition, style, dbId); const viewable = new DataVizCore.SpriteViewable(myPosition, style, dbId);
myData._dbId = dbId; myData._dbId = dbId;
viewableData.addViewable(viewable); viewableData.addViewable(viewable);
if (myData.device_number.indexOf("_LT_L1_") > -1) {
lightList.push({ dbid: myData.forge_dbid, name: myData.device_number, spotLight: newLight(myPosition) });
}
}); });
await viewableData.finish(); await viewableData.finish();
@ -730,7 +726,6 @@ async function addHotPoint(data) {
if (event != undefined && event != null) { if (event != undefined && event != null) {
if (event.dbId >= dbIdStart && event.dbId <= dbIdEnd) {//event.dbId > 0 && event.dbId < 19 if (event.dbId >= dbIdStart && event.dbId <= dbIdEnd) {//event.dbId > 0 && event.dbId < 19
console.log(`Sprite clicked: ${event.dbId}`); console.log(`Sprite clicked: ${event.dbId}`);
openHotspotModal();
for (let i = dbIdStart; i <= dbIdEnd; i++) { for (let i = dbIdStart; i <= dbIdEnd; i++) {
changeColorForHotspot(i, false); changeColorForHotspot(i, false);
changeScaleForHotspot(i, false); changeScaleForHotspot(i, false);
@ -757,7 +752,6 @@ async function addHotPoint(data) {
// if (dbIds.length > 0) { // if (dbIds.length > 0) {
// // 處理已選取元件的邏輯 // // 處理已選取元件的邏輯
// $(selector).trigger("autodesk:click:sprite", event); // $(selector).trigger("autodesk:click:sprite", event);
// //openHotspotModal();
// console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z} // console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
// } else { // } else {
// // 處理沒有選取元件的邏輯 // // 處理沒有選取元件的邏輯
@ -802,49 +796,14 @@ async function changeScaleForHotspot(dbId, type = true) {
//------------------- end -------------- //------------------- end --------------
//----------------- 開關熱點小視窗 ---------------------- //------------------------------ 熱圖 ---------------------------------
function openHotspotModal() { async function loadHeatmaps(model, roomsArr) {
//var modal = document.getElementById("hotspotModal");
//modal.style.display = "block";
//$("#pills-register-tab").removeClass("active");
//$("#pills-alarm-tab").removeClass("active");
//$("#pills-operation-tab").removeClass("active");
//$("#pills-login-tab").tab("show");
}
function closeHotspotModal() {
//var modal = document.getElementById("hotspotModal");
//modal.style.display = "none";
}
//------------------ end --------------------------------
//------------------ 熱圖 -------------------------------
async function loadHeatmaps(model) {
const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization"); const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
var devices = [];
//取三個空調設備的位置打點 myDataList.forEach((myData, index) => {
const devices = [ devices.push({ id: index, position: JSON.parse(myData.device_coordinate_3d), sensorTypes: ["temperature", "humidity"] });
{ });
id: "Oficina 5",
//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",
//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",
//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"]
}
];
//冷氣N5: (-4.93, -20.61, 16.86), N4: (23.94, -3.85, 16.86), N3: (-4.93, -3.85, 16.86)
// Initialize sensor values // Initialize sensor values
let sensorVals = []; let sensorVals = [];
@ -853,7 +812,9 @@ async function loadHeatmaps(model) {
} }
const roomDbIds = []; const roomDbIds = [];
roomDbIds.push(7567); for (var i = 0; i < roomsArr.length; i++) {
roomDbIds.push(roomsArr[i]);
}
const { const {
SurfaceShadingData, SurfaceShadingData,
@ -878,11 +839,10 @@ async function loadHeatmaps(model) {
// Setup surface shading // Setup surface shading
await dataVizExtn.setupSurfaceShading(model, heatmapData); await dataVizExtn.setupSurfaceShading(model, heatmapData);
dataVizExtn.registerSurfaceShadingColors("temperature", [0xff0000, 0x0000ff]); dataVizExtn.registerSurfaceShadingColors("temperature", [0xff0000, 0x0000ff]);
function getSensorValue(device, sensorType) { function getSensorValue(device, sensorType) {
return sensorVals[parseInt(device.id.slice(-1)) - 1]; return sensorVals[parseInt(device.id)];
} }
dataVizExtn.renderSurfaceShading("Room Panel", "temperature", getSensorValue); dataVizExtn.renderSurfaceShading("Room Panel", "temperature", getSensorValue);
@ -895,95 +855,7 @@ async function loadHeatmaps(model) {
dataVizExtn.updateSurfaceShading(getSensorValue); dataVizExtn.updateSurfaceShading(getSensorValue);
}, 2000); }, 2000);
} }
//------------------ end -------------------------------- //------------------------------ end ----------------------------------
async function loadHeatmapsForFloor(model) {
const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
//x: -17.33, y: 51.03, z: -2.52
const devices = [
{
id: "Oficina 5",
//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",
//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",
//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"]
}
];
// Initialize sensor values
let sensorVals = [];
for (let i = 0; i < devices.length; i++) {
sensorVals[i] = Math.random();
}
const roomDbIds = [];
roomDbIds.push(7567);
const {
SurfaceShadingData,
SurfaceShadingPoint,
SurfaceShadingNode,
} = Autodesk.DataVisualization.Core;
const shadingNode = new SurfaceShadingNode("Room Panel", roomDbIds);
devices.forEach((device) => {
const shadingPoint = new SurfaceShadingPoint(
device.id,
device.position,
device.sensorTypes
);
shadingNode.addPoint(shadingPoint);
});
const heatmapData = new SurfaceShadingData();
heatmapData.addChild(shadingNode);
heatmapData.initialize(model);
// Setup surface shading
await dataVizExtn.setupSurfaceShading(model, heatmapData);
//dataVizExtn.registerSurfaceShadingColors("co2", [0x00ff00, 0xff0000]);
dataVizExtn.registerSurfaceShadingColors("temperature", [0xff0000, 0x0000ff]);
function getSensorValue(device, sensorType) {
return sensorVals[parseInt(device.id.slice(-1)) - 1];
}
dataVizExtn.renderSurfaceShading("Room Panel", "temperature", getSensorValue);
setInterval(() => {
// Modify sensor values.
for (let i = 0; i < devices.length; i++) {
sensorVals[i] = Math.random();
}
dataVizExtn.updateSurfaceShading(getSensorValue);
}, 2000);
}
//
async function loadHeatmap() {
const model = viewer.model;
loadHeatmaps(model);
}
async function loadHeatmapForFloor() {
const model = viewer.model;
loadHeatmapsForFloor(model);
}
//------------ 剖面 ---------------------- //------------ 剖面 ----------------------
async function getRemoteLevels() { async function getRemoteLevels() {
@ -1038,3 +910,48 @@ function profile() {
this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]); this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]);
} }
//----------------- end ----------------------------------------------- //----------------- end -----------------------------------------------
//新增燈光
async function newLight(lightPosition) {
//聚光燈
spotLight = new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10);
spotLight.position.set(lightPosition.x, lightPosition.y, lightPosition.z);
spotLight.castShadow = false;
spotLight.visible = true;
spotLight.target.position.set(lightPosition.x, lightPosition.y, lightPosition.z-20);
viewer.scene.add(spotLight.target);
viewer.scene.add(spotLight);
viewer.impl.sceneUpdated(true);
return spotLight;
}
//調整燈光參數 setLightValues(13593, 10, 10, 0.1, 0.3, 1, 0xffff00);
async function setLightValues(dbid, intensity, distance, angle, penumbra, decay, color) {
for (var i = 0; i < lightList.length; i++) {
if (lightList[i].dbid == dbid) {
lightList[i].spotLight.intensity = intensity;
lightList[i].spotLight.distance = distance;
lightList[i].spotLight.angle = angle;
lightList[i].spotLight.penumbra = penumbra;
lightList[i].spotLight.decay = decay;
var tempcolor = new THREE.Color().setHex(color);
lightList[i].spotLight.color = tempcolor;
viewer.impl.sceneUpdated(true);
}
}
}
//======================== 外部呼叫function ===========================
//紀錄熱點座標
function getHopspotPoint(data) {
myDataList = data;
}
//呼叫載入熱圖
async function toLoadHeatmap(roomArr) {
const model = viewer.model;
loadHeatmaps(model, roomArr);
}
//============================= end ===================================

View File

@ -5,7 +5,7 @@ var elevatorSpeed;
var allDbIdsStr; var allDbIdsStr;
let bulbLight;//點燈 let bulbLight;//點燈
let spotLight;//聚光燈 let spotLight;//聚光燈
var myDataList; var myDataList;//設備清單
var viewableData; var viewableData;
var dataVizExtn; var dataVizExtn;
var spriteColorRed; var spriteColorRed;
@ -71,6 +71,7 @@ function onDocumentLoadSuccess(doc) {
var currSelection = viewer.getSelection(); var currSelection = viewer.getSelection();
var domElem = document.getElementById('id_printer'); var domElem = document.getElementById('id_printer');
domElem.innerText = currSelection[0]; domElem.innerText = currSelection[0];
var a = newLight();
//var color = new THREE.Vector4(255 / 255, 0, 0, 1); //var color = new THREE.Vector4(255 / 255, 0, 0, 1);
@ -172,7 +173,7 @@ function onDocumentLoadSuccess(doc) {
const fragList = model.getFragmentList(); const fragList = model.getFragmentList();
loadHeatmaps(model); //loadHeatmaps(model);
@ -270,7 +271,7 @@ function onDocumentLoadSuccess(doc) {
e.properties.forEach(function (item) { e.properties.forEach(function (item) {
if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】 if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】
if (item.displayValue != "") { if (item.displayValue != "") {
if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) { if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10
console.log("--------------------------------------------------"); console.log("--------------------------------------------------");
console.log("Tag_name dbid: " + e.dbId); console.log("Tag_name dbid: " + e.dbId);
console.log("value: " + item.displayValue); console.log("value: " + item.displayValue);
@ -295,7 +296,7 @@ function onDocumentLoadSuccess(doc) {
bounds.union(box); bounds.union(box);
}, true); }, true);
var position = bounds.center(); var position = bounds.center();
if ((item.displayValue).indexOf('TPE_B1_ME_M10') > -1) { if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {
console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")"); console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")");
console.log("--------------------------------------------------"); console.log("--------------------------------------------------");
} }
@ -463,6 +464,9 @@ function onDocumentLoadSuccess(doc) {
//spotLight.target = cube; //spotLight.target = cube;
//viewer.scene.add(spotLight); //viewer.scene.add(spotLight);
//var light = newLight();
/*newLight();*/
} }
//------------------- 加入熱點 ----------------- //------------------- 加入熱點 -----------------
@ -477,28 +481,24 @@ async function addHotPoint(data) {
const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon); const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
//function onSpriteClicked(event) { //function onSpriteClicked(event) {
// console.log(`Sprite clicked: ${event.dbId}`); // console.log(`Sprite clicked: ${event.dbId}`);
//} //}
//熱點 點擊事件註冊 //熱點 點擊事件註冊
viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);//MOUSE_CLICK SPRITE_SELECTED viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);//MOUSE_CLICK SPRITE_SELECTED
//viewer.addEventListener(DataVizCore.MOUSE_CLICK_OUT, onSpriteClickedOut);
//viewer.addEventListener(DataVizCore.MOUSE_DOWN, onSpriteClicked);
//viewer.addEventListener(DataVizCore.MOUSE_HOVERING, onSpriteHovering);
viewer.addEventListener( //viewer.addEventListener(
Autodesk.Viewing.SELECTION_CHANGED_EVENT, // Autodesk.Viewing.SELECTION_CHANGED_EVENT,
onSelectionChange // onSelectionChange
); //);
viewableData = new DataVizCore.ViewableData(); viewableData = new DataVizCore.ViewableData();
viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels
//熱圖 打點 x: 0, y: 25.03, z: -2.52 三菱 //熱圖 打點 x: 0, y: 25.03, z: -2.52 三菱 43.72, -15.65, -44.96 // 43.72, -15.65, -44.96
myDataList = [{ position: { x: -21.95, y: 8.92, z: 63.27 } }, //-21.95, 8.92, 63.27 myDataList = [{ position: { x: 43.72, y: -15.65, z: -44.96 } }, //-21.95, 8.92, 63.27 // -7.58, 18.20, -0.25
{ position: { x: -21.95, y: 7.61, z: 63.27 } },//-21.95, 7.61, 63.27 { position: { x: 43.72, y: -15.65, z: -60 } },//-21.95, 7.61, 63.27
{ position: { x: -21.95, y: 6.43, z: 63.27 } },//-21.95, 6.43, 63.27 { position: { x: -21.95, y: 6.43, z: 63.27 } },//-21.95, 6.43, 63.27
{ position: { x: -21.95, y: 5.31, z: 63.27 } }//-21.95, 5.31, 63.27 { position: { x: -21.95, y: 5.31, z: 63.27 } }//-21.95, 5.31, 63.27
];// x: -17.33, y: 51.03, z: -2.52 ; x: -23.21, y: 51.03, z: -2.52 ];// x: -17.33, y: 51.03, z: -2.52 ; x: -23.21, y: 51.03, z: -2.52
@ -571,6 +571,7 @@ async function addHotPoint(data) {
// console.log(`The mouse hovers off ${targetDbId}`); // console.log(`The mouse hovers off ${targetDbId}`);
// } // }
//} //}
} }
//------------------- end -------------- //------------------- end --------------
@ -622,21 +623,21 @@ function changeColorForHotspot(dbId) {
// // event (e.g., update UI to a state where no selection is made). // // event (e.g., update UI to a state where no selection is made).
//} //}
function onSelectionChange(event) { //function onSelectionChange(event) {
if (event != undefined && event != null) { // if (event != undefined && event != null) {
const dbIds = event.dbIdArray; // const dbIds = event.dbIdArray;
if (dbIds.length > 0) { // if (dbIds.length > 0) {
// 處理已選取元件的邏輯 // // 處理已選取元件的邏輯
//openHotspotModal(); // //openHotspotModal();
console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z} // console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}
} else { // } else {
// 處理沒有選取元件的邏輯 // // 處理沒有選取元件的邏輯
console.log("no item"); // console.log("no item");
} // }
} // }
} //}
//---------------- end ----------------------------- //---------------- end -----------------------------
//----------------- 開關熱點小視窗 ---------------------- //----------------- 開關熱點小視窗 ----------------------
@ -657,30 +658,6 @@ function closeHotspotModal() {
} }
//------------------ end -------------------------------- //------------------ end --------------------------------
//-------------- 更改燈光範圍 --------------------------
function setLightPower(value) {
//bulbLight.intensity = (value * 10);
//bulbLight.distance = value;
viewer.impl.sceneUpdated(true);
}
function setLightOpenOrClose(value) {
if (value)
spotLight.visible = true;
else {
spotLight.visible = false;
}
viewer.impl.sceneUpdated(true);
}
function setLightTransparency(value) {
bulbLight.intensity = (value * 10);
//bulbLight.
viewer.impl.sceneUpdated(true);
}
//------------- end -----------------------------------
//function getPosition(nodeId) { //function getPosition(nodeId) {
function getFragmentWorldMatrixByNodeId(nodeId, viewer) { function getFragmentWorldMatrixByNodeId(nodeId, viewer) {
let tree = viewer.model.getData().instanceTree; let tree = viewer.model.getData().instanceTree;
@ -1394,3 +1371,78 @@ function profile() {
this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]); this.viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]);
} }
//----------------- end ----------------------------------------------- //----------------- end -----------------------------------------------
//--------------------------- 聚光燈 ----------------------------------
async function newLight() {
//聚光燈
//var spotLight;//聚光燈
//color -(可選)燈光的十六進制顏色。默認值為 0xffffff白色
//強度 -(可選)光強度 / 強度的數值。默認值為 1。
//distance - 燈光的最大範圍。默認值為 0無限制
//angle - 光從其上界為 Math.PI / 2 的方向散射的最大角度。
//半影 - 由於半影而衰減的聚光燈錐體的百分比。取值介於 0 和 1 之間。默認值為零。
//decay - 光沿光的距離變暗的量。
spotLight = new THREE.SpotLight(0xffffff, 200, 20, 0.6, 0.5, 10);//0xffffff 80, 10 //15, 20 , Math.PI / 12
spotLight.position.set(43.72, -15.65, -44.96); //set(-17.33, 51.03, -2.52); // -7.58, 18.20, -0.25 -44.96
spotLight.castShadow = false;
spotLight.visible = true;
//var geom = new THREE.BoxGeometry(); //create 幾何對象 -17.33, 51.03, -4.52
//var material = new THREE.MeshLambertMaterial({ color: 0xffff00 });//0xff0000
//var cube = new THREE.Mesh(geom, material);
//cube.position.set(43.72, -15.65, -46); //set(-17.33, 51.03, -10);//-4.52 // -7.58, 18.20, -1
//cube.scale.set(0.5, 0.5, 0.5);
//viewer.scene.add(cube);
//spotLight.target = cube;
spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48
viewer.scene.add(spotLight.target);
viewer.scene.add(spotLight);
viewer.impl.sceneUpdated(true);
//return spotLight;
//加入點燈光
//bulbLight = new THREE.PointLight(0xff0000, 50, 20, 2);//0xff0000
//bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672
//bulbLight.castShadow = true;
//viewer.scene.add(bulbLight);
//viewer.impl.sceneUpdated(true);
}
//-------------- 更改燈光範圍 --------------------------
function setLightPower(value) {
//bulbLight.intensity = (value * 10);
//bulbLight.distance = value;
viewer.impl.sceneUpdated(true);
}
function setLightValues(intensity, distance, angle, penumbra, decay) {
spotLight.intensity = intensity;
spotLight.distance = distance;
spotLight.angle = angle;
spotLight.penumbra = penumbra;
spotLight.decay = decay;
viewer.impl.sceneUpdated(true);
}
function setLightOpenOrClose(value, light) {
if (value) {
light.visible = true;
//spotLight.visible = true;
}
else {
light.visible = false;
//spotLight.visible = false;
}
viewer.impl.sceneUpdated(true);
}
function setLightTransparency(value) {
bulbLight.intensity = (value * 10);
//bulbLight.
viewer.impl.sceneUpdated(true);
}
//------------- end -----------------------------------

View File

@ -888,5 +888,41 @@ namespace Repository.BaseRepository.Implement
} }
#endregion AddOneReturnId #endregion AddOneReturnId
#region TruncateTable ()
/// <summary>
/// 清空資料表資料
/// TRUNCATE TABLE {tableName}
/// </summary>
/// <param name="table_name"></param>
/// <returns></returns>
public virtual async Task TruncateTable(string table_name)
{
using (IDbConnection conn = GetDbConnection())
{
conn.Open();
using (var trans = conn.BeginTransaction())
{
try
{
var sql = $"TRUNCATE TABLE {table_name}";
await conn.ExecuteAsync(sql, null, trans);
trans.Commit();
}
catch (Exception exception)
{
trans.Rollback();
throw exception;
}
finally
{
conn.Close();
}
}
}
}
#endregion TruncateTable
} }
} }

View File

@ -181,5 +181,12 @@ namespace Repository.BaseRepository.Interface
/// <returns> /// <returns>
/// </returns> /// </returns>
Task<int> AddOneByCustomTableReturnId(Dictionary<string, object> dict, string Table_name, bool returnId = true); Task<int> AddOneByCustomTableReturnId(Dictionary<string, object> dict, string Table_name, bool returnId = true);
/// <summary>
/// 清空table資料
/// </summary>
/// <param name="table_name">資料表名稱</param>
/// <returns>
/// </returns>
Task TruncateTable(string table_name);
} }
} }