You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

246 lines
9.5 KiB

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="cache-control"
content="max-age=0" />
<meta http-equiv="cache-control"
content="no-store" />
<meta http-equiv="expires"
content="-1" />
<meta http-equiv="expires"
content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma"
content="no-cache" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!--meta http-equiv="refresh" content="300" />--> <!--Refresh each 5s-->
<meta charset="utf-8" />
<style>
body {
margin: 0;
overflow: hidden;
}
</style>
<script src="three.min.js"></script>
<script src="PCDLoader.js"></script>
<script src="TrackballControls.js"></script>
<script src="OrbitControls.js"></script>
<script src="jquery_3_2_1.min.js"></script>
<script>
window.onerror = function (message, url, linenumber) {
console.log('JavaScript error: ' + message + ' on line ' + linenumber + ' for ' + url);
if (url.search("three.min.js") >= 1) {
loadScript("three.min.js", function () {
});
}
else if (url.search("PCDLoader.js") >= 1) {
loadScript("PCDLoader.js", function () {
});
}
else if (url.search("TrackballControls.js") >= 1) {
loadScript("TrackballControls.js", function () {
});
}
else if (url.search("OrbitControls.js") >= 1) {
loadScript("OrbitControls.js", function () {
});
}
else if (url.search("jquery_3_2_1.min.js") >= 1) {
loadScript("jquery_3_2_1.min.js", function () {
});
}
else {
//location.reload();
var replaceUrl = 'http://' + window.location.hostname + ':' + GetUrlPort() + '/Aida/pcl/pcl.html';
//alert(replaceUrl);
window.location.replace(replaceUrl);
}
}
function GetUrlPort() {
var url_href = window.location.href;
var arr_url = url_href.split(":")[2].split("/")[0];
return arr_url;
}
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
</script>
</head>
<body>
<script>
var g_pcd_load = null;
var g_h = -1;
var g_m = -1;
var g_s = -1;
var g_ms = -1;
// Create a scene
var scene = new THREE.Scene();
// Create a camera
var camera = new THREE.PerspectiveCamera(125, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 40, -80);
camera.lookAt(new THREE.Vector3(0, 0, 0));
camera.up.set(-1, 0, 0);
// Create a renderer
var renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create a PCDLoader
var loader = new THREE.PCDLoader();
// Load PCD data from URL
var pointcloud = null;
var pointcloudOffset = new THREE.Vector3(0, 0, -200); //新增偏移量變數
var check_if_PCD_running = 0;
function run_PCD() {
clearInterval(g_pcd_load);
// Load PCD initially and schedule periodic updates
g_pcd_load = setInterval(loadPCD, 2000);
}
function loadPCD() {
if (check_if_PCD_running == 0) {
check_if_PCD_running = 1;
var NowDate = new Date();
var h = NowDate.getHours();
var m = NowDate.getMinutes();
var s = NowDate.getSeconds();
var ms = NowDate.getMilliseconds();
if (g_h == -1 || g_m == -1 || g_s == -1 || g_ms == -1) {
g_h = h;
g_m = m;
g_s = s;
g_ms = ms;
}
$.ajax({
url: "/gettof3dpcd?" + 'pcl_' + h + '_' + m + '_' + s + '_' + ms,
type: "GET",
async: true,
beforeSend: function (xmlHttp) {
xmlHttp.setRequestHeader("If-Modified-Since", "0");
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
//xmlHttp.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
success: function (retdata) {
if (retdata.startsWith("File")) { // 判斷是否為文字說明
console.warn(retdata);
} else {
//var jsonbuf = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
var text = retdata;
var encoder = new TextEncoder();
var data = encoder.encode(text);
var newPointCloud = loader.parse(data.buffer, '');
if (pointcloud !== null) {
scene.remove(pointcloud);
}
// Set point color to red
newPointCloud.material.color.set(0xf0f8ff);
pointcloud = newPointCloud;
pointcloud.position.copy(pointcloudOffset); //將點雲偏移
scene.add(pointcloud);
// Create an AxesHelper
var axesHelper = new THREE.AxesHelper(100);
axesHelper.position.set(0, 0, 0);
scene.add(axesHelper);
render();
}
check_if_PCD_running = 0;
},
error: function (retdata) {
console.warn(retdata);
check_if_PCD_running = 0;
}
});
}
}
function loadScript(url, callback) {
var script = document.createElement("Script");
script.type = "text/javascript";
//IE 验证脚本是否下载完成
if (script.readyState) {
script.onreadystatechange = function () {
//readyState属性有5种取值
//uninitialized:初始状态
//loading:开始下载
//interactive:数据完成下载但尚不可用
//complete:数据已经准备就绪
//实际使用时,readyState的值并不像我们预想的那样有规律,实践发现使用readyState
//最靠谱的方式是同时检查以下2个状态,只要其中1个触发,就认为脚本下载完成。
if (script.readyState == "loaded" || script.readyState == "complete") {
//移除事件处理器,确保事件不会处理2次
script.onreadystatechange = null;
callback();
}
};
}
//其他浏览器
else {
script.onload = function () {
callback();
};
}
script.src = url;
//把新建的<Script>添加到<head>里比添加到<body>里更保险。
document.getElementsByTagName("head")[0].appendChild(script);
}
// Create a TrackballControls
var controls = new THREE.TrackballControls(camera, renderer.domElement);
// Create an OrbitControls
var controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.set(0, 0, 0); // 設定旋轉軸心為原點
controls.enableDamping = true;
controls.screenSpacePanning = true;
controls.dampingFactor = 0.1;
controls.enableZoom = true;
controls.minDistance = 0;
controls.maxDistance = 1000;
// Render the scene
function render() {
requestAnimationFrame(render);
controls.update();
renderer.render(scene, camera);
}
render();
// Resize the renderer on window resize
window.addEventListener("resize", function () {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
run_PCD();
</script>
</body>
</html>