xBIM WeXplorer xViewer的导航,相机、剖切、隐藏 等操作

   目录

    基础
     高级应用
  • xBIM 综合使用案例与 ASP.NET MVC 集成(一)
  • xBIM 综合使用案例与 ASP.NET MVC 集成(二)
  • xBIM 综合使用案例与 ASP.NET MVC 集成(三)

     在本次我们探讨xViewer 的导航、剖切、隐藏、相机位置。这应该足以让用户通过所有缩放、平移和隐藏可能的障碍物来检查建筑物内部。

 1、相机位置

     根据产品的ID设置相机目标很容易。可能最常见的方法是根据用户操作设置一个目标。这些需要用户选择按钮或者鼠标操作来设置。如下例子:

viewer.on('pick', function (args) {
    var id = args.id;
    viewer.setCameraTarget(id);
    pickedId = id;
});

    使用 setCameraTarget() 方法设置相机位置也很容易,如下实例将使用HTML输入来设置值。

<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 只使用浏览器的默认导航功能,这些功能在鼠标左键轨道上运行,平移中键和放大滚动键。这应该是 直观的。请注意,查看器的最佳做法是将其放在一个没有垂直滚动条的页面上。因为缩放模型并同时滚动网站,缩放很难。如果您希望这样做,可以使用以下代码更改左按钮的默认行为:

<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轴旋转时,默认轨道模式是固定的旋转。您也可以使用围绕实际轴旋转模型的自由旋转,因此更自由。你可以用这个从不同寻常的角度看模型。就像提示一样 - 如果需要的话,画圆圈来调整水平面。

2、剖切

     剖切我们会经常使用,用户想要看到建筑物内部深处的东西。建筑物内部的导航可能会很容易变得复杂,但如果您可以剖切建筑物并看到内部,则可以让用户的操作变得更加轻松。这也是默认情况下在查看器中构建的。如果您将平面上的点和平面上的点传递给方法,您可以使用clip()方法自己设置裁剪平面,或者如果您调用没有参数的方法,您可以让用户以交互方式定义裁剪平面。使用unclip()方法比完全放弃剪辑。

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

 3、隐藏

      有时你也需要隐藏一个元素或一种元素,让我们说所有的墙壁。这可以通过使用setState()方法设置产品的状态来实现。使用resetStates()方法将所有状态重置为默认状态。此方法有一个可选参数,您可以使用它来显示空格。这些都是默认隐藏的,除非您将它们显示为manualy。

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

 

posted @ 2018-02-26 00:19  在 水 一 方  阅读(1935)  评论(0编辑  收藏  举报