在本次咱们探讨xViewer 的导航、剖切、隐藏、相机位置。这应该足以让用户经过全部缩放、平移和隐藏可能的障碍物来检查建筑物内部。javascript
根据产品的ID设置相机目标很容易。可能最多见的方法是根据用户操做设置一个目标。这些须要用户选择按钮或者鼠标操做来设置。以下例子:html
viewer.on('pick', function (args) { var id = args.id; viewer.setCameraTarget(id); pickedId = id; });
使用 setCameraTarget() 方法设置相机位置也很容易,以下实例将使用HTML输入来设置值。java
<input type="text" id="camX" value="-15000" /> <input type="text" id="camY" value="-15000" /> <input type="text" id="camZ" value="15000" /> <button onclick="SetCamera()">Set camera</button> <script type="text/javascript"> function SetCamera() { if (viewer) { var iX = document.getElementById('camX'); var iY = document.getElementById('camY'); var iZ = document.getElementById('camZ'); viewer.setCameraPosition([iX.value, iY.value, iZ.value]); } } </script>
可以向模型或零件显示默认轴对齐视图老是很重要的。这是xViewer的内置功能。它始终根据setCameraTarget()方法设置的原点和距离进行操做。在该示例中,每当用户选择如上所列的元素时,相机目标被设置。浏览器
<button onclick="if (viewer) viewer.show('front');">前</button> <button onclick="if (viewer) viewer.show('back');">后</button> <button onclick="if (viewer) viewer.show('top');">上</button> <button onclick="if (viewer) viewer.show('bottom');">下</button> <button onclick="if (viewer) viewer.show('left');">左</button> <button onclick="if (viewer) viewer.show('right');">右</button>
xViewer 只使用浏览器的默认导航功能,这些功能在鼠标左键轨道上运行,平移中键和放大滚动键。这应该是 直观的。请注意,查看器的最佳作法是将其放在一个没有垂直滚动条的页面上。由于缩放模型并同时滚动网站,缩放很难。若是您但愿这样作,可使用如下代码更改左按钮的默认行为:ide
<button onclick="if (viewer) viewer.navigationMode = 'orbit';"> 旋转 </button> <button onclick="if (viewer) viewer.navigationMode = 'free-orbit';"> 自由旋转 </button> <button onclick="if (viewer) viewer.navigationMode = 'pan';"> 平移 </button> <button onclick="if (viewer) viewer.navigationMode = 'zoom';"> 缩放 </button> <button onclick="if (viewer) viewer.navigationMode = 'none';"> 彻底禁用默认导航 </button>
当模型绕Z轴旋转时,默认轨道模式是固定的旋转。您也可使用围绕实际轴旋转模型的自由旋转,所以更自由。你能够用这个从不一样寻常的角度看模型。就像提示同样 - 若是须要的话,画圆圈来调整水平面。网站
剖切咱们会常常使用,用户想要看到建筑物内部深处的东西。建筑物内部的导航可能会很容易变得复杂,但若是您能够剖切建筑物并看到内部,则可让用户的操做变得更加轻松。这也是默认状况下在查看器中构建的。若是您将平面上的点和平面上的点传递给方法,您可使用clip()方法本身设置裁剪平面,或者若是您调用没有参数的方法,您可让用户以交互方式定义裁剪平面。使用unclip()方法比彻底放弃剪辑。spa
<button onclick="if (viewer) viewer.clip();">开始剖切</button> <button onclick="if (viewer) viewer.unclip();">取消剖切</button> <input type="text" id="clipOrigX" value="0" /> <input type="text" id="clipOrigY" value="0" /> <input type="text" id="clipOrigZ" value="0" /> <input type="text" id="clipNormX" value="-1" /> <input type="text" id="clipNormY" value="0" /> <input type="text" id="clipNormZ" value="0" /> <button onclick="Clip()">剖切</button> <script type="text/javascript"> function Clip() { var oX = document.getElementById('clipOrigX').value; var oY = document.getElementById('clipOrigY').value; var oZ = document.getElementById('clipOrigZ').value; var nX = document.getElementById('clipNormX').value; var nY = document.getElementById('clipNormY').value; var nZ = document.getElementById('clipNormZ').value; if (viewer) viewer.clip([oX, oY, oZ], [nX, nY, nZ]); } </script>
有时你也须要隐藏一个元素或一种元素,让咱们说全部的墙壁。这能够经过使用setState()方法设置产品的状态来实现。使用resetStates()方法将全部状态重置为默认状态。此方法有一个可选参数,您可使用它来显示空格。这些都是默认隐藏的,除非您将它们显示为manualy。code
<select id="cmbHide"> <option value="noAction">无操做</option> <option value="hideProduct">隐藏产品</option> <option value="hideType">隐藏类型</option> <option value="highlight">高亮</option> </select> <button onclick="if (viewer) viewer.resetStates()">显示全部</button> <script type="text/javascript"> function initHiding() { viewer.on('pick', function (args) { var cmb = document.getElementById('cmbHide'); var option = cmb.value; switch (option) { case 'hideProduct': viewer.setState(xState.HIDDEN, [args.id]); break; case 'hideType': var type = viewer.getProductType(args.id); viewer.setState(xState.HIDDEN, type); break; case 'highlight': viewer.setState(xState.HIGHLIGHTED, [args.id]); break; default: break; } }); }; </script>