view

xiaoxiao2021-02-28  32

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);         }
转载请注明原文地址: https://www.6miu.com/read-1000325.html

最新回复(0)