view

var lineGroups = [];
        var linesMaterial=null;
        function getLeafNodes (model, dbIds) {
            const instanceTree = model.getData().instanceTree;
            dbIds = dbIds || instanceTree.getRootId();
            const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds];
            let leafIds = [];
            const getLeafNodesRec = (id) => {
                var childCount = 0;
                instanceTree.enumNodeChildren(id, (childId) => {
                    getLeafNodesRec(childId);
                    ++childCount;
                })
                if (childCount == 0) {
                    leafIds.push(id);
                }
            }
            for (var i = 0; i < dbIdArray.length; ++i) {
                getLeafNodesRec(dbIdArray[i]);
            }
            return leafIds;
        }    


        function createMaterial (color = 0x000000, opacity = 1.0) {
            return new THREE.LineBasicMaterial({
              color: new THREE.Color(color),
              transparent: true,
              depthWrite: false,
              depthTest: true,
              linewidth: 10,
              opacity
            })
        }
        function getFragIds (model, dbIds) {
            const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds];
            const instanceTree =model.getData().instanceTree;
            const leafIds =getLeafNodes(model, dbIdArray);
            let fragIds = [];
            for(var i=0; i< leafIds.length; ++i) {
                instanceTree.enumNodeFragments(
                leafIds[i], (fragId) => {
                    fragIds.push(fragId);
                });
            }
            return fragIds;
        }
        function getWorldBoundingBox(model, dbId) {
            var fragIds =getFragIds(model, dbId);
            if(!fragIds.length){
               return reject('No geometry, invalid dbId?');
            }
            var fragList = model.getFragmentList();
            var fragbBox = new THREE.Box3();
            var nodebBox = new THREE.Box3();
            fragIds.forEach(function(fragId) {
              fragList.getWorldBounds(fragId, fragbBox);
              nodebBox.union(fragbBox);
            });
            return nodebBox;
        }
        function drawBox (bbox,viewer) {
            const geometry = new THREE.Geometry();
            const { min, max } = bbox;
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, max.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, max.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, max.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, min.z));
            geometry.vertices.push(new THREE.Vector3(max.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(max.x, max.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, min.y, max.z));
            geometry.vertices.push(new THREE.Vector3(min.x, max.y, max.z));
            this.linesMaterial=createMaterial(0x0000FF);
            const lines = new THREE.Line(geometry,this.linesMaterial,THREE.LinePieces);
            this.lineGroups.push(lines);
            viewer.impl.createOverlayScene ('boundingBox',this.linesMaterial)
            viewer.impl.addOverlay('boundingBox', lines);
            viewer.impl.invalidate(true, true, true);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值