# 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
示例
// 流体模拟色表是一个简单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时,显示蓝色;
// ES5引入方式
const { Fluid } = zondy
// ES6引入方式
import { Fluid } from "@mapgis/webclient-cesium-plugin"
// 创建流体模拟对象
const fluid = new Fluid({
show: true,
samplePrecision: 10,
})
成员变量
方法
# 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);
},
});
# removeObjects(options)
从流体模拟中移除刚体
参数:
名称 | 类型 | 描述 |
---|---|---|
options |
Object | 移除流体模拟刚体的参数 |
objects |
Array | 需要从流体模拟中删除的刚体对象数组 |
heightMapUpdateCallback |
function | 移除刚体成功后的回调 |
示例
// 将刚体从流体模拟中移除
fluid.removeObjects({
objects: [blueBox],
heightMapUpdateCallback: () => {
// 将刚体从场景中移除
viewer.entities.remove(blueBox);
},
});
# update(options)
触发更新高度图的接口,当场景有变化需要做同步时需要调用
参数:
名称 | 类型 | 描述 |
---|---|---|
options |
Object | 更新流体模拟的参数 |
heightMapUpdateCallback |
function | 添加流体模拟成功后的回调 |