#### # new Fluid(options)

流体模拟对象

#### 参数:

名称 | 类型 | 默认值 | 描述
--- | --- | --- | ---
`options` | Object |  | 实例化流体模拟对象所需的参数
`viewer` | Cesium.Viewer |  | 场景视图对象
`rectangle` | Cesium.Rectangle |  | 流体模拟的地理范围
`samplePrecision` | Number |  | 模拟精度，单位米，表示间隔多少米采样一个点模拟。当用户不指定时，内部会根据模拟区域的范围大小自动计算一个模拟精度。理论上采样精度越高，模拟结果越精细，但模拟性能也会随之降低。同时受限于浏览器限制，纹理大小有上限，采样间隔不能太小
`sampleMode` | String |  | 流体可视化的采样模式，可取值有两个：'linear'、'nearest'，分别为线性采样和临近采样，对于模拟区域内存在类似建筑物等垂直突变物体的情况，建议采用临近采样模式，默认值为临近采样'nearest'
`color` | Object |  | 流体模拟的色表（使用方法详见下方示例）
`flowParticle` | FlowParticle | new FlowParticle() | 流体模拟的粒子效果对象
`fluidReflection` | FluidReflection | new FluidReflection() | 流体模拟的反射效果对象
`fluidShadow` | FluidShadow | new FluidShadow() | 流体模拟的阴影效果对象
`fluidSpecular` | FluidSpecular | new FluidSpecular() | 流体模拟的高光效果对象
`fluidFoam` | FluidFoam | new FluidFoam() | 流体模拟的白浪效果对象
`show` | Boolean | false | 是否显示流体模拟

返回值:

返回根据参数实例化的流体模拟对象

类型: Object

##### 示例

<h7>流体色表的格式规则</h7>

    // 流体模拟色表是一个简单JavaScript对象，通过对象属性的key和value值表示不同深度的过渡颜色值
    // 其中key表示流体深度（单位米），value表示在此深度下的流体颜色，如：
    const singleColorTable = {
      0: new Cesium.Color.BLUE,
    }
    // 上述色表描述的是深度在小于0，等于0，大于0时流体的颜色为蓝色，即将流体的所有颜色一致设置为蓝色

    // 除此之外还可以给不同高度区间设置颜色过渡效果，如：
    const multipleColorTable = {
      0: new Cesium.Color.RED,
      5: new Cesium.Color.GREEN,
      10: new Cesium.Color.BLUE,
    }
    // 上述色表的解读如下：
    //   1. 深度小于0时，显示红色；
    //   2. 深度处于0到5之间时，根据值的大小，显示在红色和绿色之间的插值颜色；
    //   3. 深度处于5到10之间时，根据值的大小，显示在绿色和蓝色之间的插值颜色；
    //   4. 深度大于10时，显示蓝色；

<h7>创建流体模拟对象</h7>

    // ES5引入方式
    const { Fluid } = zondy
    // ES6引入方式
    import { Fluid } from "@mapgis/webclient-cesium-plugin"

    // 创建流体模拟对象
    const fluid = new Fluid({
      show: true,
      samplePrecision: 10,
    })

### 成员变量

类型: Object

#### # color

流体模拟渲染的色表（使用方法详见上方示例）

类型: FlowParticle

#### # flowParticle

流体模拟的粒子对象

类型: FluidSourceCollection

#### # fluidSources

流体模拟的源集合对象

类型: FluidFoam

#### # foam

白浪特效对象

类型: Array

#### # objectsToExclude

不参与流体模拟的对象

类型: Boolean

#### # readonly ready

流体模拟对象是否创建准备就绪

类型: Promise

#### # readonly readyPromise

流体模拟对象是否创建准备就绪的回调方法

类型: Cesium.Rectangle

#### # rectangle

流体模拟的范围

类型: FluidReflection

#### # reflection

流体反射特效对象

类型: Number

#### # readonly samplePrecision

流体模拟的采样精度

类型: FluidShadow

#### # shadow

阴影特效对象

类型: Boolean

#### # show

是否显示流体模拟结果

类型: FluidSpecular

#### # specular

高光特效对象

类型: Number

#### # speed

流体模拟流动速度

### 方法

#### # addObjects(options)

添加刚体到流体模拟中

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`options` | Object | 添加流体模拟刚体的参数
`objects` | Array | 需要添加到流体模拟的刚体对象数组
`heightMapUpdateCallback` | function | 添加刚体成功后的回调

##### 示例

    // 创建刚体对象，如创建一个Entity Box
    const blueBox = new Cesium.Entity({
      name: "Blue box",
      position: Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0),
      box: {
        dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material: Cesium.Color.BLUE,
      }
    })

    // 创建上述刚体对象的透明形式，由于刚体添加到流体模拟中有延迟，因此可以创建一个透明刚体
    // 用于展示添加刚体的位置，可以在添加刚体成功的回调方法中将其移除，其目的是优化可视化效果
    const blueBoxTransparent = new Cesium.Entity({
      name: "Blue box",
      position: Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0),
      box: {
        dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material: Cesium.Color.BLUE.withAlpha(0.5),
      }
    })
    // 将透明刚体添加到场景中
    viewer.entities.add(blueBoxTransparent)

    // 将刚体添加到流体模拟对象中
    fluid.addObjects({
      objects: [blueBox], // 添加刚体到流体模拟中
      heightMapUpdateCallback: () => {
        // 将刚体添加到场景中
        viewer.entities.add(blueBox);
        // 移除场景中用于优化可视化效果的透明刚体
        viewer.entities.remove(blueBoxTransparent);
      },
    });

#### # destroy()

销毁流体模拟对象

##### 示例

    fluid.destroy()

#### # pause()

暂停流体模拟

##### 示例

    fluid.pause()

#### # removeObjects(options)

从流体模拟中移除刚体

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`options` | Object | 移除流体模拟刚体的参数
`objects` | Array | 需要从流体模拟中删除的刚体对象数组
`heightMapUpdateCallback` | function | 移除刚体成功后的回调

##### 示例

    // 将刚体从流体模拟中移除
    fluid.removeObjects({
      objects: [blueBox],
      heightMapUpdateCallback: () => {
        // 将刚体从场景中移除
        viewer.entities.remove(blueBox);
      },
    });

#### # start()

开始流体模拟

##### 示例

    fluid.start()

#### # update(options)

触发更新高度图的接口，当场景有变化需要做同步时需要调用

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`options` | Object | 更新流体模拟的参数
`heightMapUpdateCallback` | function | 添加流体模拟成功后的回调