Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
		
						commit
						c49bb86d81
					
				@ -47,6 +47,10 @@
 | 
			
		||||
        <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>
 | 
			
		||||
        <div style="height: 50px">
 | 
			
		||||
            <canvas id="iot-heatmap-legend" width="300" height="50"></canvas>
 | 
			
		||||
        </div>
 | 
			
		||||
        <button type="button" class="btn btn-info" onclick="showHeat()">顯示熱圖圖示</button>
 | 
			
		||||
        <!--<input id="lightBar" type="range" min="0" max="100" step="5" onchange="changeLightPower()">亮度-->
 | 
			
		||||
        <!-- <input type="range">Main Axis</input> -->
 | 
			
		||||
    </div>
 | 
			
		||||
@ -191,7 +195,9 @@
 | 
			
		||||
 | 
			
		||||
    <script>
 | 
			
		||||
        var curLightIsOpen = true;
 | 
			
		||||
        var light;
 | 
			
		||||
        //var light;
 | 
			
		||||
        var cavas;
 | 
			
		||||
        this.canvas = document.getElementById('iot-heatmap-legend');
 | 
			
		||||
 | 
			
		||||
        $(document).ready(function () {
 | 
			
		||||
            //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDLm53ZA');
 | 
			
		||||
@ -351,16 +357,16 @@
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function openOrCloseLight() {
 | 
			
		||||
            if (light != null) {
 | 
			
		||||
            //if (light != null) {
 | 
			
		||||
                if (curLightIsOpen) {
 | 
			
		||||
                    curLightIsOpen = false;
 | 
			
		||||
                    setLightOpenOrClose(curLightIsOpen, light);
 | 
			
		||||
                    setLightOpenOrClose(curLightIsOpen);//, light
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    curLightIsOpen = true;
 | 
			
		||||
                    setLightOpenOrClose(curLightIsOpen, light);
 | 
			
		||||
                    setLightOpenOrClose(curLightIsOpen);//, light
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function changeColorHotspot() {
 | 
			
		||||
@ -395,7 +401,42 @@
 | 
			
		||||
        function proFile() {
 | 
			
		||||
            profile();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        function showHeat() {
 | 
			
		||||
            const labels = [
 | 
			
		||||
                `${(10).toFixed(2) }${"°C"}`,
 | 
			
		||||
                `${(40 / 2).toFixed(2)}${"°C"}`,
 | 
			
		||||
                `${(30).toFixed(2) }${"°C"}`
 | 
			
		||||
            ];
 | 
			
		||||
            const colorStops = ['blue', 'green', 'yellow', 'red'];
 | 
			
		||||
            createHeatmapRect(labels, colorStops);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function createHeatmapRect(labels, colorStops) {
 | 
			
		||||
            if (!this.canvas) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            const context = this.canvas.getContext('2d');
 | 
			
		||||
            let i, len;
 | 
			
		||||
            context.clearRect(0, 0, 300, 50);
 | 
			
		||||
            context.fillStyle = 'back';//white
 | 
			
		||||
            for (i = 0, len = labels.length; i < len; i++) {
 | 
			
		||||
                let x = 10 + 280 * i / (len - 1);
 | 
			
		||||
                if (i === len - 1) {
 | 
			
		||||
                    x -= context.measureText(labels[i]).width;
 | 
			
		||||
                }
 | 
			
		||||
                else if (i > 0) {
 | 
			
		||||
                    x -= 0.5 * context.measureText(labels[i]).width;
 | 
			
		||||
                }
 | 
			
		||||
                context.fillText(labels[i], x, 10);
 | 
			
		||||
            }
 | 
			
		||||
            const gradient = context.createLinearGradient(0, 0, 300, 0);
 | 
			
		||||
            for (i = 0, len = colorStops.length; i < len; i++) {
 | 
			
		||||
                gradient.addColorStop(i / (len - 1), colorStops[i]);
 | 
			
		||||
            }
 | 
			
		||||
            context.fillStyle = gradient;
 | 
			
		||||
            context.fillRect(10, 20, 280, 20);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,12 +4,14 @@ var targetFloorZ;
 | 
			
		||||
var elevatorSpeed;
 | 
			
		||||
var allDbIdsStr;
 | 
			
		||||
let bulbLight;//點燈
 | 
			
		||||
let spotLight;//聚光燈
 | 
			
		||||
var spotLight;//聚光燈
 | 
			
		||||
var myDataList;//設備清單
 | 
			
		||||
var viewableData;
 | 
			
		||||
var dataVizExtn;
 | 
			
		||||
var spriteColorRed;
 | 
			
		||||
var levels;//剖面用
 | 
			
		||||
var light;
 | 
			
		||||
let pointLightHelper;
 | 
			
		||||
 | 
			
		||||
function launchViewer(urn) {
 | 
			
		||||
    var av = Autodesk.Viewing;
 | 
			
		||||
@ -71,7 +73,7 @@ function onDocumentLoadSuccess(doc) {
 | 
			
		||||
         var currSelection = viewer.getSelection();
 | 
			
		||||
         var domElem = document.getElementById('id_printer');
 | 
			
		||||
         domElem.innerText = currSelection[0];
 | 
			
		||||
         var a = newLight();
 | 
			
		||||
         /*var a = newLight();*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
         //var color = new THREE.Vector4(255 / 255, 0, 0, 1);
 | 
			
		||||
@ -464,8 +466,8 @@ function onDocumentLoadSuccess(doc) {
 | 
			
		||||
    //spotLight.target = cube;
 | 
			
		||||
    //viewer.scene.add(spotLight);
 | 
			
		||||
 | 
			
		||||
    //var light = newLight();
 | 
			
		||||
    /*newLight();*/
 | 
			
		||||
    //light = newLight();
 | 
			
		||||
    newLight();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -480,7 +482,7 @@ async function addHotPoint(data) {
 | 
			
		||||
    const spriteIcon = "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/circle.svg"; //"/img/forge/hotspot.svg";
 | 
			
		||||
 | 
			
		||||
    const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
 | 
			
		||||
 | 
			
		||||
    var a = newLight();
 | 
			
		||||
    //function onSpriteClicked(event) {
 | 
			
		||||
    //    console.log(`Sprite clicked: ${event.dbId}`);
 | 
			
		||||
    //}
 | 
			
		||||
@ -519,6 +521,7 @@ async function addHotPoint(data) {
 | 
			
		||||
        event.hasStopped = true;
 | 
			
		||||
        if (event != undefined && event != null) {
 | 
			
		||||
            if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
 | 
			
		||||
                setLightValues(20, 0x00ff00)
 | 
			
		||||
                console.log(`Sprite clicked: ${event.dbId}`);
 | 
			
		||||
                openHotspotModal();
 | 
			
		||||
            }
 | 
			
		||||
@ -1139,8 +1142,10 @@ async function loadHeatmaps(model) {
 | 
			
		||||
    // Setup surface shading
 | 
			
		||||
    await dataVizExtn.setupSurfaceShading(model, heatmapData);
 | 
			
		||||
 | 
			
		||||
    //dataVizExtn.registerSurfaceShadingColors("co2", [0x00ff00, 0xff0000]);
 | 
			
		||||
    dataVizExtn.registerSurfaceShadingColors("temperature", [0xff0000, 0x0000ff]);
 | 
			
		||||
    const sensorColors = [0x0000ff, 0x00ff00, 0xffff00, 0xff0000];//0 ~ 1 藍綠黃紅
 | 
			
		||||
 | 
			
		||||
    //dataVizExtn.registerSurfaceShadingColors("co2", [0x00ff00, 0xff0000]); 0~1
 | 
			
		||||
    dataVizExtn.registerSurfaceShadingColors("temperature", sensorColors);//[0xff0000, 0x0000ff]
 | 
			
		||||
 | 
			
		||||
    function getSensorValue(device, sensorType) {
 | 
			
		||||
        return sensorVals[parseInt(device.id.slice(-1)) - 1]; // 值: 0~1之間
 | 
			
		||||
@ -1382,33 +1387,31 @@ async function newLight() {
 | 
			
		||||
    //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 = new THREE.SpotLight(0xff0000, 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;
 | 
			
		||||
 | 
			
		||||
    spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48
 | 
			
		||||
    viewer.scene.add(spotLight.target);
 | 
			
		||||
    //spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48
 | 
			
		||||
    //viewer.scene.add(spotLight.target);
 | 
			
		||||
 | 
			
		||||
    viewer.scene.add(spotLight);
 | 
			
		||||
    //viewer.scene.add(spotLight);
 | 
			
		||||
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
    //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);
 | 
			
		||||
    bulbLight = new THREE.PointLight(0xff0000, 50, 20, 2);//0xff0000
 | 
			
		||||
    bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672
 | 
			
		||||
    bulbLight.castShadow = true;
 | 
			
		||||
    bulbLight.visible = true;
 | 
			
		||||
    viewer.scene.add(bulbLight);
 | 
			
		||||
 | 
			
		||||
    //pointLightHelper = new THREE.PointLightHelper(pointLight);
 | 
			
		||||
    //viewer.scene.add(pointLightHelper);
 | 
			
		||||
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------- 更改燈光範圍 --------------------------
 | 
			
		||||
@ -1418,23 +1421,31 @@ function setLightPower(value) {
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setLightValues(intensity, distance, angle, penumbra, decay) {
 | 
			
		||||
function setLightValues(intensity, color) {// distance, angle, penumbra, decay,
 | 
			
		||||
    viewer.scene.remove(spotLight)
 | 
			
		||||
    spotLight.intensity = intensity;
 | 
			
		||||
    spotLight.distance = distance;
 | 
			
		||||
    spotLight.angle = angle;
 | 
			
		||||
    spotLight.penumbra = penumbra;
 | 
			
		||||
    spotLight.decay = decay;
 | 
			
		||||
    //spotLight.distance = distance;
 | 
			
		||||
    //spotLight.angle = angle;
 | 
			
		||||
    //spotLight.penumbra = penumbra;
 | 
			
		||||
    //spotLight.decay = decay;
 | 
			
		||||
    var tempcolor = new THREE.Color().setHex(color);
 | 
			
		||||
    spotLight.color = tempcolor;
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
 | 
			
		||||
    viewer.scene.add(spotLight);
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setLightOpenOrClose(value, light) {
 | 
			
		||||
function setLightOpenOrClose(value) {//, light
 | 
			
		||||
    if (value) {
 | 
			
		||||
        light.visible = true;
 | 
			
		||||
        //light.visible = true;
 | 
			
		||||
        //spotLight.visible = true;
 | 
			
		||||
        bulbLight.visible = true;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        light.visible = false;
 | 
			
		||||
        //light.visible = false;
 | 
			
		||||
        //spotLight.visible = false;
 | 
			
		||||
        bulbLight.visible = false;
 | 
			
		||||
    }
 | 
			
		||||
    viewer.impl.sceneUpdated(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user