如何只删除添加到Cesium中的基元的几何实例

时间:2015-10-20 15:28:05

标签: cesium

我看到了一些类似的问题,例如如何删除所有原语等等,但没有一个答案对我有帮助。我在我的cesium上加载了几个CZML文件,同时我需要使用来自CZML的数据添加一些几何实例,比如我在这里提供的代码到我的cesium文件。

我的模型中有两种情况,其中一种情况我要删除所有我的原语,数据源和实体,我使用了TinyTds::Error: Introducing FOREIGN KEY constraint 'fk_rails_7e223a7fac' on table 'contacts' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.: ALTER TABLE [contacts] ADD CONSTRAINT [fk_rails_7e223a7fac] 方法。当我试图删除基元和实体时,我得到reset(),当我只删除基元时,它说集合中已经存在一些实体,这意味着它不能删除所有实体。

在第二种情况下,我只想删除我创建的几何实例,但我想保留其他实体和数据源。如果我删除所有原语,我将丢失一些我需要的实体。

我在加载CZML以创建几何实例时有一个方法,如下所示:

DeveloperError: This object was destroyed, i.e., destroy() was called.Error

我的重置方法如下,

function createMap(West,East,South,North,hNumber,VNumber){
var baseSouth=South;
    var vdivid=(North-South)/VNumber;
    var hdivid=(East-West)/hNumber;
for (var i=0;i<hNumber;i++){        
    for(var j=0;j<vNumber;j++){
    var rectangleInstance = new Cesium.GeometryInstance({
      geometry : new Cesium.RectangleGeometry({
      rectangle : Cesium.Rectangle.fromDegrees((West+j*vdivid), baseSouth,(West+(j+1)*vdivid) , baseSouth+hdivid)
      }),
      id : 'rectangle'+i+'.'+j,
      attributes : {
        color : new Cesium.ColorGeometryInstanceAttribute.fromColor(getRandomColor(0.2))
      }
    });
    scene.primitives.add(new Cesium.GroundPrimitive({
      geometryInstance : rectangleInstance
    }));        
    baseSouth=baseSouth+hdivid;
}
};

getRandomColor是一个随机生成某些特定铯颜色的函数。我定义了这个方法,因为我想生成一些特定的随机颜色(例如只有绿色,黄色,蓝色和红色)

1 个答案:

答案 0 :(得分:0)

感谢您发布重置功能。我相信这里的问题是你对scene.primitives.removeAll()的调用是删除属于dataSource的原语。但在这种情况下,我认为简单地重新订购清除是安全的。

尝试一下:

function reset() {
    clock.multiplier = 1.0;

    // First, remove all dataSources.  Removing a dataSource will
    // automatically remove its associated entities & primitives.
    viewer.dataSources.removeAll();

    // Next, remove any remaining entities that weren't part of a dataSource.
    viewer.entities.removeAll();

    // Finally, it is safe to remove any remaining primitives, as we can
    // now be certain they did not belong to any dataSource or entity.
    scene.primitives.removeAll();
};