// 各个系统设备的显示隐藏
function toggleShow(objects, render, a, b, c, d, e) {
    if (objects.length > 0) {
        for (let i = 0; i < objects.length; i++) {
            if(a == '0'){
                objects[i].visible = true
            }else{
                if (objects[i].name == a || objects[i].parent.name == a || objects[i].name == b || objects[i].parent.name == b || objects[i].name == c || objects[i].parent.name == c || objects[i].name == d || objects[i].parent.name == d || objects[i].name == e || objects[i].parent.name == e) {
                    objects[i].visible = true
    
                } else {
                    objects[i].visible = false
                }
            }
            
        }
        render()
    }
}

// 改变限速
function changeSpeed(model, obj) {
    console.log(model, obj)

    let textMap = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas(obj,'#fff')) })
    console.log(textMap)

    let geometry = new THREE.PlaneGeometry(100, 100);
    console.log(textMap)
    model.children[1].geometry = geometry
    model.children[1].material = textMap
}
function getTextCanvas(text,bgColor) {
    let canvas = document.createElement("canvas");
    canvas.width = 512;
    canvas.height = 512;
    canvas.setAttribute('id', 'can')
    let c = canvas.getContext('2d');
    // 矩形区域填充背景
    c.fillStyle = bgColor;
    c.fillRect(0, 0, 512, 512);
    c.beginPath();
    // 文字
    c.beginPath();
    c.translate(256, 256);
    c.fillStyle = "red"; //文本填充颜色
    c.font = "bold 50em 宋体"; //字体样式设置
    c.textBaseline = "middle"; //文本与fillText定义的纵坐标
    c.textAlign = "center"; //文本居中(以fillText定义的横坐标)
    c.fillText(text, 0, 0);

    return canvas
}

// ledtext
function changeLedText(model, obj) {
    console.log(model, obj)

    let textMap = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getLedCanvas(obj)) })
    console.log(textMap)

    let geometry = new THREE.PlaneGeometry(6000, 600);
    console.log(textMap)
    model.children[1].geometry = geometry
    model.children[1].material = textMap
}

function getLedCanvas(text) {
    let canvas = document.createElement("canvas");
    canvas.width = 3000;
    canvas.height = 600;
    let c = canvas.getContext('2d');
    // 矩形区域填充背景
    c.fillStyle = "#000000";
    c.fillRect(0, 0, 3000, 600);
    c.beginPath();
    // 文字
    c.beginPath();
    c.translate(1500, 300);
    c.fillStyle = "#00ff00"; //文本填充颜色
    c.font = "30em 宋体"; //字体样式设置
    c.textBaseline = "middle"; //文本与fillText定义的纵坐标
    c.textAlign = "center"; //文本居中(以fillText定义的横坐标)
    c.fillText(text, 0, 0);

    return canvas
}

// //改变信号灯
function changeSignal(model, num) {
    if (num == '0') {
        console.log('0黑色')
        let textMap = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('','#00000')) })
        model.children[2].material = textMap
        model.children[3].material = textMap
    } else if (num == '1') {
        console.log('1红叉')   
        let textMap = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('','#00ff00')) })
        let textMap2 = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('','#ff0000')) })
        model.children[2].material = textMap2
        model.children[2].material.visible = true
        model.children[3].material = textMap
        model.children[3].material.visible = false
    } else if (num == '2') {
        console.log('2绿箭')   
        let textMap = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('','#ff0000')) })
        model.children[2].material = textMap
        model.children[2].material.visible = false
        let textMap2 = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('','#00ff00')) })
        model.children[3].material = textMap2
        model.children[3].material.visible = true
        
    }

}

// 改变设备状态
function changeDeviceStatus(model,color){
    let modelMaterial = new THREE.MeshBasicMaterial({ map: new THREE.CanvasTexture(getTextCanvas('',color)) })
    model.children[0].material = modelMaterial
    model.children[1].material = modelMaterial
    model.children[2].material = modelMaterial
    model.children[3].material = modelMaterial
    model.children[4].material = modelMaterial
    model.children[5].material = modelMaterial
    model.children[6].material = modelMaterial
}

// 改变covi的值
function changeCoViValue(model,co,vi){
    createSpriteText( co,vi,model) 

}

function createSpriteText( co,vi, model) {
    //先用画布将文字画出
    let canvas = document.createElement("canvas");
    let ctx = canvas.getContext("2d");
    ctx.fillStyle = "#fff";
    ctx.font = "Bold 60px Arial";
    ctx.lineWidth = 4;
    ctx.fillText(co, 60, 60);
    ctx.fillText(vi, 60, 120);
    let texture = new THREE.Texture(canvas);
    texture.needsUpdate = true;

    // 更换贴图
    model.material.map = texture
}

  • 无标签