增加继电器部件显示

This commit is contained in:
sunzhenyu 2019-12-13 15:57:38 +08:00
parent 4ed2b9b371
commit e8cc316e82
6 changed files with 131 additions and 37 deletions

View File

@ -23,65 +23,82 @@ export function Jdqcontrol(){
mesh:selectmodel.children[i], mesh:selectmodel.children[i],
index:i, index:i,
show:true, show:true,
msg:null,
}; };
if(selectmodel.children[i].name == "dizuo"){ if(selectmodel.children[i].name == "dizuo"){
part.text = "底座"; part.text = "底座";
part.msg = "";
selectmodel.children[i].text = "底座"; selectmodel.children[i].text = "底座";
} }
if(selectmodel.children[i].name == "cigang"){ if(selectmodel.children[i].name == "cigang"){
part.text = "磁钢"; part.text = "磁钢";
part.msg = "";
selectmodel.children[i].text = "磁钢"; selectmodel.children[i].text = "磁钢";
} }
if(selectmodel.children[i].name == "Lxing"){ if(selectmodel.children[i].name == "Lxing"){
part.text = "L型轭铁"; part.text = "L型轭铁";
part.msg = "扼铁呈L洲形,由电工纯铁板冲压成型,外表镀多层铬防护。";
selectmodel.children[i].text = "L型轭铁"; selectmodel.children[i].text = "L型轭铁";
} }
if(selectmodel.children[i].name == "jiaoxingxiantie"){ if(selectmodel.children[i].name == "jiaoxingxiantie"){
part.text = "角型衔铁"; part.text = "角型衔铁";
part.msg = "衔铁为角型,靠蝶形钢丝卡固定在轭铁的刀刃上,动作灵活。衔铁由电工纯铁冲压成型,衔铁上铆有重锤片,以保证衔铁靠重力返回";
selectmodel.children[i].text = "角型衔铁"; selectmodel.children[i].text = "角型衔铁";
} }
if(selectmodel.children[i].name == "xianquan"){ if(selectmodel.children[i].name == "xianquan"){
part.text = "线圈"; part.text = "线圈";
part.msg = "线圈水平安装在铁芯上,分为前圈和后圈,之所以采用双线圈,主要是为了增强控制电路的适应性和灵活性,可根据电路需要单线圈控"+
"制、双线圈串联控制或双线圈并联控制。";
selectmodel.children[i].text = "线圈"; selectmodel.children[i].text = "线圈";
} }
if(selectmodel.children[i].name == "zhongchuipian"){ if(selectmodel.children[i].name == "zhongchuipian"){
part.text = "重锤片"; part.text = "重锤片";
part.msg = "重锤片由薄钢板制成,其片数由接点组的多少决定,使衔铁的重量基本上满足后接点压力的需要。";
selectmodel.children[i].text = "重锤片"; selectmodel.children[i].text = "重锤片";
} }
if(selectmodel.children[i].name == "lagan"){ if(selectmodel.children[i].name == "lagan"){
part.text = "拉杆"; part.text = "拉杆";
part.msg = "拉杆有铁制的和塑料制的,衔铁通过拉杆带动接点组。";
selectmodel.children[i].text = "拉杆"; selectmodel.children[i].text = "拉杆";
} }
if(selectmodel.children[i].name == "dongjiedianzhou"){ if(selectmodel.children[i].name == "dongjiedianzhou"){
part.text = "动接点轴"; part.text = "动接点轴";
part.msg = "动接点轴由锡磷青铜线制成。";
selectmodel.children[i].text = "动接点轴"; selectmodel.children[i].text = "动接点轴";
} }
if(selectmodel.children[i].name == "neibu"){ if(selectmodel.children[i].name == "neibu"){
part.text = "内部"; part.text = "内部";
part.msg = "";
selectmodel.children[i].text = "内部"; selectmodel.children[i].text = "内部";
} }
if(selectmodel.children[i].name == "jiedian"){ if(selectmodel.children[i].name == "jiedian"){
part.text = "节点"; part.text = "接点";
selectmodel.children[i].text = "节点"; part.msg = "";
selectmodel.children[i].text = "接点";
} }
if(selectmodel.children[i].name == "yapian"){ if(selectmodel.children[i].name == "yapian"){
part.text = "压片"; part.text = "压片";
part.msg = "压片由弹簧钢板冲压成弓形,分上、下两篇,其作用是保证接点组的稳固性。";
selectmodel.children[i].text = "压片"; selectmodel.children[i].text = "压片";
} }
if(selectmodel.children[i].name == "fanghuozhao"){ if(selectmodel.children[i].name == "fanghuozhao"){
part.text = "防火罩"; part.text = "防火罩";
part.msg = "";
selectmodel.children[i].text = "防火罩"; selectmodel.children[i].text = "防火罩";
} }
if(selectmodel.children[i].name == "dianyuanpian"){ if(selectmodel.children[i].name == "dianyuanpian"){
part.text = "电源片"; part.text = "电源片";
part.msg = "电源片单元由黄铜制成的电源片压在胶木内。";
selectmodel.children[i].text = "电源片"; selectmodel.children[i].text = "电源片";
} }
if(selectmodel.children[i].name == "xinpian"){ if(selectmodel.children[i].name == "xinpian"){
part.text = "电路板"; part.text = "电路板";
part.msg = "";
selectmodel.children[i].text = "电路板"; selectmodel.children[i].text = "电路板";
} }
if(selectmodel.children[i].name =="jueyuanzhou"){ if(selectmodel.children[i].name =="jueyuanzhou"){
part.text = "绝缘轴"; part.text = "绝缘轴";
part.msg = "绝缘轴用冻石瓷料制成,抗冲击强度足够。";
selectmodel.children[i].text = "绝缘轴"; selectmodel.children[i].text = "绝缘轴";
} }

View File

@ -11,7 +11,7 @@ export function Moveanimate(){
// points.push(new THREE.Vector3(modellist[j].children[i].position.x,modellist[j].children[i].position.y,modellist[j].children[i].position.z)); // points.push(new THREE.Vector3(modellist[j].children[i].position.x,modellist[j].children[i].position.y,modellist[j].children[i].position.z));
// points.push(new THREE.Vector3(modellist[j].children[i].position.x,modellist[j].children[i].position.y,modellist[j].children[i].position.z)); // points.push(new THREE.Vector3(modellist[j].children[i].position.x,modellist[j].children[i].position.y,modellist[j].children[i].position.z));
// scope.initanimate(modellist[j].children[i],modellist[j].name+"select1",points,true); // scope.initanimate(modellist[j].children[i],modellist[j].name+"select1",points,true);
console.log(modellist);
for(let j=0,lenj=modellist.length;j<lenj;j++){ for(let j=0,lenj=modellist.length;j<lenj;j++){
for(let i=0,leni=modellist[j].children.length;i<leni;i++){ for(let i=0,leni=modellist[j].children.length;i<leni;i++){
@ -191,14 +191,13 @@ export function Moveanimate(){
// console.log(scope.enable); // console.log(scope.enable);
for(let k in scope.animatelist){ for(let k in scope.animatelist){
if(scope.animatelist[k].enable){ if(scope.animatelist[k].enable){
console.log(scope.animatelist[k].progress);
if(scope.animatelist[k].progress>=0.99){ if(scope.animatelist[k].progress>=0.99){
scope.animatelist[k].enable = false; scope.animatelist[k].enable = false;
scope.animatelist[k].status = "end"; scope.animatelist[k].status = "end";
scope.animatelist[k].progress = 0; scope.animatelist[k].progress = 0;
}else{ }else{
let point = scope.animatelist[k].curve.getPointAt(scope.animatelist[k].progress); let point = scope.animatelist[k].curve.getPointAt(scope.animatelist[k].progress);
console.log(scope.animatelist[k].progress);
scope.animatelist[k].connectmodel.position.x = point.x; scope.animatelist[k].connectmodel.position.x = point.x;
scope.animatelist[k].connectmodel.position.y = point.y; scope.animatelist[k].connectmodel.position.y = point.y;
scope.animatelist[k].connectmodel.position.z = point.z; scope.animatelist[k].connectmodel.position.z = point.z;

View File

@ -46,7 +46,8 @@ export function Jl3ddevice(dom) {
this.controls.update(); this.controls.update();
//定义场景(渲染容器) //定义场景(渲染容器)
let scene = new THREE.Scene(); let scene = new THREE.Scene();
scene.background = new THREE.Color(0xa0a0a0); var bgTexture = new THREE.TextureLoader().load("../../static/background/background.jpg");
scene.background = bgTexture;
//定义全局光 //定义全局光
let ambientLight = new THREE.AmbientLight(0xffffff, 1.3); let ambientLight = new THREE.AmbientLight(0xffffff, 1.3);
@ -81,28 +82,32 @@ export function Jl3ddevice(dom) {
this.selectmodel = null; this.selectmodel = null;
//菜单选中设备更新设备较少
this.updateselect = function(updata){ this.updateselect = function(updata){
console.log(updata); // console.log(updata);
if(helpbox){ if(helpbox){
scene.remove( helpbox ); scene.remove( helpbox );
helpbox = null; helpbox = null;
} }
helpbox = new THREE.BoxHelper( updata.mesh, 0xff0000 ); helpbox = new THREE.BoxHelper( updata.mesh, 0xff0000 );
console.log(updata.mesh); // console.log(updata.mesh);
let point = { let point = {
x:updata.mesh.matrixWorld.elements[12], x:updata.mesh.matrixWorld.elements[12],
y:updata.mesh.matrixWorld.elements[13], y:updata.mesh.matrixWorld.elements[13],
z:updata.mesh.matrixWorld.elements[14] z:updata.mesh.matrixWorld.elements[14]
}; };
settext(updata.mesh,point) settext(updata.mesh,point)
getdevicemsg(updata.mesh.name);
// moveanima.animatelist[scope.selectmodel.name+"select1"].enable = true; // moveanima.animatelist[scope.selectmodel.name+"select1"].enable = true;
// console.log(intersects[0].object); // console.log(intersects[0].object);
scene.add( helpbox ); scene.add( helpbox );
} }
//返回设备选择
this.backselect = function(){ this.backselect = function(){
move2(); move2();
updatemenulist(scope.jdqcontrol.devicelist); updatemenulist(scope.jdqcontrol.devicelist);
scope.modelmanager.controllist[0].position.set(19,1270,-165); scope.modelmanager.controllist[0].position.set(19,1270,-165);
scope.modelmanager.controllist[0].rotation.y = -Math.PI/2; scope.modelmanager.controllist[0].rotation.y = -Math.PI/2;
scope.modelmanager.controllist[0].rotation.z = -Math.PI/2; scope.modelmanager.controllist[0].rotation.z = -Math.PI/2;
@ -131,9 +136,10 @@ export function Jl3ddevice(dom) {
scope.selectmodel = null; scope.selectmodel = null;
scope.jdqcontrol.devicelist = []; scope.jdqcontrol.devicelist = [];
scope.animastats = false; scope.animastats = false;
updatemsg();
}; };
//设备分解、归位动画按钮
this.disperdevice = function(){ this.disperdevice = function(){
if(scope.status == '1'){ if(scope.status == '1'){
if(scope.animastats == false){ if(scope.animastats == false){
@ -167,8 +173,8 @@ export function Jl3ddevice(dom) {
// //
// } // }
let stats = new Stats(); // let stats = new Stats();
dom.appendChild( stats.dom ); // dom.appendChild( stats.dom );
document.addEventListener( "mousedown", onselect, false ); document.addEventListener( "mousedown", onselect, false );
@ -177,6 +183,7 @@ export function Jl3ddevice(dom) {
camera.updateProjectionMatrix(); camera.updateProjectionMatrix();
renderer.setSize(scope.dom.offsetWidth, scope.dom.offsetHeight); renderer.setSize(scope.dom.offsetWidth, scope.dom.offsetHeight);
} }
this.jdqcontrol = new Jdqcontrol(); this.jdqcontrol = new Jdqcontrol();
let moveanima = new Moveanimate(); let moveanima = new Moveanimate();
@ -196,7 +203,7 @@ export function Jl3ddevice(dom) {
renderer.render(scene, camera); renderer.render(scene, camera);
moveanima.animateupdate(); moveanima.animateupdate();
// scope.controls.update(); // scope.controls.update();
stats.update(); // stats.update();
} }
@ -324,6 +331,7 @@ export function Jl3ddevice(dom) {
scope.jdqcontrol.jdqdevicelist(scope.modelmanager.controllist[i]); scope.jdqcontrol.jdqdevicelist(scope.modelmanager.controllist[i]);
updatemenulist(scope.jdqcontrol.devicelist); updatemenulist(scope.jdqcontrol.devicelist);
scope.controls.update(); scope.controls.update();
scope.selectmodel = scope.modelmanager.controllist[i]; scope.selectmodel = scope.modelmanager.controllist[i];
scope.status = '1'; scope.status = '1';
} }
@ -343,18 +351,25 @@ export function Jl3ddevice(dom) {
let intersects = raycaster.intersectObjects( scope.modelmanager.controllist,true); let intersects = raycaster.intersectObjects( scope.modelmanager.controllist,true);
if(helpbox){
scene.remove( helpbox );
helpbox = null;
}
if(textplane){
scene.remove(textplane);
textplane.geometry.dispose();
textplane.material.dispose();
}
if(intersects[0]){ if(intersects[0]){
if(helpbox){
scene.remove( helpbox );
helpbox = null;
}
if(intersects[0].object.raycastoff){ if(intersects[0].object.raycastoff){
helpbox = new THREE.BoxHelper( intersects[0].object.parent, 0xff0000 ); helpbox = new THREE.BoxHelper( intersects[0].object.parent, 0xff0000 );
settext(intersects[0].object.parent,intersects[0].point); settext(intersects[0].object.parent,intersects[0].point);
getdevicemsg(intersects[0].object.parent.name);
}else{ }else{
helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 ); helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
settext(intersects[0].object,intersects[0].point); settext(intersects[0].object,intersects[0].point);
getdevicemsg(intersects[0].object.name);
} }
scene.add( helpbox ); scene.add( helpbox );
} }
@ -363,10 +378,20 @@ export function Jl3ddevice(dom) {
} }
} }
function getdevicemsg(selectname){
// console.log(selectname);
for(let i=0,leni=scope.jdqcontrol.devicelist.length;i<leni;i++){
if(selectname == scope.jdqcontrol.devicelist[i].name){
updatemsg(scope.jdqcontrol.devicelist[i].text,scope.jdqcontrol.devicelist[i].msg);
i=leni;
}
}
}
function settext(intersects,point){ function settext(intersects,point){
console.log(intersects);
if(intersects.text){ if(intersects.text){
let textgeometry = new THREE.PlaneBufferGeometry( 600, 400, 1 ); let textgeometry = new THREE.PlaneBufferGeometry( 300, 200, 1 );
let textt = new THREE.CanvasTexture(getTextCanvas(intersects.text)); let textt = new THREE.CanvasTexture(getTextCanvas(intersects.text));
let textmaterial = new THREE.MeshBasicMaterial( { let textmaterial = new THREE.MeshBasicMaterial( {
side: THREE.DoubleSide, side: THREE.DoubleSide,
@ -381,7 +406,7 @@ export function Jl3ddevice(dom) {
textplane= new THREE.Mesh( textgeometry, textmaterial ); textplane= new THREE.Mesh( textgeometry, textmaterial );
// textplane.name = data[i].code; // textplane.name = data[i].code;
textplane.position.x = point.x; textplane.position.x = point.x;
textplane.position.y = point.y+200; textplane.position.y = point.y+100;
textplane.position.z = point.z; textplane.position.z = point.z;
// console.log(textplane.position); // console.log(textplane.position);
// textplane.tcode = data[i].code; // textplane.tcode = data[i].code;
@ -404,26 +429,26 @@ export function Jl3ddevice(dom) {
function getTextCanvas(text){ function getTextCanvas(text){
var canvas = document.getElementById('canvastexture'); var canvas = document.getElementById('canvastexture');
canvas.width = 512; canvas.width = 256;
canvas.height = 256; canvas.height = 128;
var ctx = canvas.getContext('2d'); var ctx = canvas.getContext('2d');
//var bg = canvas.createPattern(img, "no-repeat"); //var bg = canvas.createPattern(img, "no-repeat");
//ctx.fillStyle = bg; //ctx.fillStyle = bg;
ctx.fillRect(0, 0,512,256); ctx.fillRect(0, 0,256,128);
ctx.font = "40px Verdana"; ctx.font = "20px Verdana";
ctx.fillStyle = '#FFFFFF'; ctx.fillStyle = '#FFFFFF';
ctx.textAlign = 'center'; ctx.textAlign = 'center';
ctx.textBaseline = 'middle'; ctx.textBaseline = 'middle';
ctx.clearRect(0,0,512,256); ctx.clearRect(0,0,256,128);
//console.log(text.groupNumber); //console.log(text.groupNumber);
ctx.drawImage(beauty,0,0,512, 256); ctx.drawImage(beauty,0,0,256, 128);
ctx.fillText("设备部件:"+text, 200,64); ctx.fillText("设备部件:"+text, 90,30);
// ctx.fillText("车组人员:XXX", 40,20); // ctx.fillText("车组人员:XXX", 40,20);
// ctx.fillText("速度:XXX.XXX", 40,30); // ctx.fillText("速度:XXX.XXX", 40,30);
//ctx.fillText(text.trainModel.name, width/2,height*3/4); //ctx.fillText(text.trainModel.name, width/2,height*3/4);
let data = ctx.getImageData(0, 0,512, 256); let data = ctx.getImageData(0, 0,256, 128);
return data; return data;
} }

View File

@ -7,8 +7,8 @@
<el-scrollbar ref="devicescrol" style="height:100%;margin-bottom:1px"> <el-scrollbar ref="devicescrol" style="height:100%;margin-bottom:1px">
<el-form ref="form" label-width="120px" size="mini"> <el-form ref="form" label-width="120px" size="mini">
<div class="displaylist" v-for="(part,index) in devicelist" @click="deviceselect(index,part)" v-show="true" > <div class="displaylist" v-for="(part,index) in devicelist" @click="deviceselect(index,part)" v-show="true" >
<div> <div >
<p >设备名称:{{part.text}}</p> <p style="border:1px solid #000;">设备名称:{{part.text}}</p>
</div> </div>
</div> </div>
</el-form> </el-form>
@ -55,7 +55,6 @@ export default {
}, },
'devicelist.length':function(newVal){ 'devicelist.length':function(newVal){
console.log(newVal);
this.$refs.devicescrol.update() this.$refs.devicescrol.update()
} }
@ -63,8 +62,6 @@ export default {
methods: { methods: {
deviceselect(index,train){ deviceselect(index,train){
console.log(index);
console.log(train);
this.$emit('sdevice',train); this.$emit('sdevice',train);
}, },
filterNode(value, data) { filterNode(value, data) {
@ -101,6 +98,7 @@ export default {
// background-size: 100%; // background-size: 100%;
// border-radius:5px; // border-radius:5px;
} }
.asset-list{ .asset-list{
position:absolute; position:absolute;
left:0; left:0;
@ -130,7 +128,7 @@ export default {
width:80%; width:80%;
height:20px; height:20px;
margin:0px 0px 20px 0px; margin:0px 0px 20px 0px;
border-top:1px solid #000;
} }
.modelpic{ .modelpic{
left:0; left:0;

View File

@ -20,6 +20,14 @@
<div id="testjlmap3d" class="jlmap3ddraw"> <div id="testjlmap3d" class="jlmap3ddraw">
<canvas id="canvastexture" /> <canvas id="canvastexture" />
</div> </div>
<div class="showmsg" v-show="msgshow">
<div class="msgtop">
{{devicename}}
</div>
<div class="msgdown">
{{devicemsg}}
</div>
</div>
</div> </div>
</template> </template>
@ -36,6 +44,9 @@
return { return {
jl3d: null, jl3d: null,
devicelist:[], devicelist:[],
msgshow:false,
devicename:"",
devicemsg:"",
devicestats:"设备分解", devicestats:"设备分解",
} }
@ -69,7 +80,6 @@
if(newVal == true){ if(newVal == true){
this.devicestats = "设备归位"; this.devicestats = "设备归位";
} }
console.log(newVal);
} }
} }
}, },
@ -81,6 +91,7 @@
}, },
mounted() { mounted() {
window.updatemenulist = this.updatemenulist; window.updatemenulist = this.updatemenulist;
window.updatemsg = this.updatemsg;
this.init(); this.init();
}, },
beforeDestroy() { beforeDestroy() {
@ -103,9 +114,19 @@
this.jl3d.disperdevice(); this.jl3d.disperdevice();
}, },
updatemenulist(devicelist) { updatemenulist(devicelist) {
console.log(devicelist);
this.devicelist = devicelist; this.devicelist = devicelist;
}, },
updatemsg(name,text) {
// console.log(name);
// console.log(text);
if(name){
this.msgshow = true;
this.devicename = name;
this.devicemsg = text;
}else{
this.msgshow = false;
}
},
back(changedata) { back(changedata) {
window.close(); window.close();
}, },
@ -127,7 +148,41 @@
height: 100%; height: 100%;
/* z-index: 1500; */ /* z-index: 1500; */
} }
.showmsg{
position: absolute;
float:left;
left:0;
bottom:0;
width: 20%;
height: 40%;
z-index: 10;
background-image:url("/static/texture/showmsg.png");
background-repeat: no-repeat;
background-size: 100%;
}
.msgtop{
text-align: center;
width: 90%;
height:10%;
position: absolute;
top:10%;
font-size:30px;
color:#FFFFFF;
}
.msgdown{
position: absolute;
top:20%;
left:5%;
width: 90%;
height:80%;
font-size:20px;
color:#FFFFFF;
word-wrap:break-word;
letter-spacing:2px;
}
#canvastexture { #canvastexture {
position: absolute; position: absolute;
float: left; float: left;

BIN
static/texture/showmsg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB