| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import * as THREE from "three";
- import { Line2 } from "three/examples/jsm/lines/Line2.js";
- import { LineGeometry } from "three/examples/jsm/lines/LineGeometry.js";
- import gotoPic from "@/assets/image/goto.png";
- const offset = 0.25;
- function pointsToArray(arr) {
- let res = [];
- arr.forEach((i) => {
- res = res.concat(i.toArray());
- });
- return res;
- }
- let m = new THREE.MeshBasicMaterial({
- map: new THREE.TextureLoader().load(gotoPic),
- color: 0x26559b,
- transparent: true,
- });
- export default class LinePoints extends Line2 {
- constructor(points, dir, matLine) {
- let g = new THREE.PlaneGeometry(0.1, 0.1);
- g.rotateX(-Math.PI / 2);
- let cross = new THREE.Mesh(g, m);
- let a = new THREE.Vector3(points[0], points[1], points[2]);
- let b = new THREE.Vector3(points[3], points[4], points[5]);
- let c = new THREE.Vector3(points[6], points[7], points[8]);
- let d = new THREE.Vector3(points[9], points[10], points[11]);
- let diff;
- switch (dir) {
- case 0:
- //top
- cross.rotation.y = -Math.PI / 2;
- cross.position.copy(d);
- break;
- case 1:
- //left
- diff = c.x < d.x;
- cross.rotation.y = diff ? 0 : -Math.PI;
- diff ? (cross.position.x -= 0.02) : (cross.position.x += 0.02);
- break;
- case 2:
- //bottom
- cross.position.copy(d);
- cross.rotation.y = Math.PI / 2;
- cross.position.z += 0.02;
- break;
- case 3:
- //right
- diff = c.x < d.x;
- cross.position.copy(d);
- cross.rotation.y = diff ? 0 : Math.PI;
- diff ? (cross.position.x -= 0.02) : (cross.position.x += 0.02);
- break;
- }
- const geometry = new LineGeometry();
- cross.visible = false;
- console.log("points", points);
- geometry.setPositions(points);
- super(geometry, matLine);
- this.scale.set(1, 1, 1);
- this.position.y += 0.5;
- this.add(cross);
- }
- }
|