| | |
| | | " |
| | | > |
| | | <el-table |
| | | empty-text="ææ æ°æ®" |
| | | :data="taskData" |
| | | width="100%" |
| | | :header-cell-style="{ |
| | |
| | | </div> |
| | | <div style="position: absolute; width: 47rem; height: 2.5rem"> |
| | | <el-table |
| | | empty-text="ææ æ°æ®" |
| | | style="margin-top: 0.88rem" |
| | | :data="gridData" |
| | | width="100%" |
| | |
| | | </el-table> |
| | | <div class="consten" v-if="contentShow"> |
| | | <el-table |
| | | empty-text="ææ æ°æ®" |
| | | :data="gridData" |
| | | width="100%" |
| | | :header-cell-style="{ |
| | |
| | | v-model="torqueFrom.torqueSize" |
| | | style="font-size: 0.75rem; height: 2rem" |
| | | placeholder="请è¾å
¥æåå¼" |
| | | /> |
| | | ><template #suffix> |
| | | <span style="font-size: 0.88rem; color: black">N*m</span> |
| | | </template> |
| | | </el-input> |
| | | <!-- @blur="addTorque" --> |
| | | </el-scrollbar> |
| | | </div> |
| | |
| | | justify-content: center; |
| | | align-items: center; |
| | | position: absolute; |
| | | top: 33%; |
| | | top: 35%; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | z-index: 999; |
| | | " |
| | | > |
| | | <div ref="container" style="width: 100%; height: 100%"></div> |
| | | <div |
| | | ref="container" |
| | | class="my-three" |
| | | style="width: 100%; height: 100%" |
| | | ></div> |
| | | <!-- <model-gltf |
| | | :width="400" |
| | | :height="400" |
| | |
| | | enableZoom, |
| | | }" |
| | | /> --> |
| | | </div> |
| | | <div style="position: absolute; bottom: 5%; left: 2%"> |
| | | <span style="color: rgba(26, 201, 255, 1); font-size: 1.5em" |
| | | >X:{{ xPos }} Y:{{ yPos }} Z:{{ zPos }}</span |
| | | > |
| | | </div> |
| | | <div |
| | | style=" |
| | |
| | | import * as THREE from "three"; |
| | | import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; |
| | | import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; //gltf |
| | | import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; |
| | | |
| | | const container = ref(null); |
| | | |
| | | let scene, camera, renderer, controls; |
| | | // let scene, camera, renderer, controls; |
| | | |
| | | const router = useRouter(); |
| | | const gridData = ref([]); |
| | |
| | | |
| | | const innerRef = ref(); |
| | | const scrollbarRef = ref(); |
| | | const isJob = ref([]); //å·²ç»å®æçæ¥éª¤ |
| | | |
| | | //ä¸ä¸æ¥ |
| | | const Previous = (val) => { |
| | | //ä¸ä¸ä¸ªçå¼ |
| | | from.value.group = info.value.grouptype; |
| | | from.value.takeid = info.value.njtakeid; |
| | | from.value.setnum = obj.value.setpNum; |
| | | flag.value = val; |
| | | console.log(from.value, info.value); |
| | | GetPre(from.value, flag.value).then((res) => { |
| | | gridData.value = [res.data.nex]; |
| | | obj.value = res.data.nex; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = nodeList.slice(0, gridData.value[0].setpNum - 1); //å·²ç»å®æçæ¥éª¤ |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | |
| | | }; |
| | | //ä¸ä¸æ¥ |
| | | const Next = (val) => { |
| | | console.log(obj.value); |
| | | from.value.group = info.value.grouptype; |
| | | from.value.takeid = info.value.njtakeid; |
| | | from.value.setnum = obj.value.setpNum; |
| | | flag.value = val; |
| | | |
| | | GetNext(from.value, flag.value).then((res) => { |
| | | if (res.message == "没æå®æå½åæ¥éª¤") { |
| | | gridData.value = res.data.nowdate; |
| | |
| | | } |
| | | centerDialogVisible.value = false; |
| | | gridData.value = [res.data.nex]; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = res.data.finish.map((item) => { |
| | | return item.moduleName; |
| | | }); |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | obj.value = res.data.nex; |
| | | |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | |
| | | takeid: info.value.njtakeid, |
| | | setnum: "", |
| | | }); |
| | | const initData = () => { |
| | | console.log(obj.value); |
| | | GetScreenData({ |
| | | const initData = async () => { |
| | | await GetScreenData({ |
| | | group: info.value.grouptype, |
| | | takeid: info.value.njtakeid, |
| | | }).then((res) => { |
| | | if (res.message == "è¿åå·¥èºè¡¨ä¸çç¬¬ä¸æ¡") { |
| | | gridData.value = res.data.proNoe; |
| | | obj.value = res.data.proNoe[0]; |
| | | sunNUm.value = res.data.maxproce; |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | | }); |
| | | return; |
| | | } |
| | | gridData.value = res.data.maxpro; |
| | | // if (res.message == "è¿åå·¥èºè¡¨ä¸çç¬¬ä¸æ¡") { |
| | | // gridData.value = res.data.proNoe; |
| | | // obj.value = res.data.proNoe[0]; |
| | | // sunNUm.value = res.data.maxproce; |
| | | // queryData.value.setnum = obj.value.setpNum; |
| | | // xPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | // : -585; |
| | | // yPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | // : 692; |
| | | // zPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | // : 692; |
| | | // cameraAnimate( |
| | | // [xPos.value, yPos.value, zPos.value], |
| | | // nodeList[gridData.value[0].setpNum] |
| | | // ); |
| | | // GetTorque(queryData.value).then((res) => { |
| | | // Torque.value = res.data; |
| | | // }); |
| | | // return; |
| | | // } |
| | | gridData.value = [res.data.proNow]; |
| | | sunNUm.value = res.data.maxproce; |
| | | obj.value = res.data.maxpro[0]; |
| | | obj.value = res.data.proNow; |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = res.data.finish; |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | const showModel = () => { |
| | | scene = new THREE.Scene(); |
| | | console.log("model", window.innerWidth, window.innerHeight); |
| | | const CAMERA_POS = [100, 100, 150]; |
| | | const BASE_COLOR = [0.2, 0.4, 0.6]; |
| | | const RED_COLOR = [3.0, 0.2, 0.4]; |
| | | const GREEN_COLOR = [0.0, 1.0, 0.0]; |
| | | const xPos = ref(""); |
| | | const yPos = ref(""); |
| | | const zPos = ref(""); |
| | | const scene = new THREE.Scene(); |
| | | const camera = new THREE.PerspectiveCamera( |
| | | 75, |
| | | window.innerWidth / window.innerHeight, |
| | | 0.1, |
| | | 3000 |
| | | ); |
| | | const renderer = new THREE.WebGLRenderer({ |
| | | antialias: true, |
| | | alpha: true, |
| | | precision: "highp", |
| | | }); |
| | | |
| | | // åå»ºç¸æº (è§è§ï¼å®½é«æ¯ï¼è¿è£åªé¢ï¼è¿è£åªé¢) |
| | | camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000); |
| | | const painting = (part) => { |
| | | let newArr = []; |
| | | // let newArr = flatten(isJob.value); |
| | | scene.traverse(function (child) { |
| | | // æ£æ¥å¯¹è±¡æ¯å¦å
·ææè´¨å±æ§ |
| | | if (child.isMesh) { |
| | | let materials = child.material; |
| | | // 妿æè´¨æ¯å个对象è䏿¯æ°ç»ï¼åå°å
¶æ¾å
¥æ°ç»ä¸ä»¥ä¾¿ç»ä¸å¤ç |
| | | if (!Array.isArray(materials)) { |
| | | materials = [materials]; |
| | | } |
| | | let isString = []; // 夿æ¯å¦æ¯å符串 |
| | | // éåæè´¨æ°ç»å¹¶è®¾ç½®é¢è² |
| | | //å·²ç»å®æçèç¹ |
| | | isJob.value.forEach((item) => { |
| | | if ( |
| | | item == |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" && |
| | | item != part |
| | | ) { |
| | | isString = item.split(","); |
| | | materials.forEach(function (material) { |
| | | if (isString.includes(material.name)) { |
| | | material.color.setRGB(...GREEN_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } |
| | | materials.forEach(function (material) { |
| | | if (material.name === item) { |
| | | material.color.setRGB(...GREEN_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | }); |
| | | console.log(part.split(",")); |
| | | if ( |
| | | part == |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" |
| | | ) { |
| | | materials.forEach(function (material) { |
| | | if (part.split(",").includes(material.name)) { |
| | | material.color.setRGB(...RED_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } else { |
| | | materials.forEach(function (material) { |
| | | if (material.name == part) { |
| | | material.color.setRGB(...RED_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } |
| | | |
| | | // å建渲æå¨ |
| | | renderer = new THREE.WebGLRenderer({ |
| | | antialias: true, |
| | | alpha: true, |
| | | }); |
| | | renderer.setSize(400, 400); // 设置渲æå¨çå¤§å° |
| | | container.value.appendChild(renderer.domElement); |
| | | scene.background = null; |
| | | // å è½½GLTF模å |
| | | const loader = new GLTFLoader(); |
| | | loader.load( |
| | | "ThreeModel/test.gltf", |
| | | (gltf) => { |
| | | const model = gltf.scene; |
| | | |
| | | // è®¡ç®æ¨¡åçè¾¹çæ¡å¹¶è·åä¸å¿ç¹ |
| | | const box = new THREE.Box3().setFromObject(model); |
| | | const center = box.getCenter(new THREE.Vector3()); |
| | | |
| | | // å建ä¸ä¸ªç©ºå¯¹è±¡ä½ä¸ºç¶èç¹ï¼å°åæ è½´åæ¨¡åæ·»å å°è¿ä¸ªç¶èç¹ |
| | | const parent = new THREE.Object3D(); |
| | | scene.add(parent); |
| | | |
| | | // å°æ¨¡åçä½ç½®è®¾ç½®ä¸ºæ¨¡åçè¾¹çæ¡çä¸å¿ï¼ç¡®ä¿å®å±
ä¸ |
| | | model.position.sub(center); // 让模åçä¸å¿ä¸ç¶èç¹å¯¹é½ |
| | | |
| | | // å°åæ è½´å©ææ·»å å°ç¶èç¹ |
| | | // const axesHelper = new THREE.AxesHelper(100); // è½´çé¿åº¦ä¸º100 x,y,zçé¢è²åå«ä¸ºï¼çº¢è²ï¼ç»¿è²ï¼èè²ï¼ |
| | | // parent.add(axesHelper); // å°åæ è½´æ·»å å°ç¶èç¹ |
| | | |
| | | // å°æ¨¡åæ·»å å°ç¶èç¹ |
| | | parent.add(model); |
| | | |
| | | // ç¡®ä¿æ¨¡åç大å°éå½ï¼å¯ä»¥è°æ´æ¨¡åçå¤§å° |
| | | model.scale.set(1, 1, 1); // 妿éè¦çè¯å¯ä»¥ç¼©æ¾æ¨¡å |
| | | }, |
| | | undefined, |
| | | (error) => { |
| | | console.error("模åå 载失败", error); |
| | | // if ( |
| | | // typeof part == |
| | | // "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" |
| | | // ) { |
| | | // newArr = part.split(","); |
| | | // materials.forEach(function (material) { |
| | | // if (newArr.includes(material.name)) { |
| | | // material.color.setRGB(...GREEN_COLOR); |
| | | // } |
| | | // if (part.includes(material.name)) { |
| | | // material.color.setRGB(...RED_COLOR); |
| | | // } else { |
| | | // material.color.setRGB(...BASE_COLOR); |
| | | // } |
| | | // material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | // }); |
| | | // } else { |
| | | // materials.forEach(function (material) { |
| | | // if (newArr.includes(material.name)) { |
| | | // material.color.setRGB(...GREEN_COLOR); |
| | | // } else if (material.name === part) { |
| | | // material.color.setRGB(...RED_COLOR); |
| | | // } else { |
| | | // material.color.setRGB(...BASE_COLOR); |
| | | // } |
| | | // // if (newArr.includes(material.name)) { |
| | | // // material.color.setRGB(...GREEN_COLOR); |
| | | // // } |
| | | // material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | // }); |
| | | // } |
| | | } |
| | | ); |
| | | |
| | | const metalMaterial = new THREE.MeshStandardMaterial({ |
| | | color: 0xaaaaaa, |
| | | metalness: 1, |
| | | roughness: 0.2, |
| | | }); |
| | | |
| | | const sphereGeometry = new THREE.SphereGeometry(1, 32, 32); |
| | | const metalSphere = new THREE.Mesh(sphereGeometry, metalMaterial); |
| | | scene.add(metalSphere); |
| | | |
| | | // å建ç¯å
|
| | | const light = new THREE.AmbientLight(0xffffff); // ç¯å¢å
æ¯ä¸ç§å
¨å±æ§çå
æºï¼ååå°ç
§äº®æ´ä¸ªåºæ¯ï¼å¹¶ä¸ä¸ä¼æé´å½±ææ |
| | | scene.add(light); |
| | | |
| | | const directionalLight = new THREE.DirectionalLight(0xffffff, 3); //è¿æ®µä»£ç å建äºä¸ä¸ªç½è²ã强度为 1 çå¹³è¡å
æº |
| | | directionalLight.position.set(300, 300, 300).normalize(); //å¹¶å°å
¶ä½ç½®è®¾ç½®å¨ (300, 300, 300)ãç¶åï¼éè¿ normalize() æ¹æ³ï¼ç¡®ä¿å¹³è¡å
æºçå
线以ä¸ä¸ªæ åçæ¹åç
§å° |
| | | scene.add(directionalLight); |
| | | |
| | | // è®¾ç½®ç¸æºåå§ä½ç½®ï¼x,y,zï¼ |
| | | camera.position.set(100, 100, 50); // è®¾ç½®ç¸æºä½ç½®ï¼ç¡®ä¿å¯ä»¥çå°æ¨¡å |
| | | |
| | | // å建 OrbitControls å®ä¾ |
| | | controls = new OrbitControls(camera, renderer.domElement); |
| | | controls.enableZoom = false; |
| | | controls.enablePan = false; |
| | | controls.enableDamping = true; // å¯ç¨é»å°¼ææ |
| | | controls.dampingFactor = 0.25; // é»å°¼ç³»æ° |
| | | controls.screenSpacePanning = false; // ç¦ç¨å±å¹ç©ºé´å¹³ç§» |
| | | controls.maxPolarAngle = Math.PI / 2; // éå¶ç¸æºåç´æè½¬çè§åº¦ï¼é²æ¢ç¿»è½¬ |
| | | controls.target.set(0, 0, 0); // ç¡®ä¿ç¸æºå§ç»å´ç»åºæ¯ä¸å¿ï¼æ¨¡åä½ç½®ï¼ |
| | | controls.minDistance = 2; // æå°è·ç¦»ï¼é²æ¢ç¼©å¾å¤ªè¿ |
| | | controls.maxDistance = 500; // æå¤§è·ç¦»ï¼é²æ¢ç¼©å¾å¤ªè¿ |
| | | |
| | | // 渲æå¾ªç¯ |
| | | function animate() { |
| | | requestAnimationFrame(animate); |
| | | |
| | | // æ´æ°æ§å¶å¨ |
| | | controls.update(); // åªæå¨å¯ç¨é»å°¼çæ¶åéè¦è°ç¨æ¤å½æ° |
| | | |
| | | // 渲æåºæ¯ |
| | | renderer.render(scene, camera); |
| | | } |
| | | |
| | | animate(); |
| | | |
| | | // ååºçªå£å¤§å°åå; |
| | | window.addEventListener("resize", onWindowResize, false); |
| | | |
| | | function onWindowResize() { |
| | | console.log(window.innerWidth, window.innerHeight); |
| | | |
| | | camera.aspect = window.innerWidth / window.innerHeight; |
| | | camera.updateProjectionMatrix(); |
| | | renderer.setSize(window.innerWidth / 2, window.innerHeight / 2); |
| | | } |
| | | }; |
| | | const cameraAnimate = ( |
| | | targetPosition = CAMERA_POS, |
| | | part = null, |
| | | duration = 500 |
| | | ) => { |
| | | let startTime = null; |
| | | const startPosition = { |
| | | x: camera.position.x, |
| | | y: camera.position.y, |
| | | z: camera.position.z, |
| | | }; |
| | | const distance = { |
| | | x: targetPosition[0] - startPosition.x, |
| | | y: targetPosition[1] - startPosition.y, |
| | | z: targetPosition[2] - startPosition.z, |
| | | }; |
| | | |
| | | function animate(time) { |
| | | if (!startTime) startTime = time; |
| | | const elapsed = time - startTime; |
| | | const progress = Math.min(elapsed / duration, 1); |
| | | |
| | | // 使ç¨çº¿æ§æå¼è®¡ç®æ°çä½ç½® |
| | | camera.position.x = startPosition.x + distance.x * progress; |
| | | camera.position.y = startPosition.y + distance.y * progress; |
| | | camera.position.z = startPosition.z + distance.z * progress; |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | if (progress < 1) { |
| | | requestAnimationFrame(animate); |
| | | } |
| | | } |
| | | requestAnimationFrame(animate); |
| | | painting(part); |
| | | renderer.render(scene, camera); // å¼ºå¶æ¸²æä¸æ¬¡ |
| | | }; |
| | | const flatten = (arr) => { |
| | | return arr.reduce( |
| | | (acc, val) => |
| | | Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), |
| | | [] |
| | | ); |
| | | }; |
| | | window.addEventListener("resize", () => { |
| | | console.log("åå§ååºæ¯", window.innerWidth, window.innerHeight); |
| | | // camera.aspect = window.innerWidth / window.innerHeight; |
| | | // camera.updateProjectionMatrix(); |
| | | // renderer.setSize(window.innerWidth, window.innerHeight); |
| | | }); |
| | | const nodeList = [ |
| | | "è½¬åæ¶", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | ]; |
| | | |
| | | const spanHide = ref(); |
| | | const spanHide1 = ref(); |
| | | const handleClickOutside = () => { |
| | |
| | | }; |
| | | //æ·»å æåå¼ |
| | | const addTorque = () => { |
| | | torqueFrom.value.processSte = Torque.value[0].processSte; |
| | | torqueFrom.value.takeId = Torque.value[0].takeId; |
| | | torqueFrom.value.groupOp = Torque.value[0].groupOp; |
| | | torqueFrom.value.processSte = queryData.value.setnum; |
| | | torqueFrom.value.takeId = queryData.value.takeid; |
| | | torqueFrom.value.groupOp = queryData.value.grop; |
| | | if ( |
| | | torqueFrom.value.torqueSize == null || |
| | | torqueFrom.value.torqueSize == "" || |
| | |
| | | console.error("æ·»å 失败", error); |
| | | }); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | document.addEventListener("click", handleClickOutside); |
| | | // åå§ååºæ¯ |
| | | renderer.setSize(window.innerWidth / 1.5, window.innerHeight / 2); |
| | | renderer.setClearColor(0xeeeeee); // è®¾ç½®èæ¯è² |
| | | // å¯ç¨ç©çæ¸²ææ¨¡å¼ |
| | | // renderer.physicallyCorrectLights = true; |
| | | // renderer.toneMapping = THREE.ACESFilmicToneMapping; |
| | | const mainTag = document.querySelector(".my-three"); |
| | | mainTag.appendChild(renderer.domElement); |
| | | |
| | | // æ·»å äº¤äºæ§å¶å¨ï¼é¼ æ ææ½ç¼©æ¾ï¼ |
| | | const controls = new OrbitControls(camera, renderer.domElement); |
| | | camera.position.set(...CAMERA_POS); |
| | | controls.update(); |
| | | |
| | | // æ·»å å
æºï¼éè¦ï¼å¦å模åå¯è½æ¾ç¤ºä¸ºå
¨é»ï¼ |
| | | const light = new THREE.DirectionalLight(0xffffff, 3); |
| | | light.position.set(5, 5, 5); |
| | | scene.add(light); |
| | | scene.add(new THREE.AmbientLight(0x404040)); |
| | | renderer.setClearAlpha(0); |
| | | renderer.setPixelRatio(window.devicePixelRatio); |
| | | scene.background = null; |
| | | let dracoLoader = new DRACOLoader(); |
| | | dracoLoader.setDecoderPath("ThreeModel/draco/"); |
| | | dracoLoader.setDecoderConfig({ type: "js" }); |
| | | dracoLoader.preload(); |
| | | // å è½½GLTF模å |
| | | const loader = new GLTFLoader(); |
| | | loader.setDRACOLoader(dracoLoader); |
| | | loader.load( |
| | | "ThreeModel/modelDraco.glb", // æ¿æ¢ä¸ºä½ ç.gltfæä»¶è·¯å¾ |
| | | (gltf) => { |
| | | const model = gltf.scene; |
| | | model.scale.set(80, 80, 80); |
| | | scene.add(model); |
| | | // èªå¨å±
䏿¨¡åï¼å¯éï¼ |
| | | const box = new THREE.Box3().setFromObject(model); |
| | | const center = box.getCenter(new THREE.Vector3()); |
| | | model.position.sub(center); |
| | | }, |
| | | (xhr) => { |
| | | // å è½½è¿åº¦åè° |
| | | // console.log(`${(xhr.loaded / xhr.total * 100).toFixed(1)}% loaded`); |
| | | }, |
| | | (error) => { |
| | | console.error("å 载失败:", error); |
| | | } |
| | | ); |
| | | // å¨ç»å¾ªç¯ |
| | | const animate = () => { |
| | | requestAnimationFrame(animate); |
| | | controls.update(); // å¯ç¨æ§å¶å¨æ¶éè¦ |
| | | renderer.render(scene, camera); |
| | | }; |
| | | initData(); |
| | | showModel(); |
| | | |
| | | animate(); |
| | | mainTag.addEventListener("wheel", () => { |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | }); |
| | | mainTag.addEventListener("mousemove", () => { |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | }); |
| | | // }; |
| | | document.addEventListener("click", handleClickOutside); |
| | | |
| | | // showModel(); |
| | | }); |
| | | </script> |
| | | <style lang="scss" scoped> |