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; }