HT

基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

梦想的初衷 提交于 2020-11-02 19:19:22
我们上一篇《 基于 WebSocket 实现 WebGL 3D 拓扑图 实时数据通讯同步(一) 》主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配合上数据库的数据储存,我们就可以实现一个简易版的 Web 聊天工具了,有空的朋友可以自己尝试下实现,那么我们今天的主要内容真的是实现 WebGL 3D 拓扑图实时数据通讯了,请大家接着往下看。 有了前面的知识储备,我们就可以来真正实现我们 3D 拓扑图 组件上节点位置信息的实时数据同步了,毋庸置疑,节点的位置信息必须是在服务端统筹控制,才能达到实时数据同步,也就是说,我们必须在服务端创建 DataModel 来管理节点,创建 ForceLayout 弹力布局节点位置,并在节点位置改变的过程中,实时地将位置信息推送到客户端,让每个客户端都更新各自页面上面的节点位置。 在服务端我们该如何创建 HT 的 DataModel 和 ForceLayout 呢?其实也很简单,我们可以看看下面的代码: var ht = global.ht = this.ht = require('../../../build/ht-debug.js').ht, dataModel = new ht.DataModel(), reloadModel = require("../util.js").reloadModel;

基于HT for Web的3D树的实现

♀尐吖头ヾ 提交于 2019-12-23 13:38:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在 HT for Web 中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到指定的节点比较困难,而3D上的树状结构在展现上配合 HT for Web 的弹力布局组件会显得比较直观,一眼望去可以把整个树状结构数据看个大概,但是在弹力布局的作用下,其层次结构看得就不是那么清晰了。所以这时候结构清晰的3D树的需求就来了,那么这个 3D树 具体长成啥样呢,我们来一起目睹下~ 要实现这样的效果,该从何下手呢?接下来我们就将这个问题拆解成若干个小问题来解决。 1. 创建一个树状结构 有了解过 HT for Web 的朋友,对树状结构数据的创建应该都不陌生,在这里我就不做深入的探讨了。树状结构数据的创建很简单,在这里为了让代码更简洁,我封装了三个方法来创建树状结构数据,具体代码如下: /** * 创建连线 * @param {ht.DataModel} dataModel - 数据容器 * @param {ht.Node} source - 起点 * @param {ht.Node} target - 终点 */ function createEdge(dataModel, source, target) { // 创建连线

HT for Web列表和3D拓扑组件的拖拽应用

纵然是瞬间 提交于 2019-12-10 06:09:46
很多可视化编辑器都或多或少有一些拖拽功能,比如从一个List列表中拖拽一个节点到拓扑组件上进行建模,并且在拖拽的过程中鼠标位置下会附带一个被拖拽节点的缩略图,那么今天我们就来实现这样的拖拽效果。 首先我们需要创建一个 List列表 ,在列表中加入图片信息,让List列表不那么单调,先来看看效果图。 接下来我们一步一步来是想这个List列表,先来解决下数据,在这里我就列举一两个: var products = [ { ProductId : 1, ProductName : "Chai", QuantityPerUnit : "10 boxes x 20 bags", UnitPrice : 18.00, Description : "Soft drinks, coffees, teas, beers, and ales" }, { ProductId : 2, ProductName : "Chang", QuantityPerUnit : "24 - 12 oz bottles", UnitPrice : 19.00, Description : "Soft drinks, coffees, teas, beers, and ales" }, …… ]; 有了数据,我们就可以来创建List组件了: var listView = new ht.widget.ListView(),

基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)

心已入冬 提交于 2019-12-07 21:48:46
今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 Demo。接下来我们就看看这个实时数据通讯是一个什么样的套路。 我们先来聊聊这次 Demo 的思路吧,首先我要有一个 3D 的 拓扑图 组件,在上面创建几个节点,然后通过拉力布局(ForceLayout)将这些节点自动布局,但是有一定,需要在不同的网页窗口下,对应节点的位置是一样的,简单地说就是不同网页窗口所呈现的节点布局是一样,而且拖动不同网页窗口中的任意的节点,都将更新所有页面窗口,让所有窗口的呈现都是一样的。 根据上面的思路,我们该如何去规划呢?既然需要实时数据通讯,那么就需要使用 WebSocket,WebSocket 又是什么呢?WebSocket 是 HTML5 一种新的协议,它没有标准的 API,各个实现都有自己的一套 API,在这里我们就不去详细研究 WebSocket 的具体实现,我也讲不了,至少现在讲不了。 在这里我们用比较易上手的 Node.js 的 Socket.IO 做通讯框架, Socket.IO 让长连接通讯变得无比简单,服务器再也不用等待客户端的请求就可以直接给客户端发送消息,根据这样的特性就可以实现数据通讯同步的问题。 我们来写一个最简单的例子

绘制SVG内容到Canvas的HTML5应用

十年热恋 提交于 2019-12-05 07:33:49
SVG与Canvas是HTML5上绘制图形应用的两种完全不同模式的技术,两种绘制图形方式各有优缺点,但两者并非水火不容,尤其是SVG内容可直接绘制在Canvas上的功能,使得两者可以完美的融合在一起,让Canvas可享用到现有丰富的SVG素材,并不失SVG矢量无级缩放的特点。 《 基于HTML5的Drag and Drop生成图片Base64信息 》这篇虽然展示的是拖拽普通栅格图片的效果,但你也可以直接拖拽SVG格式的图片进行显示,只不过普通图片的格式数据为data:image/png类型,而SVG格式的数据类型为data:image/svg+xml的类型,下图为该 HT for Web 拓扑图拖拽入SVG格式图片的运行效果: 以下一段小例子,展示了加载一个SVG图片后,分为七个基本进行缩放绘制的效果,可看出Canvas绘制SVG可保持其矢量不失真的特性 function draw(){ var img = new Image(); img.src = 'chart.svg'; document.body.appendChild(img); img.onload = function(){ var canvas = document.getElementById('canvas'); var g = canvas.getContext('2d'); var width = img

HTML5矢量实现文件上传进度条

和自甴很熟 提交于 2019-12-03 05:01:47
在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过 HT for Web 矢量来实现HTML5文件上传进度条,矢量在《 矢量Chart图表嵌入HTML5网络拓扑图的应用 》一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示当前上传进度。 那么接下来我们就来探讨下具体实现: 首先,我们来分析下进度条的结构: 1. 需要一个背景,background 2. 需要一个当前进度值,value 3. 需要一个前景,foreground,根据当前进度值,绘制前景,盖过背景 结构就这么简单,那么接下来就是具体的实现了,看码: ht.Default.setImage('progress', { width : 150, height : 12, comps : [ // 绘制背景 { type : 'rect', rect : {x : 0, y : 0, width : 115, height : 12}, background : {func : function(data) {return data.a(

基于HT for Web矢量实现HTML5文件上传进度条

余生长醉 提交于 2019-12-03 05:01:34
在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过 HT for Web 矢量来实现HTML5文件上传进度条,矢量在《 矢量Chart图表嵌入HTML5网络拓扑图的应用 》一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示当前上传进度。 那么接下来我们就来探讨下具体实现: 首先,我们来分析下进度条的结构: 1. 需要一个背景,background 2. 需要一个当前进度值,value 3. 需要一个前景,foreground,根据当前进度值,绘制前景,盖过背景 结构就这么简单,那么接下来就是具体的实现了,看码: ht.Default.setImage('progress', { width : 150, height : 12, comps : [ // 绘制背景 { type : 'rect', rect : {x : 0, y : 0, width : 115, height : 12}, background : {func : function(data) {return data.a(

从IE6到IE11上运行WebGL 3D遇到的各种坑

梦想的初衷 提交于 2019-11-28 17:18:26
这篇《 基于HTML5的电信网管3D机房监控应用 》基于WebGL技术的应用让少同学对 HTML5 3D 的应用产生了兴趣和信心,但有不少网友私信询问WebGL如何运行在老的IE678910浏览器的问题,毕竟作为企业应用,用户的机器运行着各式各样的办公及业务系统,有PB/Delphi之类的老CS应用,有安装了dll和ActiveX的各种安全认证和视频监控的插件,有装着flash或svg插件的flex和SVG应用,当然还有支持IE6却不支持任何非IE浏览器的各种OA办公软件,眼看着XP操作系统即将寿终正寝,结果还成了国内各家安全公司的新商机《 围猎XP:谁在瞄准商机 》,你说升级机器系统谈何容易? 对于我们无力要求升级的IE678910上要跑WebGL,我们只能采用 Google Chrome Frame 的解决方案,虽然该插件Google从2014年1月份起就不再维护更新了,但已经发布的版本也是31了,这个版本的WebGL功能已经足够完善了,当然这样的解决方案也一箭双雕的解决了2D的Canvas问题。 安装完该插件后,在你需要采用WebGL的页面增加一行<meta http-equiv=”X-UA-Compatible” content=”chrome=1″>代码即可,或者从服务器下发该页面是对HTTP头增加X-UA-Compatible: chrome=1的参数即可。 使用

基于HTML5的WebGL电信网管3D机房监控应用

爷,独闯天下 提交于 2019-11-27 11:53:23
先 上段视频 ,不是在玩游戏哦,是规规矩矩的电信网管企业应用,嗯,全键盘的漫游3D机房: http://www.hightopo.com/guide/guide/core/3d/examples/example_3droom.html http://v.youku.com/v_show/id_XNjc2NDQxNDM2.html 随着PC端支持HTML5浏览器的普及,加上主流移动终端Android和iOS都已支持HTML5技术,新一代的电信网管应用几乎一致性的首选HTML5,当然Flex和Silverlight的遗留系统依然存活着,如果不考虑移动终端,不考虑将来维护人员难找,不考虑需要承载成千上万的网元数量,不考虑公司员工的职业生涯前途,哪怕其各自父母adobe和ms都已弃之,其实Flex和Silverlight作为企业应用方案技术上还是可以的,还是能存活很多很多年。 但我作为程序员可是要考虑自己的职业生涯的,可能有人喜欢成为能维护CORBA或IBM大机那样的稀有物种得到高薪,我还是喜欢朝气蓬勃的技术氛围,我喜欢每天上 Hacker News 都能见到讨论我从事的技术的新鲜事,我喜欢有搞通用组件有 Sencha 和 Kendoui 可选择,搞图表有 Highcharts 可选择,搞2D拓扑和3D机房有 Hightopo 可选择,搞移动应用有 JQuery Mobile 可选择

基于HTML5的WebGL电信网管3D机房监控应用

那年仲夏 提交于 2019-11-27 11:53:11
先 上段视频 ,不是在玩游戏哦,是规规矩矩的电信网管企业应用,嗯,全键盘的漫游3D机房: http://www.hightopo.com/guide/guide/core/3d/examples/example_3droom.html 随着PC端支持HTML5浏览器的普及,加上主流移动终端Android和iOS都已支持HTML5技术,新一代的电信网管应用几乎一致性的首选HTML5,当然Flex和Silverlight的遗留系统依然存活着,如果不考虑移动终端,不考虑将来维护人员难找,不考虑需要承载成千上万的网元数量,不考虑公司员工的职业生涯前途,哪怕其各自父母adobe和ms都已弃之,其实Flex和Silverlight作为企业应用方案技术上还是可以的,还是能存活很多很多年。 但我作为程序员可是要考虑自己的职业生涯的,可能有人喜欢成为能维护CORBA或IBM大机那样的稀有物种得到高薪,我还是喜欢朝气蓬勃的技术氛围,我喜欢每天上 Hacker News 都能见到讨论我从事的技术的新鲜事,我喜欢有搞通用组件有 Sencha 和 Kendoui 可选择,搞图表有 Highcharts 可选择,搞2D拓扑和3D机房有 Hightopo 可选择,搞移动应用有 JQuery Mobile 可选择,每周末到徐家汇公园那个照的到太阳看得见湖色几乎成为我私人定制的木凳