105 lines
2.6 KiB
TypeScript
105 lines
2.6 KiB
TypeScript
// import { Color, Face3, MeshBasicMaterial, Object3D, Vector2, Vector3 } from "three";
|
|
// import "./style.css";
|
|
import { Color, MeshBasicMaterial, Vector3 } from "three";
|
|
import { GetBox } from "../GeUtils";
|
|
import { LoadBoard } from "../Utils";
|
|
import { Viewer } from "../Viewer";
|
|
import data from "./data.json";
|
|
|
|
let btn = document.createElement("button");
|
|
btn.innerHTML = "载入";
|
|
document.body.appendChild(btn);
|
|
|
|
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 = "100%";
|
|
el.style.height = "80vh";
|
|
document.body.appendChild(el);
|
|
|
|
let view = new Viewer(el, (settings) =>
|
|
{
|
|
settings.boardMaterial = new MeshBasicMaterial({
|
|
color: new Color(0.8, 0.8, 0.8),
|
|
polygonOffset: true,
|
|
polygonOffsetFactor: 1, // positive value pushes polygon further away
|
|
polygonOffsetUnits: 1,
|
|
transparent: true,
|
|
opacity: 0.5
|
|
});
|
|
});
|
|
|
|
//修改这个顺序 改变1 2 3 个触摸点时的触发状态.
|
|
// view.m_CameraCtrl.m_TouthTypeList = [CameraControlState.Rotate, CameraControlState.Scale, CameraControlState.Pan];
|
|
//例如,修改单指滑动为平移.
|
|
// view.m_CameraCtrl.m_TouthTypeList = [CameraControlState.Pan, CameraControlState.Scale, CameraControlState.Rotate];
|
|
|
|
//加载
|
|
btn.onclick = () =>
|
|
{
|
|
console.time();
|
|
for (let i = 0; i < 1; i++)
|
|
LoadBoard(view, data);
|
|
console.timeEnd();
|
|
};
|
|
|
|
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);
|
|
};
|