mirror of https://gitee.com/cf-fz/WebCAD.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
4.0 KiB
165 lines
4.0 KiB
import './UI/Css/style.less';
|
|
|
|
import * as THREE from 'three';
|
|
|
|
import { guiMaterial, guiMeshBasicMaterial, guiScene } from './Common/Material';
|
|
import { CameraControlState } from './Editor/CameraControls';
|
|
import { DatGUI } from './Editor/DebugDatUi';
|
|
import { RenderType } from './GraphicsSystem/Enum';
|
|
import { WebCADView } from './WebCADView/WebCADView';
|
|
|
|
function createRootElement()
|
|
{
|
|
let root = document.createElement('div');
|
|
root.id = "viewer"
|
|
root.style.height = "100%";
|
|
document.body.appendChild(root);
|
|
return root;
|
|
}
|
|
|
|
function createContent()
|
|
{
|
|
let el = document.createElement("div");
|
|
el.style.position = "absolute";
|
|
el.style.top = "0";
|
|
el.style.width = "100%";
|
|
return el;
|
|
}
|
|
|
|
function createBtn(textCtx: string, parEl: HTMLElement, callback: any)
|
|
{
|
|
let btn = document.createElement("button");
|
|
btn.textContent = textCtx;
|
|
btn.onclick = callback;
|
|
parEl.appendChild(btn);
|
|
return btn;
|
|
}
|
|
|
|
let bulbLight: THREE.PointLight
|
|
|
|
window.onload = async () =>
|
|
{
|
|
let el = createRootElement();
|
|
|
|
|
|
let app = new WebCADView(el);
|
|
|
|
window.addEventListener("resize", () =>
|
|
{
|
|
app.m_Viewer.onSize();
|
|
})
|
|
|
|
let param = parseQuery(window.location.search);
|
|
let cdnUrl = "http://ovfprkza3.bkt.clouddn.com/";// old "/upload/"
|
|
if (param.hasOwnProperty("id"))
|
|
{
|
|
await app.Load(`${cdnUrl}${param["id"]}.json`, cdnUrl);
|
|
}
|
|
let hemiLight = new THREE.AmbientLight(0xffffff, 3);
|
|
app.m_Viewer.Scene.add(hemiLight)
|
|
|
|
app.EdgeShow();
|
|
app.ZoomAll();
|
|
|
|
//内容
|
|
let content = createContent();
|
|
el.appendChild(content);
|
|
|
|
createBtn("缩放", content, () =>
|
|
{
|
|
app.m_Viewer.ZoomAll();
|
|
});
|
|
|
|
createBtn("俯视", content, () =>
|
|
{
|
|
app.ViewToTop();
|
|
app.m_Viewer.ZoomAll();
|
|
});
|
|
|
|
createBtn("前视", content, () =>
|
|
{
|
|
app.ViewToFont();
|
|
app.ZoomAll();
|
|
});
|
|
createBtn("西南", content, () =>
|
|
{
|
|
app.m_Viewer.m_CameraCtrl.LookAt(new THREE.Vector3(1, 1, -1));
|
|
app.ZoomAll();
|
|
});
|
|
createBtn("右视", content, () =>
|
|
{
|
|
app.m_Viewer.m_CameraCtrl.LookAt(new THREE.Vector3(-1, 0, 0));
|
|
app.ZoomAll();
|
|
});
|
|
|
|
createBtn("实体", content, () =>
|
|
{
|
|
app.SolidShow();
|
|
app.m_Viewer.m_bNeedUpdate = true;
|
|
});
|
|
createBtn("线框", content, () =>
|
|
{
|
|
app.EdgeShow();
|
|
app.m_Viewer.m_bNeedUpdate = true;
|
|
});
|
|
|
|
|
|
let btn: HTMLElement;
|
|
function rotateSwithMove()
|
|
{
|
|
if (app.m_CamerCtrl.m_TouthTypeList[0] == CameraControlState.Rotate)
|
|
{
|
|
app.m_CamerCtrl.m_TouthTypeList[0] = CameraControlState.Pan;
|
|
btn.textContent = "平移";
|
|
}
|
|
else
|
|
{
|
|
app.m_CamerCtrl.m_TouthTypeList[0] = CameraControlState.Rotate;
|
|
btn.textContent = "旋转";
|
|
}
|
|
|
|
}
|
|
btn = createBtn("旋转", content, rotateSwithMove);
|
|
|
|
|
|
{
|
|
let mat = new THREE.MeshBasicMaterial({ color: 0xc8575b })
|
|
let geometry = new THREE.BoxGeometry(10, 10, 10);
|
|
|
|
let mat2 = new THREE.MeshNormalMaterial();
|
|
let mesh = new THREE.Mesh(geometry, mat);
|
|
window["mat"] = mat2;
|
|
let gui = new DatGUI();
|
|
|
|
guiMeshBasicMaterial(gui.m_Ctrl_UI, mesh, mat, mesh.geometry);
|
|
guiMaterial(gui.m_Ctrl_UI, mesh, mat, mesh.geometry);
|
|
guiScene(gui.m_Ctrl_UI, app.m_Viewer.Scene, app.m_Viewer.m_Render, hemiLight);
|
|
|
|
app.m_Viewer.Scene.add(mesh);
|
|
}
|
|
}
|
|
|
|
function parseQuery(search): Object
|
|
{
|
|
let args = search.substring(1).split('&');
|
|
let argsParsed = {};
|
|
let i, arg, kvp, key, value;
|
|
|
|
for (i = 0; i < args.length; i++)
|
|
{
|
|
arg = args[i];
|
|
if (-1 === arg.indexOf('='))
|
|
{
|
|
argsParsed[decodeURIComponent(arg).trim()] = true;
|
|
}
|
|
else
|
|
{
|
|
kvp = arg.split('=');
|
|
key = decodeURIComponent(kvp[0]).trim();
|
|
value = decodeURIComponent(kvp[1]).trim();
|
|
argsParsed[key] = value;
|
|
}
|
|
}
|
|
return argsParsed;
|
|
}
|