CADViewComponent/src/ViewSrc/index.ts

106 lines
2.6 KiB
TypeScript
Raw Normal View History

2018-08-17 21:26:32 +08:00
// import { Color, Face3, MeshBasicMaterial, Object3D, Vector2, Vector3 } from "three";
// import "./style.css";
2021-03-03 15:07:59 +08:00
import { Color, MeshBasicMaterial, Vector3 } from "three";
2018-08-17 21:26:32 +08:00
import { CameraControlState } from "../CameraControls";
2018-10-29 14:49:40 +08:00
import { GetBox } from "../GeUtils";
2018-08-17 21:26:32 +08:00
import { LoadBoard } from "../Utils";
2018-10-29 14:49:40 +08:00
import { Viewer } from "../Viewer";
2018-08-17 21:26:32 +08:00
let btn = document.createElement("button");
2022-02-16 13:48:57 +08:00
btn.innerHTML = "载入";
2018-08-17 21:26:32 +08:00
document.body.appendChild(btn);
let btn2 = document.createElement("button");
2022-02-16 13:48:57 +08:00
btn2.innerHTML = "清理";
2018-08-17 21:26:32 +08:00
document.body.appendChild(btn2);
2018-10-29 14:49:40 +08:00
let btn3 = document.createElement("button");
2022-02-16 13:48:57 +08:00
btn3.innerHTML = "爆炸图";
2018-10-29 14:49:40 +08:00
document.body.appendChild(btn3);
2018-08-17 21:26:32 +08:00
let el = document.createElement("canvas");
el.style.width = "80%";
el.style.height = "80%";
document.body.appendChild(el);
2021-03-03 15:07:59 +08:00
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
});
});
2018-08-17 21:26:32 +08:00
//修改这个顺序 改变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();
2022-02-16 13:48:57 +08:00
let data = require("./data.json");
2018-08-17 21:26:32 +08:00
for (let i = 0; i < 1; i++)
LoadBoard(view, data);
console.timeEnd();
2022-02-16 13:48:57 +08:00
};
2018-08-17 21:26:32 +08:00
btn2.onclick = () =>
{
// LoadBoard(view, []);
2022-02-16 13:48:57 +08:00
};
2018-10-29 14:49:40 +08:00
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);
2022-02-16 13:48:57 +08:00
}, 16);
};