在Cesium中,异步加载模型后如何正确定位到模型?

新手上路,请多包涵
function locatedPrimitive(primitive: Cesium.Primitive, viewer: Cesium.Viewer) {
  //控制台输出model,有_boundingSpheres[0]属性
  console.log(primitive)
    //控制台输出属性,为undefined
  console.log(primitive._boundingSpheres[0])
//报错未定义
  var bounding = primitive._boundingSpheres[0];
  console.log(primitive);
  console.log(primitive._boundingSpheres[0]);
  viewer.camera.viewBoundingSphere(bounding);
}

const addPrimitive = async (
  primitive: Cesium.Primitive,
  viewer: Cesium.Viewer,
) => {
    //异步加载模型
  var model_promise = Promise.resolve(viewer.scene.primitives.add(primitive))
//加载完成后定位到模型
  model_promise.then((model:any)=>{
//定位函数
      locatedPrimitive(model,viewer)
  })
};

我使用了一个异步函数来添加primitive,加载完成后通过model的包围盒属性定位到model的位置,报错model的_boundingSpheres未定义

控制台中打印model和model._boundingSpheres,model定义,_boundingShpere未定义,如下图:
image.png
将addPrimitive修改后,打印出了model和model._boundingSpheres,但是我不希望使用setTimeout函数,才使用promise避免传入时间参数。

const addPrimitive = async (
  primitive: Cesium.Primitive,
  viewer: Cesium.Viewer,
) => {
    //异步加载模型
  var model_promise = Promise.resolve(viewer.scene.primitives.add(primitive))
//加载完成后定位到模型
  model_promise.then((model:any)=>{
//定位函数
  setTimeout(()=>{
      locatedPrimitive(model,viewer)
  }
  ,1000)
  })
};

image.png

阅读 636
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题