|
|
<template>
|
|
|
<div
|
|
|
style="width: 1000px;height:800px;"
|
|
|
class="echar"
|
|
|
ref="charts"
|
|
|
id="main"
|
|
|
></div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import * as echarts from "echarts/core";
|
|
|
import { DatasetComponent } from "echarts/components";
|
|
|
import { CanvasRenderer } from "echarts/renderers";
|
|
|
import { Scatter3DChart } from "echarts-gl/charts";
|
|
|
import { Grid3DComponent } from "echarts-gl/components";
|
|
|
|
|
|
echarts.use([
|
|
|
DatasetComponent,
|
|
|
Grid3DComponent,
|
|
|
Scatter3DChart,
|
|
|
CanvasRenderer,
|
|
|
]);
|
|
|
export default {
|
|
|
props: ["src"],
|
|
|
name: "pointCloud",
|
|
|
watch: {
|
|
|
//监听并接收父组件的visible并赋值给isShow(子组件接收父组件props传过来的值时不能起一样的类名,会报重复定义的错)
|
|
|
src: function (newVal) {
|
|
|
console.log(newVal);
|
|
|
this.srcPath = newVal; //newVal即是visible
|
|
|
// newVal && this.showConfirm(); //newVal存在的话执行showConfirm函数
|
|
|
},
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
dat: [],
|
|
|
option: {},
|
|
|
myChart: {},
|
|
|
srcPath: "",
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
|
getData(myChart, option) {
|
|
|
let file_url = this.src;
|
|
|
console.log(file_url);
|
|
|
let xhr = new XMLHttpRequest();
|
|
|
xhr.open("get", file_url, true);
|
|
|
xhr.onload = function () {
|
|
|
if (xhr.status == 200) {
|
|
|
// if (callback) {
|
|
|
// callback();
|
|
|
console.log(xhr.response);
|
|
|
var lines = xhr.response.split("\r\n").slice(12);
|
|
|
console.log(lines);
|
|
|
// 将每行以空格作为分隔符形成二维数组
|
|
|
var dataArray = lines.map(function (line) {
|
|
|
console.log();
|
|
|
var arry = line.trim()
|
|
|
.split(" ")
|
|
|
.map(function (value) {
|
|
|
return 1 * parseFloat(value);
|
|
|
});
|
|
|
if(arry[2]>3000){
|
|
|
console.log(arry);
|
|
|
return "";
|
|
|
}
|
|
|
if(arry[1]>1000 || arry[1]<-1000){
|
|
|
console.log(arry);
|
|
|
return "";
|
|
|
}
|
|
|
if(arry[0]>1000 ||arry[0]<-500){
|
|
|
console.log(arry);
|
|
|
return "";
|
|
|
}
|
|
|
arry[2] = arry[2]-1000;
|
|
|
return arry;
|
|
|
}).filter(item => item !== "");
|
|
|
option.dataset.source = dataArray;
|
|
|
console.log(option);
|
|
|
myChart.setOption(option);
|
|
|
}
|
|
|
};
|
|
|
xhr.send();
|
|
|
// 读取文件内容
|
|
|
},
|
|
|
myEcharts() {
|
|
|
// 基于准备好的dom,初始化echarts实例
|
|
|
var myChart = echarts.init(document.getElementById("main"));
|
|
|
|
|
|
// x 轴的最小值和最大值
|
|
|
let minX = Math.min(...data.map(item => item[0]));
|
|
|
let maxX = Math.max(...data.map(item => item[0]));
|
|
|
|
|
|
// 定义颜色渐变范围
|
|
|
let colorMin = '#61dfff '; // 最小值的颜色
|
|
|
let colorMax = '#366fff'; // 最大值的颜色
|
|
|
var symbolSize = 1.5;
|
|
|
var option = {
|
|
|
grid3D: {
|
|
|
viewControl: {
|
|
|
beta: -90,
|
|
|
alpha: 15,
|
|
|
distance: 75,
|
|
|
},
|
|
|
},
|
|
|
xAxis3D: {
|
|
|
min: 0,
|
|
|
max: 2000,
|
|
|
},
|
|
|
yAxis3D: {
|
|
|
min: -1000,
|
|
|
max: 1000,
|
|
|
},
|
|
|
zAxis3D: {
|
|
|
min: -1000,
|
|
|
max: 1000,
|
|
|
},
|
|
|
dataset: {
|
|
|
dimensions: ["z", "y", "x"],
|
|
|
source: this.dat,
|
|
|
},
|
|
|
series: [
|
|
|
|
|
|
{
|
|
|
itemStyle: {
|
|
|
color: function (params) {
|
|
|
// 计算当前点在 x 轴上的位置比例
|
|
|
let ratio = (params.data[0] - minX) / (maxX - minX);
|
|
|
// 根据比例计算对应的颜色
|
|
|
let color = echarts.color.gradient(colorMin, colorMax)(ratio);
|
|
|
|
|
|
return color;
|
|
|
}
|
|
|
},
|
|
|
type: "scatter3D",
|
|
|
symbolSize: symbolSize,
|
|
|
encode: {
|
|
|
x: "x",
|
|
|
y: "y",
|
|
|
z: "z",
|
|
|
},
|
|
|
},
|
|
|
],
|
|
|
};
|
|
|
|
|
|
this.getData(myChart, option);
|
|
|
},
|
|
|
},
|
|
|
mounted() {
|
|
|
this.myEcharts();
|
|
|
},
|
|
|
};
|
|
|
</script> |