bytev-charts-beta
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
163 lines (141 loc) • 5.39 kB
JavaScript
console.warn("THREE.TessellateModifier: As part of the transition to ES6 Modules, the files in 'examples/js' were deprecated in May 2020 (r117) and will be deleted in December 2020 (r124). You can find more information about developing using ES6 Modules in https://threejs.org/docs/#manual/en/introduction/Installation.");
/**
* Break faces with edges longer than maxEdgeLength
* - not recursive
*/
THREE.TessellateModifier = function (maxEdgeLength) {
this.maxEdgeLength = maxEdgeLength;
};
THREE.TessellateModifier.prototype.modify = function (geometry) {
var edge;
var faces = [];
var faceVertexUvs = [];
var maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;
for (var i = 0, il = geometry.faceVertexUvs.length; i < il; i++) {
faceVertexUvs[i] = [];
}
for (var i = 0, il = geometry.faces.length; i < il; i++) {
var face = geometry.faces[i];
if (face instanceof THREE.Face3) {
var a = face.a;
var b = face.b;
var c = face.c;
var va = geometry.vertices[a];
var vb = geometry.vertices[b];
var vc = geometry.vertices[c];
var dab = va.distanceToSquared(vb);
var dbc = vb.distanceToSquared(vc);
var dac = va.distanceToSquared(vc);
if (dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared) {
var m = geometry.vertices.length;
var triA = face.clone();
var triB = face.clone();
if (dab >= dbc && dab >= dac) {
var vm = va.clone();
vm.lerp(vb, 0.5);
triA.a = a;
triA.b = m;
triA.c = c;
triB.a = m;
triB.b = b;
triB.c = c;
if (face.vertexNormals.length === 3) {
var vnm = face.vertexNormals[0].clone();
vnm.lerp(face.vertexNormals[1], 0.5);
triA.vertexNormals[1].copy(vnm);
triB.vertexNormals[0].copy(vnm);
}
if (face.vertexColors.length === 3) {
var vcm = face.vertexColors[0].clone();
vcm.lerp(face.vertexColors[1], 0.5);
triA.vertexColors[1].copy(vcm);
triB.vertexColors[0].copy(vcm);
}
edge = 0;
} else if (dbc >= dab && dbc >= dac) {
var vm = vb.clone();
vm.lerp(vc, 0.5);
triA.a = a;
triA.b = b;
triA.c = m;
triB.a = m;
triB.b = c;
triB.c = a;
if (face.vertexNormals.length === 3) {
var vnm = face.vertexNormals[1].clone();
vnm.lerp(face.vertexNormals[2], 0.5);
triA.vertexNormals[2].copy(vnm);
triB.vertexNormals[0].copy(vnm);
triB.vertexNormals[1].copy(face.vertexNormals[2]);
triB.vertexNormals[2].copy(face.vertexNormals[0]);
}
if (face.vertexColors.length === 3) {
var vcm = face.vertexColors[1].clone();
vcm.lerp(face.vertexColors[2], 0.5);
triA.vertexColors[2].copy(vcm);
triB.vertexColors[0].copy(vcm);
triB.vertexColors[1].copy(face.vertexColors[2]);
triB.vertexColors[2].copy(face.vertexColors[0]);
}
edge = 1;
} else {
var vm = va.clone();
vm.lerp(vc, 0.5);
triA.a = a;
triA.b = b;
triA.c = m;
triB.a = m;
triB.b = b;
triB.c = c;
if (face.vertexNormals.length === 3) {
var vnm = face.vertexNormals[0].clone();
vnm.lerp(face.vertexNormals[2], 0.5);
triA.vertexNormals[2].copy(vnm);
triB.vertexNormals[0].copy(vnm);
}
if (face.vertexColors.length === 3) {
var vcm = face.vertexColors[0].clone();
vcm.lerp(face.vertexColors[2], 0.5);
triA.vertexColors[2].copy(vcm);
triB.vertexColors[0].copy(vcm);
}
edge = 2;
}
faces.push(triA, triB);
geometry.vertices.push(vm);
for (var j = 0, jl = geometry.faceVertexUvs.length; j < jl; j++) {
if (geometry.faceVertexUvs[j].length) {
var uvs = geometry.faceVertexUvs[j][i];
var uvA = uvs[0];
var uvB = uvs[1];
var uvC = uvs[2]; // AB
if (edge === 0) {
var uvM = uvA.clone();
uvM.lerp(uvB, 0.5);
var uvsTriA = [uvA.clone(), uvM.clone(), uvC.clone()];
var uvsTriB = [uvM.clone(), uvB.clone(), uvC.clone()]; // BC
} else if (edge === 1) {
var uvM = uvB.clone();
uvM.lerp(uvC, 0.5);
var uvsTriA = [uvA.clone(), uvB.clone(), uvM.clone()];
var uvsTriB = [uvM.clone(), uvC.clone(), uvA.clone()]; // AC
} else {
var uvM = uvA.clone();
uvM.lerp(uvC, 0.5);
var uvsTriA = [uvA.clone(), uvB.clone(), uvM.clone()];
var uvsTriB = [uvM.clone(), uvB.clone(), uvC.clone()];
}
faceVertexUvs[j].push(uvsTriA, uvsTriB);
}
}
} else {
faces.push(face);
for (var j = 0, jl = geometry.faceVertexUvs.length; j < jl; j++) {
faceVertexUvs[j].push(geometry.faceVertexUvs[j][i]);
}
}
}
}
geometry.faces = faces;
geometry.faceVertexUvs = faceVertexUvs;
};