更新爆炸图例子

This commit is contained in:
ChenX
2018-10-29 14:49:40 +08:00
parent bda2b05204
commit d79d759091
5 changed files with 96 additions and 43 deletions

View File

@@ -1,9 +1,11 @@
// import { Color, Face3, MeshBasicMaterial, Object3D, Vector2, Vector3 } from "three";
// import "./style.css";
import { data } from "../data";
import { Viewer } from "../Viewer";
import { Vector3 } from "three";
import { CameraControlState } from "../CameraControls";
import { data } from "../data";
import { GetBox } from "../GeUtils";
import { LoadBoard } from "../Utils";
import { Viewer } from "../Viewer";
let btn = document.createElement("button");
btn.innerHTML = "载入"
@@ -13,6 +15,10 @@ let btn2 = document.createElement("button");
btn2.innerHTML = "清理"
document.body.appendChild(btn2);
let btn3 = document.createElement("button");
btn3.innerHTML = "爆炸图"
document.body.appendChild(btn3);
let el = document.createElement("canvas");
el.style.width = "80%";
@@ -39,3 +45,51 @@ btn2.onclick = () =>
{
// LoadBoard(view, []);
}
btn3.onclick = () =>
{
let box = GetBox(view.m_Scene);
let cen = box.getCenter(new Vector3());
let m = [];
for (let obj of view.m_Scene.children)
{
if (obj.userData && obj.userData instanceof Vector3)
{
let objCen = GetBox(obj).getCenter(new Vector3());
let v = objCen.clone().sub(cen);
let zv = obj.userData as Vector3;
if (zv instanceof Vector3)
{
let d = zv.dot(v);
// m.set(obj, zv.clone().multiplyScalar(d));
m.push([obj, zv.clone().multiplyScalar(d)]);
}
}
}
let count = 0;
let t = setInterval(() =>
{
for (let [o, v] of m)
{
o.position.add(
v.clone().multiplyScalar(1.5 / 120)
);
o.updateMatrix();
}
view.ZoomAll();
view.m_bNeedUpdate = true;
count++;
if (count === 60)
clearInterval(t);
}, 16)
}