Merge remote-tracking branch 'origin/test' into master11

This commit is contained in:
fan 2021-09-08 14:52:14 +08:00
commit 14e916e3b3
42 changed files with 1300 additions and 176 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -49,11 +49,20 @@ import iscsDibian from '@/assets/iscs_picture/iscs-dibian.png';
import iscsPt1 from '@/assets/iscs_picture/iscs-pt1.png';
import checkNormal from '@/assets/iscs_picture/check_normal.png';
import checkArrowLeft from '@/assets/iscs_picture/check_arrow_left.png';
import checkArrowLeftLv from '@/assets/iscs_picture/check_arrow_left_lv.png';
import checkArrowLeftHong from '@/assets/iscs_picture/check_arrow_left_hong.png';
import checkArrowRight from '@/assets/iscs_picture/check_arrow_right.png';
import checkArrowRightLv from '@/assets/iscs_picture/check_arrow_right_lv.png';
import checkArrowRightHong from '@/assets/iscs_picture/check_arrow_right_hong.png';
import checkArrowDouble from '@/assets/iscs_picture/check_arrow_double.png';
import checkArrowDoubleLv from '@/assets/iscs_picture/check_arrow_double_lv.png';
import checkArrowDoubleHong from '@/assets/iscs_picture/check_arrow_double_hong.png';
import checkFlowCumulative from '@/assets/iscs_picture/check_flow_cumulative.png';
import checkSell from '@/assets/iscs_picture/check_sell.png';
import checkSell2 from '@/assets/iscs_picture/check_sell2.png';
import checkSell2Lv from '@/assets/iscs_picture/check_sell2_lv.png';
import checkSell2Hong from '@/assets/iscs_picture/check_sell2_hong.png';
import checkSell3 from '@/assets/iscs_picture/check_sell3.png';
import bgShowRoom from '@/assets/iscs_picture/bg-showroom.jpg';
import bgStand from '@/assets/iscs_picture/bg-stand.jpg';
import bgFasPlatformA from '@/assets/iscs_picture/fas_platform_a_bg.png';
@ -131,11 +140,17 @@ const pictureObj = {
iscsPt1,
checkNormal,
checkArrowLeft,
checkArrowLeftLv,
checkArrowLeftHong,
checkArrowRight,
checkArrowRightLv,
checkArrowRightHong,
checkArrowDouble,
checkFlowCumulative,
checkSell,
checkSell2,
checkSell2Lv,
checkSell2Hong,
bgShowRoom,
bgStand,
basAnnulus,
@ -210,6 +225,9 @@ export default class Picture extends Group {
this.grouper.add(this.imageButton);
this.add(this.grouper);
}
setStyle( style ) {
this.imageButton.setStyle(style);
}
setModel(dx, dy) {
this.model.point.x += dx;
this.model.point.y += dy;

View File

@ -130,3 +130,19 @@ export function trainSimulationDoorControl(group, data) {
data: data
});
}
export function trainSimulationDoorSelection(group, data) {
return request({
url: `/simulation/${group}/operate/Driver_Door_Selection`,
method: 'post',
data: data
});
}
export function trainSimulationDoorMode(group, data) {
return request({
url: `/simulation/${group}/operate/Driver_Door_Mode`,
method: 'post',
data: data
});
}

View File

@ -145,7 +145,7 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
scene.add(controls3.getObject());
let cameracctv = new THREE.PerspectiveCamera(50, dom.clientWidth/dom.clientHeight, 0.1, 50);
cameracctv.position.set( -3, 0,4.5 );
cameracctv.position.set( 1, 0,4.5 );
cameracctv.rotation.y = -Math.PI/2;
cameracctv.rotation.x = Math.PI/2;
@ -387,7 +387,7 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
rails = loadrails;
// console.log(trainlisttest.group.children[0]);
trainlisttest.group.children[0].getObjectByName("C3").add(cameracctv);
trainlisttest.group.children[0].getObjectByName("C6").add(cameracctv);
}
this.eventon = function() {

View File

@ -837,7 +837,6 @@ export function Jl3dDrivingNew(mixers,updatemmi,sound,translation,routegroup,dri
}
}else if(trainmodel.openleft != data.open && data.open == "1"){
trainmodel.openleft = "1";
console.log(data);
for(let an=actions["traindoor"].top.length-1;an>=0;an--){
actions["traindoor"].top[an].reset();
actions["traindoor"].top[an].time = 0;
@ -988,7 +987,7 @@ export function Jl3dDrivingNew(mixers,updatemmi,sound,translation,routegroup,dri
}
function standupdate(data) {
code = data.code;
if ( actions[code]) {
if (data.open == '1') {
actions[code].status = '1';

View File

@ -104,13 +104,17 @@ export function Lesson3dPlayer(dom,lessonData,lessonIndex) {
// console.log(nowRole);
// console.log(lessonData.lessonProgress[lessonIndex].roleName);
if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
controlManager.initControlMode(lessonIndex);
assetModelManager.changeSceneGroup(scope.nowSceneType);
controlManager.initRoleMode(true,nowRole);
controlManager.initControlMode(lessonIndex);
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action,true,assetModelManager.lessonTriggerList[scope.nowSceneType]);
}else{
controlManager.initControlMode(lessonIndex);
} else{
if(lessonData.lessonProgress[lessonIndex].roleName == 'kong'){
assetModelManager.changeSceneGroup(scope.nowSceneType); controlManager.initRoleMode(false,nowRole);
}
controlManager.initRoleMode(false,nowRole);
controlManager.initControlMode(lessonIndex);
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action,false,assetModelManager.lessonTriggerList[scope.nowSceneType]);
}

View File

@ -13,6 +13,7 @@ export function AssetModelManager(editor,scene) {
groupList["standstation"] = new THREE.Group();
groupList["stopstation"] = new THREE.Group();
groupList["device"] = new THREE.Group();
groupList["occ"] = new THREE.Group();
groupList["xl"] = new THREE.Group();
groupList["dc"] = new THREE.Group();
@ -90,15 +91,36 @@ export function AssetModelManager(editor,scene) {
sceneType:"stopstation",
};
scope.staticAsset['occ'] = {
modelId:'occ',
packageName:"occ大厅",
url:"/MODEL/2021-09-02/210-32471.FBX",
mesh:"",
assetType:'onlineasset',
isUse:true,
resourceType:"三维课程",
sceneType:"occ",
};
//场景中可触发事件模型
this.lessonTriggerList = [];
scope.lessonTriggerList["standstation"] = [];
scope.lessonTriggerList["stopstation"] = [];
scope.lessonTriggerList["device"] = [];
scope.lessonTriggerList["occ"] = [];
scope.lessonTriggerList["xl"] = [];
scope.lessonTriggerList["dc"] = [];
this.changeSceneGroup = function(groupType){
// console.log(groupType);
// console.log(editor.nowSceneType);
// console.log(scope.lessonTriggerList[editor.nowSceneType]);
editor.nowSceneType = groupType;
scene.remove(this.otherModel);
this.otherModel = groupList[groupType];
scene.add(this.otherModel);
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
}
//加载课程资源
this.lessonAssetsLoader = function(lessonData){
let initlist = [];

View File

@ -84,7 +84,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
let loaderObj = new THREE.OBJLoader();
let standstationPZ,stopstationPZ;
let standstationPZ,stopstationPZ,occPZ;
// load a resource
loaderObj.load(
JL3D_LOCAL_STATIC+'/lesson3d/standstationPZ.obj',
@ -110,6 +110,19 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
console.log( 'An error happened' );
}
);
loaderObj.load(
JL3D_LOCAL_STATIC+'/lesson3d/occPZ.obj',
function ( object ) {
occPZ = object;
},
function ( xhr ) {
console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
},
function ( error ) {
console.log( 'An error happened' );
}
);
this.initRoleMode = function(rMode,role){
roleMode = rMode;
nowRole = role;
@ -215,7 +228,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
this.init = function(actions){
worldOctree.fromGraphNode( standstationPZ );
// worldOctree.fromGraphNode( standstationPZ );
actionList = actions;
}
@ -279,6 +292,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
}
}else if(raycasterBoxs[i].type == "urgeSwitch"){
console.log(raycasterBoxs[i]);
if(raycasterBoxs[i].action.status == "02"){
raycasterBoxs[i].action.status = "01";
raycasterBoxs[i].action.action.stop();
@ -485,16 +499,23 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
}
this.initControlMode = function(nowLessonIndex){
console.log(lessonData.lessonProgress[nowLessonIndex].progressScene);
// console.log(lessonData.lessonProgress[nowLessonIndex].progressScene);
if(lessonData.lessonProgress[nowLessonIndex].progressScene == "standstation"){
worldOctree.fromGraphNode( standstationPZ );
}else if(lessonData.lessonProgress[nowLessonIndex].progressScene == "stopstation"){
worldOctree.fromGraphNode( stopstationPZ );
}else if(lessonData.lessonProgress[nowLessonIndex].progressScene == "occ"){
worldOctree.fromGraphNode( occPZ );
}
scope.controlMode = lessonData.lessonProgress[nowLessonIndex].controlMode;
if(lessonData.lessonProgress[nowLessonIndex].changeCamera == true){
if((lessonData.lessonProgress[nowLessonIndex].changeCamera == true && lessonData.lessonProgress[nowLessonIndex].roleName == nowRole) || nowLessonIndex == 0 || lessonData.lessonProgress[nowLessonIndex].roleName== 'kong'){
scope.controlMode = lessonData.lessonProgress[nowLessonIndex].controlMode;
if(scope.controlMode == "free" || scope.controlMode == "non"){
scope.nowCamera = orbitCamera;
oribitControl.enabled = true;
@ -537,11 +558,11 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
// eventBoxs = newEventBoxs;
raycasterBoxs = [];
roleMode = rMode;
console.log("---------changeIndex--------");
console.log(actions);
console.log(roleMode);
console.log(eventTrigger);
console.log("----------------------------");
// console.log("---------changeIndex--------");
// console.log(actions);
// console.log(roleMode);
// console.log(eventTrigger);
// console.log("----------------------------");
if(actions.length>0 && roleMode){

View File

@ -0,0 +1,238 @@
export function Fire() {
let scope = this;
this.points = {};
var last_time_activate = Date.now();
this.createNew = function(scene,pos){
scope.points = new Points(pos);
scope.points.init(pos);
scene.add(scope.points.obj);
}
this.update = function(){
var now = Date.now();
scope.points.update();
if (now - last_time_activate > 10) {
scope.points.activateMover();
last_time_activate = Date.now();
}
}
var Mover = function() {
this.position = new THREE.Vector3();
this.velocity = new THREE.Vector3();
this.acceleration = new THREE.Vector3();
this.anchor = new THREE.Vector3();
this.mass = 1;
this.r = 0;
this.g = 0;
this.b = 0;
this.a = 1;
this.time = 0;
this.is_active = false;
};
Mover.prototype = {
init: function(vector) {
this.position = vector.clone();
this.velocity = vector.clone();
this.anchor = vector.clone();
this.acceleration.set(0, 0, 0);
this.a = 1;
this.time = 0;
},
updatePosition: function() {
this.position.copy(this.velocity);
},
updateVelocity: function() {
this.acceleration.divideScalar(this.mass);
this.velocity.add(this.acceleration);
// if (this.velocity.distanceTo(this.position) >= 1) {
// this.direct(this.velocity);
// }
},
applyForce: function(vector) {
this.acceleration.add(vector);
},
applyFriction: function() {
var friction = friction(this.acceleration, 0.1);
this.applyForce(friction);
},
applyDragForce: function(value) {
var drag = drag(this.acceleration, value);
this.applyForce(drag);
},
hook: function(rest_length, k) {
var force = hook(this.velocity, this.anchor, rest_length, k);
this.applyForce(force);
},
activate: function() {
this.is_active = true;
},
inactivate: function() {
this.is_active = false;
}
};
var Points = function(pos) {
this.movers_num = 3000;
this.movers = [];
this.pos = pos;
this.geometry = null;
this.material = null;
this.obj = null;
this.texture = null;
this.antigravity = new THREE.Vector3(0, 0.1, 0);
};
Points.prototype = {
init: function(pos) {
this.createTexture();
this.geometry = new THREE.Geometry();
this.material = new THREE.PointsMaterial({
color: 0xff6633,
size: 3,
transparent: true,
opacity: 0.5,
map: this.texture,
// depthTest: false,
depthWrite:false,
alphaTest: 0.1,
blending: THREE.AdditiveBlending,
});
for (var i = 0; i < this.movers_num; i++) {
var mover = new Mover();
mover.init(new THREE.Vector3((10*Math.random()+pos.x),pos.y, (10*Math.random()+pos.z)));
this.movers.push(mover);
this.geometry.vertices.push(mover.position);
}
this.obj = new THREE.Points(this.geometry, this.material);
this.obj.renderOrder = 1;
},
update: function() {
var points_vertices = [];
for (var i = 0; i < this.movers.length; i++) {
var mover = this.movers[i];
if (mover.is_active) {
mover.applyForce(this.antigravity);
mover.updateVelocity();
mover.updatePosition();
if (mover.position.y > (this.pos.y+5)) {
mover.inactivate();
}
}
points_vertices.push(mover.position);
}
this.obj.geometry.vertices = points_vertices;
this.obj.geometry.verticesNeedUpdate = true;
},
activateMover: function() {
var count = 0;
let pos = this.pos;
for (var i = 0; i < this.movers.length; i++) {
var mover = this.movers[i];
if (mover.is_active) continue;
var rad1 = getRadian(Math.log(getRandomInt(200, 256)) / Math.log(256) * 270);
var rad2 = getRadian(getRandomInt(0, 360));
var force = getSpherical(rad1, rad2, 1);
mover.activate();
mover.init(new THREE.Vector3((10*Math.random()+pos.x), pos.y+5, (10*Math.random()+pos.z)));
mover.applyForce(force);
count++;
if (count >= 10) break;
}
},
createTexture: function() {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var grad = null;
canvas.width = 200;
canvas.height = 200;
grad = ctx.createRadialGradient(100, 100, 20, 100, 100, 100);
grad.addColorStop(0.2, 'rgba(255, 255, 255, 1)');
grad.addColorStop(0.5, 'rgba(255, 255, 255, 0.3)');
grad.addColorStop(1.0, 'rgba(255, 255, 255, 0)');
ctx.fillStyle = grad;
ctx.arc(100, 100, 100, 0, Math.PI / 180, true);
ctx.fill();
this.texture = new THREE.Texture(canvas);
this.texture.minFilter = THREE.NearestFilter;
this.texture.needsUpdate = true;
}
};
var HemiLight = function() {
this.rad1 = getRadian(60);
this.rad2 = getRadian(30);
this.range = 1000;
this.hex1 = 0xffffff;
this.hex2 = 0x333333;
this.intensity = 1;
this.obj;
};
HemiLight.prototype = {
init: function(hex1, hex2) {
if (hex1) this.hex1 = hex1;
if (hex2) this.hex2 = hex2;
this.obj = new THREE.HemisphereLight(this.hex1, this.hex2, this.intensity);
this.setPosition();
},
setPosition: function() {
var points = getSpherical(this.rad1, this.rad2, this.range);
this.obj.position.copy(points);
}
};
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
function getDegree(radian) {
return radian / Math.PI * 180;
}
function getRadian(degrees) {
return degrees * Math.PI / 180;
}
function getSpherical(rad1, rad2, r) {
var x = Math.cos(rad1) * Math.cos(rad2) * r;
var z = Math.cos(rad1) * Math.sin(rad2) * r;
var y = Math.sin(rad1) * r;
return new THREE.Vector3(x, y, z);
}
function friction(acceleration, mu, normal, mass) {
var force = acceleration.clone();
if (!normal) normal = 1;
if (!mass) mass = 1;
force.multiplyScalar(-1);
force.normalize();
force.multiplyScalar(mu);
return force;
}
function drag(acceleration, value) {
var force = acceleration.clone();
force.multiplyScalar(-1);
force.normalize();
force.multiplyScalar(acceleration.length() * value);
return force;
}
function hook(velocity, anchor, rest_length, k) {
var force = velocity.clone().sub(anchor);
var distance = force.length() - rest_length;
force.normalize();
force.multiplyScalar(-1 * k * distance);
return force;
}
}

View File

@ -102,7 +102,7 @@ export function AssetModelManager(editor,scene) {
scope.staticAsset['occ'] = {
modelId:'occ',
packageName:"occ大厅",
url:"/MODEL/2021-08-23/203-65635.FBX",
url:"/MODEL/2021-09-02/210-32471.FBX",
mesh:"",
assetType:'onlineasset',
isUse:true,

View File

@ -10,7 +10,9 @@ import { OrbitControls } from '@/jlmap3d/main/control/OrbitControls';
//骨骼动画模型辅助工具
import { SkeletonUtils } from '@/jlmap3d/main/utils/SkeletonUtils.js';
import { AssetModelManager } from '@/jlmap3d/lesson3dedit/assetmodelmanager/assetmodelmanager.js';
import { AssetModelManager } from '@/jlmap3d/lesson3dedit/manager/assetmodelmanager.js';
import { AccidentManager } from '@/jlmap3d/lesson3dedit/manager/accidentmanager.js';
import { TransformControls } from '@/jlmap3d/lesson3dedit/controls/TransformControls';
@ -75,6 +77,8 @@ export function Lesson3dEditor(dom,lessonData) {
//
scene.add(transcontrol);
let accidentManager = new AccidentManager(scene);
accidentManager.initAccident();
let assetModelManager = new AssetModelManager(scope,scene);
@ -85,6 +89,11 @@ export function Lesson3dEditor(dom,lessonData) {
}else{
assetModelManager.lessonAssetsLoader();
}
if(lessonData.accidentList){
accidentManager.loadAccidentList(lessonData.accidentList)
}
}else{
assetModelManager.lessonAssetsLoader();
}
@ -98,6 +107,7 @@ export function Lesson3dEditor(dom,lessonData) {
render();
scope.controls.update();
// delta = clock.getDelta();
accidentManager.update();
requestAnimationFrame(animate);
}
@ -112,8 +122,11 @@ export function Lesson3dEditor(dom,lessonData) {
this.changeIndex = function(nowIndex){
lessonIndex = nowIndex;
console.log(lessonData.lessonProgress[lessonIndex]);
scope.nowSceneType = lessonData.lessonProgress[lessonIndex].progressScene;
assetModelManager.changeSceneGroup(scope.nowSceneType);
accidentManager.changeSceneGroup(scope.nowSceneType);
// if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
// controlManager.initControlMode(lessonIndex);
// controlManager.initRoleMode(true,nowRole);
@ -131,6 +144,7 @@ export function Lesson3dEditor(dom,lessonData) {
console.log(value2);
if(type == "changeScene"){
assetModelManager.changeSceneGroup(value1);
accidentManager.changeSceneGroup(value1);
scope.nowSceneType = value1;
}
}
@ -155,10 +169,32 @@ export function Lesson3dEditor(dom,lessonData) {
}
this.createAccident = function(accidentData,mousePos){
var mouse = new THREE.Vector2();
var raycaster = new THREE.Raycaster();
mouse.x = ( mousePos.x / window.innerWidth ) * 2 - 1;
mouse.y = - ( mousePos.y / dom.offsetHeight ) * 2 + 1;
raycaster.setFromCamera(mouse,scope.camerass) // 也可以给构造函数传参的形式写
var intersects = raycaster.intersectObjects( scene.children,true );
if(intersects.length>0){
accidentManager.createNewAccident(accidentData,intersects[0].point,scope.nowSceneType);
}
}
this.saveAssetModel = function(){
return assetModelManager.saveModelList();
}
this.saveAccidentModel = function(){
return accidentManager.saveDataList();
}
this.attachModel = function(selectModel){
transcontrol.attach(selectModel);
}
@ -167,4 +203,8 @@ export function Lesson3dEditor(dom,lessonData) {
transcontrol.detach();
assetModelManager.deleteAsset(selectModel,scope.nowSceneType);
}
this.deleteAccident = function(selectAccident){
accidentManager.deleteAccident(selectAccident,scope.nowSceneType);
}
}

View File

@ -0,0 +1,146 @@
// import { AssetModelManager } from '@/jlmap3d/lesson3dedit/manager/assetmodelmanager.js';
import { Fire } from '@/jlmap3d/lesson3dedit/accident/fire.js';
export function AccidentManager(scene) {
let scope = this;
this.accidentList = [];
this.accidentGroup = new THREE.Group();
//场景中可触发事件模型
this.accidentList = [];
scope.accidentList["standstation"] = [];
scope.accidentList["stopstation"] = [];
scope.accidentList["occ"] = [];
scope.accidentList["device"] = [];
scope.accidentList["xl"] = [];
scope.accidentList["dc"] = [];
let groupList = [];
groupList["standstation"] = new THREE.Group();
groupList["stopstation"] = new THREE.Group();
groupList["occ"] = new THREE.Group();
groupList["device"] = new THREE.Group();
groupList["xl"] = new THREE.Group();
groupList["dc"] = new THREE.Group();
let updateSceneType = "standstation";
scene.add(scope.accidentGroup);
this.initAccident = function(nowSceneType){
let accidentData = [
{
id:'1',
name:"火灾",
type:"fire"
}
];
jl3dUpdateAccidentData(accidentData);
}
this.saveDataList = function(){
let saveList = [];
for(let g in scope.accidentList){
for(let i=0;i<scope.accidentList[g].length;i++){
if(scope.accidentList[g][i].showType != "default"){
saveList.push({
id:scope.accidentList[g][i].id,
name:scope.accidentList[g][i].name,
label:scope.accidentList[g][i].label,
type:scope.accidentList[g][i].type,
pos:{
x:scope.accidentList[g][i].pos.x,
y:scope.accidentList[g][i].pos.y,
z:scope.accidentList[g][i].pos.z
},
showType:scope.accidentList[g][i].showType,
sceneType:scope.accidentList[g][i].sceneType,
});
}
}
}
return saveList;
}
this.changeSceneGroup = function(nowSceneType){
if(scope.accidentGroup.children.length>0){
scope.accidentGroup.remove(scope.accidentGroup.children[0]);
}
scope.accidentGroup.add(groupList[nowSceneType]);
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
updateSceneType = nowSceneType;
}
this.createNewAccident = function(type,pos,nowSceneType){
var rand = Math.floor(Math.random () * 900) + 100;
let newAccident = {
id:rand,
name:type,
label:type+rand,
type:type,
object:{},
pos:pos,
sceneType:nowSceneType,
showType:"loadModel",
};
if(type == "fire"){
newAccident.object = new Fire();
newAccident.object.createNew(groupList[nowSceneType],pos);
}
scope.accidentList[nowSceneType].push(newAccident);
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
}
this.deleteAccident = function(selectAccident,nowSceneType){
groupList[nowSceneType].remove(selectAccident.object.points.obj);
console.log(selectAccident);
for(let i=0;i<scope.accidentList[nowSceneType].length;i++){
if(scope.accidentList[nowSceneType][i].id == selectAccident.id){
scope.accidentList[nowSceneType].splice(i,1);
jl3dUpdateAccidentlist(scope.accidentList[nowSceneType]);
break;
}
}
}
this.loadAccidentList = function(accidentList){
console.log(accidentList);
for(let i=0;i<accidentList.length;i++){
let newAccident = {
id:accidentList[i].id,
name:accidentList[i].name,
label:accidentList[i].label,
type:accidentList[i].type,
object:{},
pos:accidentList[i].pos,
sceneType:accidentList[i].sceneType,
showType:"loadModel",
};
if(accidentList[i].type == "fire"){
newAccident.object = new Fire();
newAccident.object.createNew(groupList[accidentList[i].sceneType],accidentList[i].pos);
}
scope.accidentList[accidentList[i].sceneType].push(newAccident);
// jl3dUpdateAccidentlist(scope.accidentList[accidentList[i].sceneType]);
}
}
this.changeAccidentStatus = function(){
}
this.update = function(){
for(let i=0;i<scope.accidentList[updateSceneType].length;i++){
scope.accidentList[updateSceneType][i].object.update();
}
}
}

View File

@ -0,0 +1,388 @@
import { BASE_ASSET_API } from '@/api/jlmap3d/assets3d.js';
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
export function AssetModelManager(editor,scene) {
let scope = this;
this.assetList = [];
this.otherModel = new THREE.Group();
//场景中可触发事件模型
this.lessonTriggerList = [];
scope.lessonTriggerList["standstation"] = [];
scope.lessonTriggerList["stopstation"] = [];
scope.lessonTriggerList["occ"] = [];
scope.lessonTriggerList["device"] = [];
scope.lessonTriggerList["xl"] = [];
scope.lessonTriggerList["dc"] = [];
let groupList = [];
groupList["standstation"] = new THREE.Group();
groupList["stopstation"] = new THREE.Group();
groupList["occ"] = new THREE.Group();
groupList["device"] = new THREE.Group();
groupList["xl"] = new THREE.Group();
groupList["dc"] = new THREE.Group();
let geometryDevice = new THREE.PlaneGeometry( 100, 100, 32 );
let materialDevice = new THREE.MeshBasicMaterial( {color: 0xffffff, side: THREE.DoubleSide} );
let planeDevice = new THREE.Mesh( geometryDevice, materialDevice );
planeDevice.rotation.x = -Math.PI/2;
groupList["device"].add(planeDevice);
let geometryXl = new THREE.PlaneGeometry( 100, 100, 32 );
let materialXl = new THREE.MeshBasicMaterial( {color: 0xffffff, side: THREE.DoubleSide} );
let planeXl = new THREE.Mesh( geometryXl, materialXl );
planeXl.rotation.x = -Math.PI/2;
groupList["xl"].add(planeXl);
this.loadAsset = [];
this.staticAsset = [];
scope.staticAsset['station'] = {
modelId:'station',
packageName:"车站",
url:JL3D_LOCAL_STATIC+"/lesson3d/station.FBX",
mesh:"",
assetType:'static',
isUse:true,
resourceType:"三维课程",
sceneType:"standstation",
};
scope.staticAsset['FTDH'] = {
modelId:'FTDH',
packageName:"电扶梯",
url:JL3D_LOCAL_STATIC+"/lesson3d/FTDH.FBX",
mesh:"",
assetType:'static',
isUse:true,
resourceType:"三维课程",
sceneType:"standstation",
};
scope.staticAsset['IN'] = {
modelId:'IN',
packageName:"进闸机",
url:JL3D_LOCAL_STATIC+"/lesson3d/IN.FBX",
mesh:"",
assetType:'static',
isUse:true,
resourceType:"三维课程",
sceneType:"standstation",
};
scope.staticAsset['OUT'] = {
modelId:'OUT',
packageName:"出闸机",
url:JL3D_LOCAL_STATIC+"/lesson3d/OUT.FBX",
mesh:"",
assetType:'static',
isUse:true,
resourceType:"三维课程",
sceneType:"standstation",
};
scope.staticAsset['PBMDH'] = {
modelId:'PBMDH',
packageName:"屏蔽门",
url:JL3D_LOCAL_STATIC+"/lesson3d/PBMDH.FBX",
mesh:"",
assetType:'static',
isUse:true,
resourceType:"三维课程",
sceneType:"standstation",
};
scope.staticAsset['wxc'] = {
modelId:'wxc',
packageName:"维修厂",
url:"/MODEL/2021-08-12/196-43574.FBX",
mesh:"",
assetType:'onlineasset',
isUse:true,
resourceType:"三维课程",
sceneType:"stopstation",
};
scope.staticAsset['occ'] = {
modelId:'occ',
packageName:"occ大厅",
url:"/MODEL/2021-09-02/210-32471.FBX",
mesh:"",
assetType:'onlineasset',
isUse:true,
resourceType:"三维课程",
sceneType:"occ",
};
this.changeSceneGroup = function(groupType){
// console.log(groupType);
// console.log(editor.nowSceneType);
// console.log(scope.lessonTriggerList[editor.nowSceneType]);
editor.nowSceneType = groupType;
scene.remove(this.otherModel);
this.otherModel = groupList[groupType];
scene.add(this.otherModel);
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
}
this.saveModelList = function(){
let modelList = {
assetList:[],
modelList:[],
};
for(let k in scope.loadAsset){
modelList.assetList.push({
modelId:scope.loadAsset[k].modelId,
packageName:scope.loadAsset[k].packageName,
url:scope.loadAsset[k].url,
assetType:scope.loadAsset[k].assetType,
isUse:scope.loadAsset[k].isUse,
resourceType:scope.loadAsset[k].resourceType,
sceneType:scope.loadAsset[k].sceneType,
});
}
for(let g in scope.lessonTriggerList){
for(let i=0;i<scope.lessonTriggerList[g].length;i++){
if(scope.lessonTriggerList[g][i].showType != "default"){
modelList.modelList.push({
name:scope.lessonTriggerList[g][i].name,
modelId:scope.lessonTriggerList[g][i].modelId,
label:scope.lessonTriggerList[g][i].label,
pos:{
x:scope.lessonTriggerList[g][i].position.x,
y:scope.lessonTriggerList[g][i].position.y,
z:scope.lessonTriggerList[g][i].position.z
},
rot:{
x:scope.lessonTriggerList[g][i].rotation.x,
y:scope.lessonTriggerList[g][i].rotation.y,
z:scope.lessonTriggerList[g][i].rotation.z
},
showType:scope.lessonTriggerList[g][i].showType,
visible:scope.lessonTriggerList[g][i].visible,
sceneType:scope.lessonTriggerList[g][i].sceneType,
});
}
}
}
console.log(modelList);
return modelList;
}
//加载课程资源
this.lessonAssetsLoader = function(lessonData){
let initlist = [];
if(lessonData){
// scene.remove(this.otherModel);
this.otherModel = groupList[lessonData.lessonProgress[0].progressScene];
scene.add(this.otherModel);
let assetList = lessonData.assetList;
for(let i = 0;i<assetList.length;i++){
assetList[i].mesh = "";
// assetList[i].sceneType = "standstation";
if(assetList[i].modelId == "default1"){
}else{
scope.loadAsset[assetList[i].modelId] = assetList[i];
}
}
}else{
this.otherModel = groupList["standstation"];
scene.add(this.otherModel);
}
for(let k in scope.staticAsset){
initlist.push(fbxpromise(scope.staticAsset[k]));
}
for(let k in scope.loadAsset){
initlist.push(fbxpromise(scope.loadAsset[k]));
}
return new Promise(function(resolve, reject){
Promise.all(initlist).then((result) => {
initTriggerList();
if(lessonData){
let modelList = lessonData.modelList;
for(let i=0;i<modelList.length;i++){
let newModelTrigger = scope.loadAsset[modelList[i].modelId].mesh.clone(true);
// modelList[i].sceneType = "standstation";
newModelTrigger.showType = "loadModel";
newModelTrigger.label = modelList[i].label;
newModelTrigger.modelId = modelList[i].modelId;
newModelTrigger.visible = modelList[i].visible;
newModelTrigger.position.x = modelList[i].pos.x;
newModelTrigger.position.y = modelList[i].pos.y;
newModelTrigger.position.z = modelList[i].pos.z;
newModelTrigger.rotation.x = modelList[i].rot.x;
newModelTrigger.rotation.y = modelList[i].rot.y;
newModelTrigger.rotation.z = modelList[i].rot.z;
newModelTrigger.sceneType = modelList[i].sceneType;
scope.lessonTriggerList[modelList[i].sceneType].push(newModelTrigger);
groupList[modelList[i].sceneType].add(newModelTrigger);
}
}
editor.changeIndex(0);
updateTriggerList(scope.lessonTriggerList[editor.nowSceneType]);
resolve("loaderassets"); //['成功了', 'success']
}).catch((error) => {
//console.log(error);
});
});
}
this.deleteAsset = function(selectModel,nowSceneType){
scope.otherModel.remove(selectModel);
for(let i=0;i<scope.lessonTriggerList[nowSceneType].length;i++){
if(scope.lessonTriggerList[nowSceneType][i].uuid == selectModel.uuid){
scope.lessonTriggerList[nowSceneType].splice(i,1);
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
break;
}
}
}
// <el-option label="车站" value="standstation"></el-option>
// <el-option label="停车场" value="stopstation"></el-option>
// <el-option label="单体设备" value="device"></el-option>
// <el-option label="线路" value="xl"></el-option>
// <el-option label="道岔" value="dc"></el-option>
//FT 扶梯
//FTAN 扶梯按钮(急停)
//FTD 扶梯灯
//FTKG 扶梯开关(钥匙孔)
//FTTJ 扶梯台阶
function initTriggerList(){
scope.staticAsset['station'].mesh.getObjectByName("FTAN").showType = "default";
scope.staticAsset['station'].mesh.getObjectByName("FTAN").label = "扶梯急停按钮";
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("FTAN"));
scope.staticAsset['station'].mesh.getObjectByName("FTKG").showType = "default";
scope.staticAsset['station'].mesh.getObjectByName("FTKG").label = "扶梯钥匙孔";
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("FTKG"));
scope.staticAsset['station'].mesh.getObjectByName("spbmkg").showType = "default";
scope.staticAsset['station'].mesh.getObjectByName("spbmkg").label = "屏蔽门开关";
scope.lessonTriggerList["standstation"].push(scope.staticAsset['station'].mesh.getObjectByName("spbmkg"));
// console.log(scope.loadAsset['default1'].mesh.getObjectByName("FTKG"));
}
//动态加载资源
this.lessonAssetsNewLoader = function(assetData,pos,nowSceneType){
let isLoaded = false;
var rand = Math.floor(Math.random () * 900) + 100;
if(scope.loadAsset[assetData.id]){
let newModelTrigger = scope.loadAsset[assetData.id].mesh.clone(true);
newModelTrigger.modelId = assetData.id;
newModelTrigger.showType = "loadModel";
newModelTrigger.label = assetData.packageName +rand;
newModelTrigger.position.copy(pos);
newModelTrigger.sceneType = nowSceneType;
scope.lessonTriggerList[nowSceneType].push(newModelTrigger);
groupList[nowSceneType].add(newModelTrigger);
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
}else{
scope.loadAsset[assetData.id] = {
modelId:assetData.id,
packageName:assetData.packageName +rand,
url:assetData.url,
mesh:"",
assetType:'loadModel',
isUse:true,
resourceType:"三维课程",
sceneType:nowSceneType,
};
console.log("new");
fbxpromise(scope.loadAsset[assetData.id]).then(function(object){
console.log(scope.loadAsset[assetData.id].mesh);
let newModelTrigger = scope.loadAsset[assetData.id].mesh.clone(true);
newModelTrigger.showType = "loadModel";
newModelTrigger.modelId = assetData.id;
newModelTrigger.label = assetData.packageName+rand;
newModelTrigger.position.copy(pos);
newModelTrigger.sceneType = nowSceneType;
scope.lessonTriggerList[nowSceneType].push(newModelTrigger);
groupList[nowSceneType].add(newModelTrigger);
updateTriggerList(scope.lessonTriggerList[nowSceneType]);
// resolve("loadednew");
});
}
}
//fbx模型加载
function fbxpromise(asset){
return new Promise(function(resolve, reject){
var loader = new THREE.FBXLoader();
// console.log(asset);
// console.log(asset.url);
if(asset.assetType == "static"){
loader.load( asset.url, function ( object ) {
if(asset.sceneType){
object.sceneType = asset.sceneType;
}
asset.mesh = object;
groupList[asset.sceneType].add(object);
// scope.otherModel.add(object);
resolve();
} );
}else if(asset.assetType == "onlineasset"){
loader.load( BASE_ASSET_API+asset.url, function ( object ) {
if(asset.sceneType){
object.sceneType = asset.sceneType;
}
asset.mesh = object;
groupList[asset.sceneType].add(object);
resolve();
} );
}else{
loader.load( BASE_ASSET_API+asset.url, function ( object ) {
if(asset.sceneType){
object.sceneType = asset.sceneType;
}
asset.mesh = object;
if(asset.assetType == "default"){
console.log(object);
// scene.add(object);
}else if(asset.assetType == 'loadModel'){
}
resolve();
} );
}
});
}
}

View File

@ -9,6 +9,7 @@ export function LessonData() {
this.lessonData = {
//资源列表
assetList:[],
accidentList:[],
setup:{
examMode:"",
checkedRole:"",
@ -32,7 +33,7 @@ export function LessonData() {
roleName:"",
roleUse:true,
score:0,
progressScene:"",
progressScene:"standstation",
nextCode:"",
nextNode:"",
triggerType:"",

View File

@ -102,7 +102,7 @@ export function DriverLoadNew(data,scope,netdata,mapdata,sectionlist,signallist,
.then(function(data){
//console.log(data);
//console.log(assetloader);
console.log(stationstandlist);
// console.log(stationstandlist);
return tdt.initTdt(stationstandlist.list,mapdata.sectionList,rails.sectionrail,sceneload);
})
.then(function(data){

View File

@ -36,11 +36,11 @@ export function TdtList() {
let pos = stationData[k].mesh.position;
if(stationData[k].stands[i].right == true){
newmesh.rotation.y = -Math.PI/2;
newmesh.position.set(pos.x+75,0,pos.z+14.8);
newmesh.position.set(pos.x+75,0,pos.z+12.8);
}else{
newmesh.rotation.y = Math.PI/2;
newmesh.position.set(pos.x-75,0,pos.z-14.8);
newmesh.position.set(pos.x-75,0,pos.z-12.8);
}

View File

@ -37,6 +37,9 @@ class Jlmap {
// 设备数据
this.mapDevice = {};
// 大屏配置
this.splitList = [];
// 默认状态
this.defaultStateDict = this.loadDefaultState();
@ -143,6 +146,7 @@ class Jlmap {
setOptions(opts) {
const options = this.pullBack(opts);
if (this.screenFlag) {
this.$options.update(options);
this.$painter.updateScreen(options);
} else {
this.$options.update(options);
@ -216,8 +220,6 @@ class Jlmap {
setUpdateScreen(opts) {
this.setRecover({ scaleRate: 1, offsetX: 0, offsetY: 0 });
this.screenFlag = true;
const screenList = [];
const rectList = [];
let rect = '';
for (const i in this.mapDevice) {
const element = this.mapDevice[i];
@ -233,31 +235,56 @@ class Jlmap {
opts.offsetList = [];
}
const screenSplit = opts.list.length ? opts.list : Vue.prototype.$theme.loadPropConvert(this.lineCode).screenSplit;
const screenDifference = Vue.prototype.$theme.loadPropConvert(this.lineCode).screenDifference || 160;
const splitList = JSON.parse(JSON.stringify(screenSplit));
this.splitList = JSON.parse(JSON.stringify(screenSplit));
const num = screenSplit.length + 1;
const offsetY = (opts.height - 100) / num; // 高度差
const maxWidth = rect.width;
splitList.push(maxWidth);
this.splitList.push(maxWidth);
const scaleX = Math.floor((((opts.width - 200) * num) / rect.width) * 100) / 100;
const scaleY = Math.floor(((opts.height - 100) / (rect.height * num)) * 100) / 100;
const scale = Math.min(scaleX, scaleY);
this.screenScale = Math.min(scaleX, scaleY);
for (let i = 0; i < splitList.length; i++) {
this.optsWidth = opts.width;
this.optsHeight = opts.height;
this.optsOffsetList = opts.offsetList;
const scaleBili = this.screenScale;
this.$options.scaleRate = this.screenScale || 1;
this.$options.scaleIndex = 0;
this.$options.offsetX = 0;
this.$options.offsetY = 0;
// 更新视图大小
// this.$painter.updateTransform({ scaleRate: this.$options.scaleRate, offsetX: this.$options.offsetX, offsetY: this.$options.offsetY });
const {screenList, rectList} = this.calculateScreenPosition(scaleBili);
this.$painter.updateTransform1(screenList, rectList);
}
calculateScreenPosition(scaleBili) {
const screenList = [];
const rectList = [];
const screenDifference = Vue.prototype.$theme.loadPropConvert(this.lineCode).screenDifference || 160;
const bili = scaleBili / this.screenScale;
const offsetY = (this.optsHeight - 100) / this.splitList.length; // 高度差
for (let i = 0; i < this.splitList.length; i++) {
let offsetX = '';
if (i == 0) {
offsetX = -(opts.width - splitList[0] * scale) / 2;
offsetX = -(this.optsWidth - this.splitList[0] * scaleBili) / 2;
} else {
const dx = (opts.width - (splitList[i] - splitList[i - 1]) * scale) / 2; // 居中计算偏移值
offsetX = splitList[i - 1] * scale - dx;
const dx = (this.optsWidth - (this.splitList[i] - this.splitList[i - 1]) * scaleBili) / 2; // 居中计算偏移值
offsetX = this.splitList[i - 1] * scaleBili - dx;
}
const offset = opts.offsetList[i] || 0;
const param = { scaleRateX: scale, scaleRateY: scale, offsetX: offsetX, offsetY: -screenDifference - (offsetY * i) - offset };
const offset = this.optsOffsetList[i] || 0;
const param = { scaleRateX: scaleBili, scaleRateY: scaleBili, offsetX: offsetX, offsetY: (-screenDifference - (offsetY * i) - offset) * bili };
screenList.push(param);
const rect = {x: 0, y: 0, width: Number(splitList[i]) + 5, height: opts.height};
const rect = {x: 0, y: 0, width: Number(this.splitList[i]) + 5, height: this.optsHeight};
rectList.push(rect);
}
this.$painter.updateTransform1(screenList, rectList);
return {
screenList,
rectList
};
}
setLevelVisible(list) {

View File

@ -225,6 +225,11 @@ class Painter {
this.screenFlag = true;
this.$transformHandleScreen.updateTransform(list, opts);
}
updateScreenZoom(bili) {
return this.$jmap.calculateScreenPosition(bili);
}
/**
* 更新zrender尺寸
* @param {*} opt

View File

@ -1,9 +1,24 @@
import {createTransform1, createBoundingRect} from './utils/parser';
class TransformHandle {
constructor(painter) {
this.$painter = painter;
this.scale = '';
this.scaleIndex = 0;
this.scaleList = [
0.2, 0.4, 0.6, 0.8, 0.9,
1, 1.2, 1.4, 1.6, 1.8,
2, 2.2, 2.4, 2.6, 2.8,
3, 3.2, 3.4, 3.6, 3.8,
4, 4.2, 4.4, 4.6, 4.8,
5, 5.2, 5.4, 5.6, 5.8,
6, 6.2, 6.4, 6.6, 6.8,
7, 7.2, 7.4, 7.6, 7.8,
8
];
this.parentLevel = painter.getParentLevel();
this.rect = { x: 0, y: 0, width: 0, height: 0 };
@ -79,6 +94,7 @@ class TransformHandle {
// 更新偏移量
updateTransform(list, rectList) {
this.rectList = rectList;
// this.scale = list[0].scaleRateX;
this.transform = [];
list.forEach(item => {
this.transform.push(createTransform1(item));
@ -87,10 +103,24 @@ class TransformHandle {
this.transformAll();
}
updataOffset(opt) {
this.transform.forEach(item => {
item[4] = item[4] + opt.dx;
item[5] = item[5] + opt.dy;
});
if (opt.scale) {
if (opt.scale <= 0) {
this.scaleIndex = this.scaleIndex <= 0 ? 0 : this.scaleIndex - 1;
} else {
this.scaleIndex = this.scaleIndex >= 40 ? 40 : this.scaleIndex + 1;
}
const {screenList, rectList} = this.$painter.updateScreenZoom(this.scaleList[this.scaleIndex]);
this.rectList = rectList;
this.transform = [];
screenList.forEach(item => {
this.transform.push(createTransform1(item));
});
} else {
this.transform.forEach(item => {
item[4] = item[4] + opt.dx;
item[5] = item[5] + opt.dy;
});
}
this.transformAll1();
}
updataOffsetNum(opts) {

View File

@ -2,10 +2,10 @@ export function getBaseUrl() {
let BASE_API;
if (process.env.NODE_ENV === 'development') {
// BASE_API = 'https://joylink.club/jlcloud';
// BASE_API = 'https://test.joylink.club/jlcloud';
BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://192.168.8.107:9000'; // 袁琪
// BASE_API = 'http://192.168.2.175:9000'; // 旭强 有线
BASE_API = 'http://192.168.8.167:9000'; // 旭强 无线
// BASE_API = 'http://192.168.8.167:9000'; // 旭强 无线
// BASE_API = 'http://192.168.2.183:9000'; // 张赛
// BASE_API = 'http://192.168.8.140:9000'; // 杜康
// BASE_API = 'http://b29z135112.zicp.vip';

View File

@ -62,7 +62,7 @@ export default {
},
'$store.state.map.mapViewLoadedCount':function() {
this.$store.dispatch('map/setTrainWindowShow', false);
this.$jlmap.off('zoom');
// this.$jlmap.off('zoom');
this.handleUpdateScreen();
if (this.$route.query.group && !this.$route.path.includes('displayIscs')) {
this.subscribe();

View File

@ -101,13 +101,13 @@ export default {
{ name: '抵挡图', value: 'iscsDangwei' },
{ name: '地变图', value: 'iscsDibian' },
{ name: 'PT1', value: 'iscsPt1' },
{ name: '检左侧箭头', value: 'checkArrowLeft' },
{ name: '检右侧箭头', value: 'checkArrowRight' },
{ name: '检两侧箭头', value: 'checkArrowDouble' },
{ name: '检流量累计', value: 'checkFlowCumulative' },
{ name: '检正常', value: 'checkNormal' },
{ name: '检售票', value: 'checkSell' },
{ name: '检售票2', value: 'checkSell2' },
{ name: '检左侧箭头', value: 'checkArrowLeft' },
{ name: '检右侧箭头', value: 'checkArrowRight' },
{ name: '检两侧箭头', value: 'checkArrowDouble' },
{ name: '检流量累计', value: 'checkFlowCumulative' },
{ name: '检正常', value: 'checkNormal' },
{ name: '检售票', value: 'checkSell' },
{ name: '检售票2', value: 'checkSell2' },
{ name: '站厅背景', value: 'bgShowRoom' },
{ name: '站台背景', value: 'bgStand' },
{ name: '站台A端背景', value: 'bgFasPlatformA' },

View File

@ -103,14 +103,6 @@
<div class="buttontext">{{ $t('jlmap3d.removalATP') }}</div>
</div>
<!-- <div id="staymode" class="panebutton2" style="bottom:6%;left:80%;">
<img class="buttonimg2" :src="zuoimg" />
<img class="buttonimg2" :src="niuimg" :style="{transform:toutransform}" @touchstart='stopmodetouchstart' @touchmove='stopmodetouchmove' @touchend='stopmodetouchend'/>
<div class="tfbutton" style="top:25px;left:1px;">{{ $t('jlmap3d.infliction') }}</div>
<div class="tfbutton" style="top:8px;left:25px;">{{ $t('jlmap3d.mesoPosition') }}</div>
<div class="tfbutton" style="top:25px;left:50px;">{{ $t('jlmap3d.remission') }}</div>
<div class="buttontext2">{{ $t('jlmap3d.parkingBrakeMode') }}</div>
</div> -->
<div id="dropen" class="panebutton" style="bottom:6%;left:45%;" @click="droclick">
<img class="buttonimg" :src="redlimg" />
<div class="buttontext">{{ $t('jlmap3d.openRightDoor') }}</div>
@ -123,14 +115,23 @@
<img class="buttonimg" :style="urgestopStyle" :src="urgestopimg" />
<div class="buttontext">{{ $t('jlmap3d.emergencyBraking') }}</div>
</div>
<!-- <div id="doorpick" class="panebutton2" style="bottom:6%;left:85%;">
<img class="buttonimg2" :src="zuoimg" />
<img class="buttonimg2" :src="niuimg" :style="{transform:doordirecttou}" @touchstart='doordirecttouchstart' @touchmove='doordirecttouchmove' @touchend='doordirecttouchend'/>
<div class="tfbutton" style="font-size:1px;top:13px;left:5px;">{{ $t('jlmap3d.leftSide') }}</div>
<div class="tfbutton" style="font-size:1px;top:8px;left:33px;">{{ $t('jlmap3d.location0') }}</div>
<div class="tfbutton" style="font-size:1px;top:13px;left:50px;">{{ $t('jlmap3d.rightSide') }}</div>
<div id="doorpick" class="panebutton2" style="top:6%;left:85%;">
<img class="buttonimg2" :src="zuoimg" @mouseout='doorModeOut'/>
<img id="doormodeniu" class="buttonimg2" :src="niuimg" :style="{transform:doormodetou}" @mousedown='doormodetouchstart'/>
<div class="tfbutton" style="font-size:8px;top:11px;left:18px;">AA</div>
<div class="tfbutton" style="font-size:8px;top:8px;left:33px;">AM</div>
<div class="tfbutton" style="font-size:8px;top:11px;left:48px;">MM</div>
<div class="buttontext2">{{ $t('jlmap3d.doorModel') }}</div>
</div>
<div id="doorpick" class="panebutton2" style="bottom:6%;left:85%;">
<img class="buttonimg2" :src="zuoimg" @mouseout='doorSelectionOut'/>
<img id="doorpickniu" class="buttonimg2" :src="niuimg" :style="{transform:doordirecttou}" @mousedown='doordirecttouchstart'/>
<div class="tfbutton" style="font-size:8px;top:11px;left:18px;">{{ $t('jlmap3d.leftSide') }}</div>
<div class="tfbutton" style="font-size:8px;top:8px;left:33px;">{{ $t('jlmap3d.location0') }}</div>
<div class="tfbutton" style="font-size:8px;top:11px;left:48px;">{{ $t('jlmap3d.rightSide') }}</div>
<div class="buttontext2">{{ $t('jlmap3d.doorSideChoose') }}</div>
</div> -->
</div>
</div>
@ -140,7 +141,17 @@
<script>
import Vue from 'vue';
// import { sendSimulationCommand } from '@/api/simulation.js';
import { trainSimulationDriveMode, trainSimulationAto ,trainSimulationAtp,trainSimulationChangeHead,trainSimulationDoorControl,trainSimulationEb } from '@/jlmap3d/jl3ddrive/drivecontrol/simulation.js';
import {
trainSimulationDriveMode,
trainSimulationAto ,
trainSimulationAtp,
trainSimulationChangeHead,
trainSimulationDoorControl,
trainSimulationEb,
trainSimulationDoorSelection,
trainSimulationDoorMode
} from '@/jlmap3d/jl3ddrive/drivecontrol/simulation.js';
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
@ -166,7 +177,7 @@
greenimg:JL3D_LOCAL_STATIC+"/jl3d/control/green.png",
urgestopimg:JL3D_LOCAL_STATIC+"/jl3d/control/urgestop.png",
iconrotate:0,
doordirecttou:"rotate(0deg)",
doordirecttou:"rotate(415deg)",
doormodetou:"rotate(0deg)",
watertou:"rotate(0deg)",
washtou:"rotate(0deg)",
@ -198,6 +209,14 @@
jgl:JL3D_LOCAL_STATIC+"/jl3d/control/redz.png",
sgd:JL3D_LOCAL_STATIC+"/jl3d/control/greenz.png",
jgd:JL3D_LOCAL_STATIC+"/jl3d/control/redz.png",
angleoffset: {
x: null,
y: null
},
oldDoorMode:"",
oldDoorSelection:"",
doorModePut:true,
doorSelectionPut:true,
}
},
watch: {
@ -253,32 +272,118 @@
};
setTimeout( callback.bind(this),2000);
},
stopmodetouchstart:function(e){
// let command ={
// code:this.traincode,
// operation:"607",
// type:"07",
// param:""
// };
// command.param = this.touchstate;
// sendSimulationCommand(this.group,command).then(netdata => {
// if(netdata.data == true){
this.touchcontrol = true;
// }
// });
doormodetouchstart:function(e){
let domoffset = document.getElementById("doormodeniu").getBoundingClientRect();
// movelimit
this.angleoffset.x = domoffset.x;
this.angleoffset.y = domoffset.y;
e.preventDefault();
this.doorModePut = true;
document.getElementById("doormodeniu").onmousemove = this.doormodetouchmove;
document.getElementById("doormodeniu").onmouseup = this.doormodetouchend;
},
stopmodetouchmove:function(e){//finger move
if(this.touchcontrol == true){
this.getAngle(e.changedTouches[0].clientX,e.changedTouches[0].clientY);
}
doormodetouchmove:function(e){//finger move
this.getModeAngle(e.pageX-this.angleoffset.x ,e.pageY-this.angleoffset.y);
},
stopmodetouchend:function(e){
this.touchcontrol = false;
doormodetouchend:function(e){
document.getElementById("doormodeniu").onmousemove = null;
document.getElementById("doormodeniu").onmouseup = null;
},
getAngle:function(mx,my){
doordirecttouchstart:function(e){
let domoffset = document.getElementById("doorpickniu").getBoundingClientRect();
// movelimit
this.angleoffset.x = domoffset.x;
this.angleoffset.y = domoffset.y;
e.preventDefault();
this.doorSelectionPut = true;
document.getElementById("doorpickniu").onmousemove = this.doordirecttouchmove;
document.getElementById("doorpickniu").onmouseup = this.doordirecttouchend;
},
doordirecttouchmove:function(e){//finger move
this.getDirectAngle(e.pageX-this.angleoffset.x ,e.pageY-this.angleoffset.y);
},
doordirecttouchend:function(e){
document.getElementById("doorpickniu").onmousemove = null;
document.getElementById("doorpickniu").onmouseup = null;
},
getModeAngle:function(mx,my){
//
let px=140;
let py=510;
// console.log(mx);
// console.log(my);
let px=30;
let py=30;
let command ={
groupNumber:this.groupNum,
doorMode:""
};
let angle = this.transAngle(px,py,mx,my);
if(angle<250 && angle>122){
if(angle<160 && angle>122){
command.doorMode = "AA";
}else if(angle<210 && angle>=160){
command.doorMode = "AM";
}else if(angle<250 && angle>=210){
command.doorMode = "MM";
}
if(this.doorModePut == true && this.oldDoorMode != command.doorMode){
this.doorModePut = false;
this.oldDoorMode = command.doorMode;
trainSimulationDoorMode(this.group,command).then(netdata => {
});
}
}
},
getDirectAngle:function(mx,my){
//
// console.log(mx);
// console.log(my);
let px=30;
let py=30;
let angle = this.transAngle(px,py,mx,my);
let command ={
groupNumber:this.groupNum,
doorSelection:""
};
if(angle<250 && angle>122){
if(angle<160 && angle>122){
command.doorSelection = "L";
}else if(angle<210 && angle>=160){
command.doorSelection = "Z";
}else if(angle<250 && angle>=210){
command.doorSelection = "R";
}
if(this.doorSelectionPut == true && this.oldDoorSelection != command.doorSelection ){
this.doorSelectionPut = false;
this.oldDoorSelection = command.doorSelection;
trainSimulationDoorSelection(this.group,command).then(netdata => {
});
}
}
},
doorSelectionOut: function(event){
document.getElementById("doorpickniu").onmousemove = null;
document.getElementById("doorpickniu").onmouseup = null;
},
doorModeOut: function(event){
document.getElementById("doormodeniu").onmousemove = null;
document.getElementById("doormodeniu").onmouseup = null;
},
transAngle: function(px,py,mx,my){
let x = Math.abs(px-mx);
let y = Math.abs(py-my);
let z = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
@ -309,50 +414,7 @@
if(mx<px&&my<py){//鼠标在第二象限
angle = 360 - angle;
}
if(angle<338 && angle>219){
if(angle<245 && angle>219){
this.toutransform = "rotate(305deg)";
}else if(angle<295 && angle>245){
this.toutransform = "rotate(359deg)";
}else if(angle<338 && angle>295){
this.toutransform = "rotate(412deg)";
}
}
},
doordirecttouchstart:function(e){
// let command ={
// code:this.traincode,
// operation:"607",
// type:"07",
// param:""
// };
// command.param = this.touchstate;
// sendSimulationCommand(this.group,command).then(netdata => {
// if(netdata.data == true){
this.touchcontrol = true;
// }
// });
},
doordirecttouchmove:function(e){//finger move
if(this.touchcontrol == true){
let px=230;
let py=180;
let angle = this.getAngle(px,py,e.changedTouches[0].clientX,e.changedTouches[0].clientY);
if(angle<338 && angle>219){
if(angle<245 && angle>219){
this.doordirecttou = "rotate(305deg)";
}else if(angle<295 && angle>245){
this.doordirecttou = "rotate(359deg)";
}else if(angle<338 && angle>295){
this.doordirecttou = "rotate(412deg)";
}
}
}
},
doordirecttouchend:function(e){
this.touchcontrol = false;
return angle;
},
sgclink: function (e){
//console.log("");
@ -441,7 +503,7 @@
};
trainSimulationDoorControl(this.group,data).then(netdata => {
// console.log(netdata);
this.doorleftimg = this.greenimg;
// this.doorleftimg = this.greenimg;
});
},
@ -463,7 +525,7 @@
};
trainSimulationDoorControl(this.group,data).then(netdata => {
// console.log(netdata);
this.doorrightimg = this.greenimg;
// this.doorrightimg = this.greenimg;
});
},
atoaclick: function (e){
@ -485,6 +547,7 @@
// console.log(netdata);
});
},
updatabuttonlight: function (data){
// console.log(data);
// if(data.runLevel){
@ -495,6 +558,7 @@
// this.cbtcbuttonimg = this.greenimg;
// }
// }
// console.log(data);
if(data.driveMode){
// this.driveMode = data.driveMode;
@ -524,6 +588,32 @@
}
}
if(data.doorMode){
this.oldDoorMode = data.doorMode;
if(data.doorMode == "AA"){
this.doormodetou = "rotate(305deg)";
}
if(data.doorMode == "AM"){
this.doormodetou = "rotate(359deg)";
}
if(data.doorMode == "MM"){
this.doormodetou = "rotate(50deg)";
}
}
if(data.doorSelection){
this.oldDoorSelection = data.doorSelection;
if(data.doorSelection == "R"){
this.doordirecttou = "rotate(50deg)";
}
if(data.doorSelection == "Z"){
this.doordirecttou = "rotate(359deg)";
}
if(data.doorSelection == "L"){
this.doordirecttou = "rotate(305deg)";
}
}
}
},
}

View File

@ -237,6 +237,10 @@ export default {
// this.updatemmidrivemode(newdata.driveMode);
//
// this.updatemmiatoatp(newdata.atoOn,newdata.atpOn);
if(newdata.doorMode){
this.updateM7(newdata.doorMode);
}
if(newdata.nextStation){
this.updateMmiNextStation(newdata.nextStation);
}
@ -359,6 +363,17 @@ export default {
this.m4image = this.images.m4['none'];
}
},
updateM7(newdata){
if(newdata == "AA"){
this.m7image = this.images.m7['aoac'];
}
if(newdata == "AM"){
this.m7image = this.images.m7['aomc'];
}
if(newdata == "MM"){
this.m7image = this.images.m7['momc'];
}
},
updateTiaoting(newdata){
if(newdata.jump != undefined){

View File

@ -28,6 +28,18 @@
</div>
</el-tab-pane>
<el-tab-pane label="场景特效管理" name="accidentlist" >
<div class="progressdiv"
v-for="(elementaccident,indexaccident) in accidentlist" :key="elementaccident.label">
<div class="progressdivtext" >{{elementaccident.label}}</div>
<div class="progressassetimg"
:style="{'background-image': 'url('+localstatic+'/lesson3d/box.png)'}"/>
<div class="delprogressdiv" @click="deleteAccident(elementaccident)" >删除</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
@ -44,7 +56,7 @@
export default {
name: 'LessonProgress',
props:['lessonData','triggerList'],
props:['lessonData','triggerList','accidentlist'],
components: {
draggable
},
@ -97,6 +109,9 @@
deleteModel(selectedModel){
this.$emit('deleteModel',selectedModel);
},
deleteAccident(selectAccident){
this.$emit('deleteAccident',selectAccident);
}
},

View File

@ -27,6 +27,19 @@
</div>
</draggable>
</el-tab-pane>
<el-tab-pane label="特效资源" name="spritTrigger">
<draggable v-model="accidentDataList" group="accidentDataList" @start="drag=true" @end="drag=false" >
<div class="progressdiv" v-for="(item,index) in accidentDataList"@dragend="createAccident($event,item,index)">
<div class="progressdivimg"
:style="{'background-image': 'url('+localstatic+'/lesson3d/box.png)'}"/>
<div class="progressdivtext">{{item.name}}</div>
</div>
</draggable>
</el-tab-pane>
<el-tab-pane label="图片资源列表" name="picasset">
<el-tabs v-model="activeName" class="activediv" type="card" @tab-click="handleClick" >
@ -82,6 +95,7 @@
activeName: 'lessoncomponent',
lessonAssetList:[],
picAssetList:[],
accidentDataList:[],
triggerList:[
{},
{},
@ -98,6 +112,7 @@
},
mounted() {
window.jl3dUpdateAccidentData = this.jl3dUpdateAccidentData;
this.localstatic = JL3D_LOCAL_STATIC;
console.log(this.localstatic);
getMap3dModelData("三维课程").then(netdata => {
@ -147,7 +162,13 @@
// console.log(event);
this.$emit('createModel',item,{x:event.clientX,y:event.clientY});
},
createAccident(event,item, index){
this.$emit('createAccident',item.type,{x:event.clientX,y:event.clientY});
},
jl3dUpdateAccidentData(accidentData){
this.accidentDataList = accidentData;
},
},
}

View File

@ -216,11 +216,12 @@
<!-- <el-button @click="updateData">保存修改</el-button> -->
</el-form>
<el-form ref="form" class="camerapropertydiv" label-width="130px" size="mini" v-if="selectType == 'modelproperty'">
<el-form ref="form" class="camerapropertydiv" v-if="selectType == 'modelproperty'">
<el-form-item label="模型名称:" v-if="selected.label">
<el-input v-model="selected.label" ></el-input>
</el-form-item>
<el-select v-model="selected.visible" >
<el-option label="显示" :value=true></el-option>
<el-option label="隐藏" :value=false></el-option>

View File

@ -4,6 +4,7 @@
<LessonTools-Manager
@createModel='createModel'
@createAccident='createAccident'
:lessonTools='lessonTools'
></LessonTools-Manager>
@ -62,11 +63,13 @@
<Lesson-Progress
:lessonData='lessonData'
:triggerList='triggerList'
:accidentlist='accidentlist'
@addProgress="addProgress"
@changeProgressView="changeProgressView"
@removeProgress="removeProgress"
@selectModel="selectModel"
@deleteModel="deleteModel"
@deleteAccident="deleteAccident"
>
</Lesson-Progress>
@ -163,6 +166,7 @@
data:{},
},
triggerList:[],
accidentlist:[],
lessonData:{
lessonData:{
lessonProgress:[
@ -209,6 +213,7 @@
},
mounted() {
window.updateTriggerList = this.updateTriggerList;
window.jl3dUpdateAccidentlist = this.jl3dUpdateAccidentlist;
window.editAction = this.editAction;
this.init(this.$route.query.lessonId);
@ -257,6 +262,11 @@
let assetModelData = this.jl3d.saveAssetModel();
saveData.assetList = assetModelData.assetList;
saveData.modelList = assetModelData.modelList;
let accidentData = this.jl3d.saveAccidentModel();
saveData.accidentList = accidentData;
saveData.setup.examMode = this.examMode;
saveData.setup.checkedRole = this.checkedRole;
this.netData.data = JSON.stringify(saveData);
@ -291,6 +301,9 @@
deleteModel(selectedModel){
this.jl3d.deleteModel(selectedModel);
},
deleteAccident(selectedAccident){
this.jl3d.deleteAccident(selectedAccident);
},
setupclick(){
this.showSetup = true;
@ -298,11 +311,16 @@
createModel(assetData,mousePos){
this.jl3d.createModelTrigger(assetData,mousePos);
},
createAccident(accidentData,mousePos){
this.jl3d.createAccident(accidentData,mousePos);
},
updateTriggerList(newTriggerList){
this.triggerList = newTriggerList;
console.log(this.triggerList);
},
jl3dUpdateAccidentlist(newAccidentlist){
this.accidentlist = newAccidentlist;
},
editAction(type,value1,value2){
this.jl3d.editActionManager(type,value1,value2);
},

View File

@ -45,22 +45,23 @@
<Step-Tips
:lessonData='lessonData'
:lessonPlayIndex='lessonPlayIndex'
v-show="lessonTools[0].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
:nowRole ='nowRole'
v-show="lessonTools[0].isShow"
@jumpEvent="jumpEvent">
</Step-Tips>
<Process-Log
:lessonData='lessonData'
:lessonPlayIndex='lessonPlayIndex'
ref="processlog"
v-show="lessonTools[1].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
v-show="lessonTools[1].isShow">
</Process-Log>
<Explain-Pane
:lessonData='lessonData'
:lessonPlayIndex='lessonPlayIndex'
:nowRole ='nowRole'
v-show="lessonTools[2].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'"
@jumpEvent="jumpEvent">
v-show="lessonTools[2].isShow && !examMode"
>
</Explain-Pane>
<Job-Pane
@ -69,11 +70,11 @@
:lessonPlayIndex='lessonPlayIndex'
:nowRole='nowRole'
ref="jobpane"
v-show="lessonTools[3].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
v-show="lessonTools[3].isShow">
</Job-Pane>
<Tool-Bar
v-show="lessonTools[4].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'"
v-show="lessonTools[4].isShow "
@changeCameraPos="changeCameraPos">
</Tool-Bar>
@ -273,7 +274,7 @@
this.selectJobList = loadData.setup.checkedRole;
this.jobPaneData.dataList = loadData.toolJobPane;
this.$refs.jobpane.initJobList(this.jobPaneData.dataList);
console.log(loadData.lessonTools);
this.lessonTools = loadData.lessonTools;
this.lessonData.loadLessonProgress(loadData.lessonProgress);

View File

@ -3,19 +3,16 @@
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex]"
:style="{'background-image': 'url('+lessonbg+')'}">
<!-- <div class="explainpanetittle" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.tittle}}
</div> -->
<div class="explainpanepic" :style="{'background-image': 'url('+localStatic+lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl+')'}" >
<div class="explainpanetittle" >
操作提示
</div>
<div v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl != 'url'" class="explainpanepic" :style="{'background-image': 'url('+localStatic+lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.picurl+')'}" >
</div>
<div class="explainpanetext" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.text}}
</div>
<div class="nextbuttondiv"
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType=='jump'|| (lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType == 'limitjump' && !(lessonData.lessonData.lessonProgress[lessonPlayIndex].roleName == nowRole)) "
@click="explainJump"></div>
</div>
</template>
<script>
@ -26,7 +23,7 @@
export default {
name: 'ExplainPane',
props:['lessonData','lessonPlayIndex','nowRole'],
props:['lessonData','lessonPlayIndex'],
components: {
},
@ -53,12 +50,7 @@
// selectTool(){
// lesson3dSelect('toolproperty','explainpane');
// },
explainJump(){
if(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "jump" || (this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "limitjump")){
this.$emit('jumpEvent','jump',this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane);
}
},
},
}

View File

@ -54,9 +54,10 @@
handler: function (newVal, oldVal) {
if (newVal != oldVal) {
this.logTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].stepTipsData);
this.processTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].stepTipsData);
this.nowProcessText = this.lessonData.lessonData.lessonProgress[newVal].stepTipsData.text;
console.log(this.lessonData.lessonData.lessonProgress[oldVal]);
this.logTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].explainPane);
this.processTexts.push(this.lessonData.lessonData.lessonProgress[oldVal].explainPane);
this.nowProcessText = this.lessonData.lessonData.lessonProgress[newVal].explainPane.text;
var div1 = document.getElementById('tabdiv1');
// div.scrollIntoView();
div1.scrollTop = div1.scrollHeight;
@ -75,7 +76,7 @@
},
methods: {
startLog(){
this.nowProcessText = this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].stepTipsData.text;
this.nowProcessText = this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.text;
},
},

View File

@ -1,14 +1,18 @@
<template>
<div class="stepstipsdiv"
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex]"
@click="selectTool"
:style="{'background-image': 'url('+lessonbg+')'}">
<div class="stepstipstittle" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.tittle}}
当前情况
<!-- {{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.tittle}} -->
</div>
<div class="stepstipstext" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].stepTipsData.text}}
</div>
<div class="nextbuttondiv"
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType=='jump'|| (lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType == 'limitjump' && !(lessonData.lessonData.lessonProgress[lessonPlayIndex].roleName == nowRole)) "
@click="explainJump"></div>
</div>
</template>
<script>
@ -18,13 +22,14 @@
//
export default {
name: 'StepTips',
props:['lessonData','lessonPlayIndex'],
props:['lessonData','lessonPlayIndex','nowRole'],
components: {
},
data() {
return {
lessonbg:JL3D_LOCAL_STATIC+"/lesson3d/lessonbg.png",
staticImg:JL3D_LOCAL_STATIC,
}
},
computed: {
@ -41,10 +46,12 @@
},
methods: {
selectTool(){
lesson3dSelect('toolproperty','stepTips');
},
explainJump(){
if(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "jump" || (this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "limitjump")){
this.$emit('jumpEvent','jump',this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane);
}
},
},
@ -76,5 +83,13 @@
font-size: 18px;
}
.nextbuttondiv{
width:30px;
height:30px;
background-size: 100%;
position: absolute;
right:0;
bottom:0;
}
</style>

View File

@ -1,10 +1,10 @@
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 23.08.2021 10:51:05
# File Created: 02.09.2021 15:20:35
mtllib OCCpengzhuang.mtl
mtllib OCCpengzhuang0902.mtl
#
# object occpengzhuang
# object Object2667
#
v 18.8555 11.4708 3.7985
@ -784,7 +784,7 @@ vt 0.4688 0.5903 0.0000
vt 0.4068 0.6711 0.0000
# 180 texture coords
g occpengzhuang
g Object2667
usemtl 06___Default
s 2
f 1/1/1 2/2/1 3/3/1 4/4/1