
ThingJS 系统内置了很多事件,比点击鼠标、键盘输入、层级变化等。用户可以监听这些事件,在事件回调中进行相应的业务逻辑处理网页链接
拾取
通过属性和接口获取鼠标拾取(Pick)的物体
当鼠标在一个物体上悬停时,我们经常希望做一些 *** 作,比如变色等。
我们使用 Picker 类来获取鼠标拾取(Pick)的物体,通过 app.picker 得到 Picker 类来实现这个功能,见下例:
//判断拾取的物体是否改变if(app.picker.isChanged()) {
//通过app.picker.objects 得到当前拾取的物体
console.log(app.picker.objects)
//通过app.picker.previousObjects 得到之前拾取的物体
console.log(app.picker.previousObjects)}
通过事件获取鼠标拾取的物体
可以通过 MouseEnter 和 MouseLeave 来实现 。
// 鼠标拾取物体显示边框app.on(THING.EventType.MouseEnter, '.Thing' ,function(ev) {
ev.object.style.outlineColor = '#FF0000'})// 鼠标离开物体边框取消app.on(THING.EventType.MouseLeave,'.Thing', function(ev) {
ev.object.style.outlineColor = null})
查看示例
示例效果如下图所示:
请点击输入图片描述
当 Pick 发生变化时会触发 PickChange 事件,也可以通过事件的回调参数获取当前和之前的拾取物体。
app.on(THING.EventType.PickChange,function (ev) {
ev.objects.style.color = '#ff0000'
ev.previousObjects.style.color = null})
区域 Pick 物体
有时我们通过鼠标框选一个区域,在区域内的物体我们认为是被 `Pick` 的,如下例:
//由于框选比较消耗性能,因此预先设置框的“候选集”,只在候选集中框选var things = app.query('.Thing')app.picker.areaCandidates = things//启动框选 传入 鼠标按下时开始框选的屏幕坐标app.picker.startAreaPicking({
x: x,
y: y})//结束框选app.picker.endAreaPicking()
查看示例
pickedResultFunc
可通过 pickedResultFunc 设置拾取对象回调函数,详见代码块,如下图:
请点击输入图片描述
选择
选择物体
鼠标悬停到物体上,但不代表我选择它了,比如是我们点击后才表明我们选择了它。选择物体,我们通过 Selection模块实现,可通过 app.selection 的接口实现该功能,见下例:
//将物体加入到选择集中app.selection.select(obj)// 判断对象是否在选择集中app.selection.has(obj)//将物体从选择集中删除app.selection.deselect(obj)//清空选择集app.selection.clear()
通过属性和方法,侦测选择集变化
Selection 通过提供 isChanged 方法获取选择集变化,通过 objects 和 previousObjects 获取当前选择集和变化之前的选择集,见下例:
if(app.selection.isChanged()) {
//获取当前哪些物体被选择
console.log(app.selection.objects)
//当isChanged时,之前都有哪些物体被选择
console.log(app.selection.previousObjects)}
通过事件侦测选择集变化
可以通过 Select 和 Deselect 事件精确控制物体针对选择的响应,如下例:
app.on(THING.EventType.Select, '.Thing', function (ev) {
// 选择集中的物体颜色进行改变
ev.object.style.color = "#ff0000"})app.on(THING.EventType.Deselect, '.Thing', function (ev) {
// 物体从选择集中删除时,清除颜色
ev.object.style.color = null})
我们也可以通过 SelectionChange 事件。
app.on(THING.EventType.SelectionChange, function (ev) {
console.log(ev.previousObjects+" "+ev.objects)})
Viewer/Entities的作用:
方便创建直观的对象,同时做到性能优化(billboard、point等)
提供一些方便使用的函数:flyTo/zoomTo
赋予Entity对象时间这个属性,对象具备动态特性/Primitive不具备
提供一些UI(homeButton/sceneModePicker/projectionPicker/baseLayerPicker)
大量的快捷方式,camera等未必是好事。。
Datasource模式来加载大规模数据:Geojson
Datasource结构
Entities是一个快捷方式,其实返回的是viewer.dataSourceDisplay.defaultDatasource.entities
Entity结构
var viewer = new Cesium.Viewer('cesiumContainer')
示例 可参考 Geometries
http://localhost:8080/Apps/Sandcastle/index.html?src=Box.html&label=Geometries
box 就是立方体
cylinder 是圆锥 圆柱
http://localhost:8080/Apps/Sandcastle/index.html?src=Cylinders%20and%20Cones.html&label=Geometries
topRadius = bottomRadius 是圆柱
topRadius=0, bottomRadius 大于0 是圆锥
Entity
Cesium.EntityCollection
每一个Datasource都挂在Entity下;
http://localhost:8080/Apps/Sandcastle/index.html?src=GeoJSON%20and%20TopoJSON.html&label=DataSources
http://localhost:8080/Apps/Sandcastle/index.html?src=GeoJSON%20simplestyle.html&label=DataSources
http://localhost:8080/Apps/Sandcastle/index.html?src=Custom%20DataSource.html&label=DataSources
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)