Skip to content

案例展示

创建机床打孔场景

<template>
    <div style="position: relative">
        <div id="TO" :style="{ width: width + '%',height: height + 'px' }"></div>
        <div id="subTO"></div>
    </div>

</template>

<script setup>
import { onMounted } from 'vue';
const props = defineProps({
  width: {
    type: Number,
    default: 100,
  },
  height: {
    type: Number,
    default: 400,
  },
});
onMounted(() => {
  let mainSceneDom = document.getElementById("TO")
  let subSceneDom = document.getElementById("subTO")
    // 主场景参数
    const mainSceneData = {
        camera: {
            type: "",
            position: {
                x: -60,
                y: 160,
                z: 200,
            },
            perspective: {
                fov: 45,
                near: 0.1,
                far: 10000,
            },
        },
        lights:[],
        helper: {
            axes: {
                active: false,
            },
            grid: {
                active: false,
            },
        },
    }

    // 副场景参数
    const subSceneData = {
        camera: {
            type: "",
            position: {
                x: -0.37,
                y: 22.6,
                z: -23.8,
            },
            perspective: {
                fov: 45,
                near: 0.1,
                far: 10000,
            },
        },
        views: [
        ],
        lights: [
        ],
        helper: {
            axes: {
                active: false,
            },
            grid: {
                active: false,
            },
        },
    }
 
    let TO = new ThingOrigin("easyBuild", mainSceneDom,mainSceneData )
    let subTO = new ThingOrigin("easyBuild", subSceneDom,subSceneData )

    // 模型数据
    const modelList = [
        {
            id: 11,
            modelName: 'lathe',
            base:{
                modelUrl:`${import.meta.env.BASE_URL}models/plane/jichuang.glb`
            },
            modelType: 'glb',
            scale: { x: 10, y: 10, z: 10 },
            position: { x: 20, y: 0, z: 0 },
            rotation: { x: 0, y: 0, z: 0 },
        },
        {
            id: 12,
            modelName: 'plane',
            base:{
                modelUrl:`${import.meta.env.BASE_URL}models/plane/plane.glb`
            },
            modelType: 'glb',
            scale: { x: 5, y: 5, z: 5 },
            position: { x: -32, y: 0, z: -7 },
            rotation: { x: 0, y: 0, z: 0 },
        },
        {
            id: 13,
            modelName: 'open',
            base:{
                modelUrl:`${import.meta.env.BASE_URL}models/plane/kaikong.gltf`
            },
            modelType: 'gltf',
            scale: { x: 1, y: 1, z: 1 },
            position: { x: -0.32, y: 19.65, z: -20.8 },
            rotation: { x: -1.6, y: 0, z: 0 },
        }
    ]

    let sceneModel1, sceneModel2, scene1Model1, scene1Model2
    // 加载模型
    modelList.forEach(modelInfo => {
        TO.model.loadModel(modelInfo).then((fileModel) => {
            let model;
            let model1;

            model = fileModel
            model1 = model.clone();
            TO.scene.add(model);
            subTO.scene.add(model1);
            console.log(TO.scene.children);
            if (TO.scene.children.length >= 4) {
                //主场景
                sceneModel1 = TO.scene.getObjectByProperty('name', 'lathe')//机床模型
                console.log(sceneModel1);
                sceneModel2 = TO.scene.getObjectByProperty('name', 'open')//开孔模型
                // let jichuang = TO.scene.getObjectByProperty('name', '1')
                // jichuang.position.set(-5, jichuang.position.y, jichuang.position.z)
                //副场景
                scene1Model1 = subTO.scene.getObjectByProperty('name', 'lathe')//机床模型
                scene1Model2 = subTO.scene.getObjectByProperty('name', 'open')//开孔模型
                handelAction()
            }
        });
    })

    let socket = {
        ws: null,
        firstAct: true,
        preTime: 0,
        timeStep: 0,
        preData: {},
        preData1: {},
        timer: 0
    }

    let finalBindData = [
        {
            "axis": "x",
            "rotateUnit": "rad",
            "dataUrl": "root.axis1",
            "modelName": "1",
            "reverse": 1,
            "simulateRange": [
                -13.92777099609375,
                -5
            ],
            "animateType": "move"
        },
        {
            "axis": "z",
            "rotateUnit": "rad",
            "dataUrl": "root.axis2",
            "modelName": "2",
            "reverse": 1,
            "simulateRange": [
                0,
                5.1
            ],
            "animateType": "move"
        },
        {
            "axis": "x",
            "rotateUnit": "rad",
            "dataUrl": "root.axis3",
            "modelName": "3",
            "reverse": 1,
            "simulateRange": [
                -7.29995422363281,
                0
            ],
            "animateType": "move"
        },
        {
            "axis": "x",
            "rotateUnit": "rad",
            "dataUrl": "root.axis6",
            "modelName": "6",
            "reverse": 1,
            "simulateRange": [
                83.4,
                74.1
            ],
            "animateType": "move"
        }
    ]

    let finalBindData1 = [
        {
            "axis": "y",
            "rotateUnit": "rad",
            "dataUrl": "root.cylinder",
            "modelName": "柱体",
            "reverse": 1,
            "simulateRange": [
                -0.2,
                0.2
            ],
            "animateType": "move"
        }
    ]

    const twinSocket = (e) => {
        let data;
        let data1
        let random

        //websocket数据代码
        try {
            const parsedData = JSON.parse(e.data);
            data = parsedData.lathe;
            data1 = parsedData.hole;
            random = Number(parsedData.rough)
        } catch (e) {
            console.warn('数据解析失败')
            return;
        }

        let cTime = new Date().getTime();

        //取决于推数几次后有变化
        socket.timeStep = (cTime - socket.preTime) * 1;
        socket.preTime = cTime;

        // console.log('传入数据data', data);
        // console.log('传入数据data1', data1);

        //首次传值,重置关节姿态
        if (socket.firstAct) {
            // console.log('finalBindData', finalBindData)
            // console.log('首次进入,重置', sceneModel2)

            //主场景
            TO.machine.setModel(sceneModel1, finalBindData, data)
            TO.machine.setModel(sceneModel2, finalBindData1, data1)
            //副场景
            subTO.machine.setModel(scene1Model1, finalBindData, data)
            subTO.machine.setModel(scene1Model2, finalBindData1, data1)

            socket.preData = data;
            socket.preData1 = data1;
            socket.firstAct = false;
            return;
        }
        //主场景和副场景的的机床动画
        TO.machine.twinModel(sceneModel1, finalBindData, socket.preData, data, socket.timeStep)
        TO.machine.twinModel(scene1Model1, finalBindData, socket.preData, data, socket.timeStep)
        socket.preData = data;

        //主场景和副场景的开孔动画
        subTO.machine.twinModel(sceneModel2, finalBindData1, socket.preData1, data1, socket.timeStep)
        subTO.machine.twinModel(scene1Model2, finalBindData1, socket.preData1, data1, socket.timeStep)
        socket.preData1 = data1;
    }
    const action = [
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "0.00",//2轴
                "axis1": "-5.00"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },

        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "0.00",//2轴
                "axis1": "-8.00"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "0.00",//2轴
                "axis1": "-11.90"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "0.00",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "0.00",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "-3.40",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "80.40",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "77.00",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "74.10",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "74.10",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "74.10",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "-0.10"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "77.50",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "-0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "80.50",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "-0.20"//柱体
            },
        },
        {
            "lathe": {
                "axis6": "83.40",//6轴
                "axis3": "-7.29995422363281",//3轴
                "axis2": "5.10",//2轴
                "axis1": "-13.92777099609375"//1轴-导轨
            },
            "hole": {
                "cylinder": "-0.20"//柱体
            },
        },
    ]

    const handelAction = () => {
        let i = 0;
        //测试数据
        socket.timer = setInterval(() => {
            twinSocket({ data: JSON.stringify(action[i]) })
            if (i === action.length - 1){
                clearInterval(socket.timer);
            }
            i++;
        }, 1000)
    }

});


</script>

<style scoped>
#TO {
  width: 100%;
  height: 400px;
  position: relative;
}
#subTO {
    width: 200px;
    height: 100px;
    position: absolute;
    right: 10px;
    top: 10px;
}
</style>