从零开始学习3D可视化之事件的常用方法

ThingJS 3D场景层级切换,体验不一样的动感! 若ThingJS 3D开发与真实世界的设备相关联,获取场景发送的设备属性数据,就能够真正实现物联网的控制操作。三维数据可视化分析,离不开场景搭建,通过对设备或楼层的仿真模拟,并且利用进出层级和聚焦物体等控制方法,在智能安防或培训层面做到更加直观、有效。 ThingJS使用app.level.change(ev.campus);这个进出层级、聚焦物体的代码来注册进出层级事件,该事件可以实现楼层的进出,有自定义属性或是ID属性物体的双击聚焦功能。 ThingJS 3D开发如何实现进出层级?超简单! 今天我们来详 阅读详情

1、 绑定事件并添加条件

2、 同一个事件注册多个回调

3、 tag 标签

4、 设置事件优先级

5、 注册单次事件

事件不会自己执行,需要触发(即事件被触发之后才可执行)。审视任何JavaScript代码的核心,你会发现正是事件是把所有东西融合在一起。下面我学习了一些在数字孪生可视化场景中事件的常用方法。

1、 绑定事件并添加条件

事件添加了条件,只有在符合该条件的数字孪生可视化物体上 click 才会触发,无论是已经存在的 Thing 对象,还是后面新创建的 Thing 对象都会生效。

app.on("click", ".Thing", function(ev) {
    console.log("you click " + ev.object.id);
});
obj.on("click", ".Marker", function(ev) {
    console.log(ev.object.name);
});

上面的例子,当这个数字孪生可视化物体子孙里有 Marker 物体,当它被点击就会触发。同全局绑定 Marker 物体,绑定后 obj 的子孙里新创建的 Marker 也响应这个事件。

2、 同一个事件注册多个回调

试想一下,如果有一个模块在数字孪生可视化物体 click 时,改变物体颜色,另外一个模块需要在物体 click 时,放大物体。两个模块又是不同人写的,那该如何注册事件呢?

// 事件1:
obj.on("click", function(ev) {
    ev.object.style.color = "#FF0000";
});

// 事件2:
obj.on("click", function(ev) {
    ev.object.scale = [2, 2, 2];
});

// 卸载 obj 全部的 click 事件
obj.off("click");

这两个事件,都会在 obj 被点击后触发。但使用 off() 卸载事件时,两个事件都会同时被卸载。因此我更推荐使用[tag]的方式。

3、 tag 标签

如果取消或者暂停事件,都要知道原回调函数,在大部分时候会比较麻烦,可以给数字孪生可视化场景中每个事件打上 tag,在删除或者暂停时,可用 tag 直接指定你要操作的回调。

 
//模块1中:
obj.on("click",function(ev) {
    ev.object.style.color = "#FF0000";
},"模块1");

//模块2中:
obj.on("click",function(ev) {
    ev.object.scale = [2, 2, 2];
},"模块2");

//取消"模块1"的事件回调,不影响“模块2”的回调
obj.off("click",null ,"模块1");

4、 设置事件优先级

两个都是 click 事件,如果希望保证模块 2 的事件先于模块 1 触发,则需要添加一个参数 priority,一般事件默认的优先级是 50,设置的越大,越优先触发。

//模块1:
obj.on("click",function(ev) {
    ev.object.style.color = "#FF0000";
},"模块1");

//模块2:
obj.on("click",function(ev) {
    ev.object.scale = [2, 2, 2];
},"模块2",51);

5、 注册单次事件

在数字孪生可视化场景中如果需要一个事件只执行一次,就需要卸载掉,你可以使用 one 这个接口代替 on,参数和 on 是一样的。

提供 priority 的能力:

// 下例中是给每个楼层的注册了一次 EnterLevel 事件,即 每个楼层第一次进入时 都会响应
app.one(THING.EventType.EnterLevel, '.Floor', function (ev) {
    console.log(ev.object.id);
})

// 如果只给某个楼层注册 如下
var floor = app.query('.Floor')[0];
floor.one(THING.EventType.EnterLevel, function (ev) {
    console.log(ev.object.id);
})

—————————————————

数字孪生可视化:https://www.thingjs.com/

【ThingJS | 3D可视化】开发框架,一站式数字孪生 ThingJS是一个基于WebGL和Three.js的开源3D JavaScript库,用于创建交互式的3D场景和应用程序。它提供了丰富的功能和工具,使开发人员能够简单而高效地构建各种类型的3D应用。ThingJS支持导入各种3D模型格式,并提供了各种渲染效果和交互功能,例如阴影、光照、碰撞检测等。 阅读详情

相关推荐

从零开始学习3D可视化之物体选择

1、选择物体 2、通过属性和方法,侦测选择集变化 3、通过事件侦测选择集变化 搭建好数字孪生可视化场景后,应该如何进行交互?这其中最关键的就是如何实现物体的选择。比如鼠标点击后判断是否选中了某个模型或模型的某个部分。在数字孪生可视化场景中鼠标悬停到物体上,并不代表已经选择了这个物体,需要点击后才表示选择了它。 1、选择物体 选择数字孪生可视化场景中的物体,可以通过 Selection 模块实现,通过 app.selection 的接口实现该功能。选择集是被封装到抽象Selection中的DOM元素

ThingJS的博客 1660

X3D SAI 3D场景与交互Java实现教程

本文还有配套的精品资源,点击获取 简介:本集合通过X3D SAI(Spatial Arrangement and Interaction)实例,详细指导JAVA开发者如何在网页上创建和操控交互式3D场景。涵盖了X3D技术的基础知识,以及如何利用SAI扩展和XJ3D开源库在JAVA平台上实现3D场景的构建、对象布局、交互设计、动画制作和数据交换等。通过这些示例代码和模型,开发...

weixin_35414484的博客 1557

从零开始学习3D可视化之事件绑定

先理解一下概念:事件,就是用户或者是浏览器执行的某种动作。例如:click、load等都是事件的名字。事件处理程序,就是响应事件的函数。事件处理程序的名字是以“on”开头的。 例如:事件 click ---> 事件处理程序 onclick(事件处理程序一般都是小写字母)。 ThingJS 系统内置了很多事件,比点击鼠标、键盘输入、层级变化等。可以监听这些事件,在事件回调中进行相应的业务逻辑处理。 全局绑定事件和局部绑定事件 操作以及数字孪生可视化场景的变化,都会触发相应的事件。可以监听这些事件

ThingJS的博客 1876

基于Python+大数据的微博事件分析可视化系统设计与实现

今天带来的是基于Python+大数据的微博事件分析可视化系统,随着微博事件的常态化,如果依然采用传统的管理方式,将会为工作人员带来庞大的工作量,这将是一个巨大考验,需要投入大量人力开展对科技视频等相关工作进行管理,单一且反复的操作容易出错且不易被察觉,于是利用现代信息技术,设计开发一款微博事件分析与可视化系统,能够极大的节省人力物力、提高工作效率、降低工作成本。

qq_15801219的博客 1702

3D可视化库Mayavi安装和使用

文章目录安装 安装 Mayavi的pip安装支持不好,所以需要用编译好的whl文件来安装。以下方法的测试环境为conda 新建的干净环境,python版本为3.8,系统为win10系统: # conda 新建的干净环境,python版本为3.8 conda create -n env_name python=3.8 安装的whl文件下载自Unofficial Windows Binaries for Python Extension Packages,文件名称为:mayavi‑4.7.1+vtk82‑cp

surtol的博客 2万+

从零开始学习3D可视化之坐标系

1、 世界坐标系 2、 父物体坐标系 3、自身坐标系 要想控制一个3D可视化对象的空间位置,首先需要理解空间坐标系。在 ThingJS 开发平台中,使用右手坐标系,横轴为 X 轴和 Z 轴,竖轴为 Y 轴(ThingJS 获取的位置坐标 [x, y, z] 的单位均为米)。描述或控制一个3D可视化物体的位置,在不同情况下,会分别使用以下 3 套坐标系统:1、世界坐标系2、父物体坐标系3、自身坐标系。下面是我对于世界坐标系、父物体坐标系、自身坐标系的学习和自己的一些理解,如果有错误欢迎指正和讨论。

ThingJS的博客 2350

从零开始学习3D可视化之事件卸载、事件暂停

事件就是用户或浏览器自身执行的某种动作,而响应某个事件的函数就叫做事件处理程序 (或事件侦听器)。事件处理程序的名字以 "on" 开头,比如 click 事件的事件处理程序就是 onclick。下面我将继续学习数字孪生可视化场景中如何卸载事件、暂停和恢复事件、自定义事件。 卸载事件 如果内存中保留大量无用的事件处理程序,会影响性能。所以一定要在不需要的时候及时移除事件处理程序。需要卸载一个事件的时候使用 off() 方法。这样就把所有的数字孪生可视化building 下的 click 事件都清除了。

ThingJS的博客 1600

从零开始学习3D可视化之模型动画

获取模型动画 播放模型动画 停止播放模型动画 在搭建3D可视化场景的过程中,我发现很多模型都有内置动画,很多模型在制作阶段就内置了动画,如果模型有内置动画,可以在 ThingJS 中利用 API 调用播放这些动画。 比如官方示例中通过 dbclick 事件来控制机柜开启,click 事件来控制鼠标右键关闭机柜。 1、获取模型动画 首先通过animationNames属性获取3D可视化模型都带有有什么动画。 console.log(obj1.animationNames); // 日志窗口..

ThingJS的博客 1909

Python的3D可视化库【vedo】2-4 (plotter模块) 场景交互、事件设置

vedo是Python实现的一个用于辅助科学研究的3D可视化库。 这里是用于控制场景交互和设置场景事件的方法。

qq_42783188的博客 1527

从零开始学习3D可视化之摄像机

数字孪生可视化场景中的摄像机,与大家拍照时使用相机的功能相似,数字孪生可视化场景中用摄像机来确定观察 3D 场景的视角。摄像机包含两个重要的位置参数:镜头位置 position 和被拍摄物体的位置 target (又叫目标点)。 1、设置摄像机位置 将下面的代码输入到项目文件中,获取当前摄像机 camera 的 position 和 target 属性,就可以得到数字孪生可视化场景中摄像机的位置信息,也可以将其打印在控制台中。 // 加载场景代码 var app = new THING.App({

ThingJS的博客 1838

从零开始学习3D可视化之场景层级(1)

1、开启场景层级控制 2、父子树和分类对象属性树 3、切换场景层级 在3D可视化场景中加载园区后系统会自动创建园区、建筑、楼层、房间等物体对象,这些对象也自然把场景分成了不同的层级,场景提供了层级结构,可以通过我下面介绍的方法,来控制场景层级。那么层级结构有什么用呢?可以更方便管理和查询到场景中物体;可以批量操作物体,比如移动父物体可以带着孩子一起移动等等。 1、开启场景层级控制 首先将下面的代码输入到项目文件中,即可开启 ThingJS 3D可视化示例园区的场景层级控制功能。 ..

ThingJS的博客 1946

从零开始掌握3D可视化:PyVista实战指南

你是否曾经面对复杂的三维数据感到无从下手?想要将海量数据转化为直观的可视化效果却不知从何开始?今天,让我们一同探索Python生态中的3D可视化利器——PyVista。这款基于VTK构建的工具库,通过简化的Python接口让复杂的3D渲染变得触手可及,特别适合科研人员和数据分析师快速构建交互式三维场景。 ## 🎯 核心技术优势解析 PyVista最大的特色在于其"Pythonic"的设计理念

gitblog_00471的博客 674

从零开始学习3D可视化之拾取

1、 通过属性和接口获取鼠标拾取(Pick)的物体 2、 通过事件获取鼠标拾取的物体 3、 区域 Pick 物体 4、 pickedResultFunc设置拾取对象回调函数 在开发数字孪生可视化场景应用时经常会用到拾取功能,顾名思义,在数字孪生可视化场景中拾取就是判断一个数字孪生可视化场景中哪个对象被点击。数字孪生可视化场景中的模型非常多,不可避免需要一些交互效果。比如当点击某一个模型的时候做出反馈动作,这需要能够通过鼠标的点击位置推导出点击到的模型,这种技术实现称为拾取。 在数字孪生可视化场景中

ThingJS的博客 1889

数据可视化技术常用方法

在大数据与信息技术日新月异的今天,数据已成为驱动社会进步与产业升级的关键要素。无论是商业决策、科学研究,还是医疗健康、教育娱乐,数据都扮演着举足轻重的角色。然而,面对浩瀚如海的数据,如何高效地提取信息、洞察数据背后的故事,成为了一个等待解决的问题。正是在这样的背景下,数据可视化技术应运而生,并逐渐发展成为连接数据与洞察的桥梁。希望通过本文的学习,读者能够掌握数据可视化常用的方法,学会如何运用数据可视化技术。

ling0323的博客 1565

从零开始学习3D可视化之2D界面

在ThingJS中搭建的数字孪生可视化场景都是放在3D“容器”内的,3D“容器”提供了3D和2D的界面展示能力。上篇文章浅析过了3D空间界面,下面我继续学习一下2D界面如何与3D界面连接。ThingJS内置了div2d和div3d元素,创建2D界面时需要将元素插入到 div2d。 创建 UIAnchor UIAnchor可以把 2D html 界面连接到 3D 物体上,跟随 3D 物体移动。需要注意的是删除后,其对应的 panel 也会被删除。 var uiAnchor = app.create({

ThingJS的博客 1994

一文讲透:可视化大屏中3D元素的融入和使用方法

三维展示(3D展示)是指使用计算机技术对物体进行三维建模,然后将其渲染为带有透视效果的图像,并通过3D显示设备(例如3D眼镜、3D显示器等)进行展示。通过三维展示技术,用户可以观察物体的三维结构、形态和纹理等细节,像真实地观察物体一样进行交互和操作。三维展示技术在许多领域有广泛的应用,例如建筑设计、工业设计、医学图像处理、电影制作、游戏开发等。通过三维展示技术,可以更加直观地展示和交流设计方案和创意,帮助用户更好地理解和体验设计。

2401_82881178的博客 3264

C语言的3D可视化

OpenGL(Open Graphics Library)是一种跨语言、跨平台的图形API,用于渲染2D和3D矢量图形。OpenGL提供了大量的函数来处理图形,支持现代图形硬件加速。相较于其他图形库,OpenGL的优点在于其开放性和广泛的应用范围。通过本文的介绍,我们初步了解了如何利用C语言和OpenGL进行3D可视化的基础知识与实现方法。3D可视化在科学、工程及娱乐等领域中的广泛应用使其成为一个值得深入研究的方向。随着图形硬件的不断进步和图形算法的发展,C语言的3D可视化技术也将会实现更加精彩的效果。

2501_91275982的博客 1100

从零开始学习3D可视化之获取对象

一、query()查询物体 二、 其他查询方法 在数字孪生可视化场景中,添加完对象之后,我们如何尽快查找到对象呢?ThingJS中获取对象有如下几个方法:通过父子属性获取对象;通过分类属性获取对象;使用 query 方法获取对象。 一般来说,我们通过 query() 方法来查询物体(即获取对象)。下面我将详细讲解通过 query 方法获取对象的方法。找到物体后,就可以通过 ThingJS API 提供的功能来控制该物体了。 一、query()查询物体 1、 获取园区中的物体 获取 CampusB

ThingJS的博客 1584
上一篇: 从零开始学习3D可视化之事件绑定
下一篇: 从零开始学习3D可视化之事件卸载、事件暂停
ThingJS_小锘
博客等级 码龄6年 170粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值