// 各个系统设备的显示隐藏
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
}