HT for Web 中Painter的介绍及用法

时间:2022-09-24 09:09:07

鉴于许多同学对Painter不熟悉,所以撰写此文介绍下。Painter的中文意思是画家、漆工,那放到HT里是什么意思呢?很简单,这是HT特有的一种接口,允许开发者在拓扑及其它通用组件上使用Canvas画笔*绘制内容,现在我们做个例子看一下如何使用Painter。

这个例子中我们在拓扑组件的背景上绘制马赛克背景,可以在这里试玩,代码如下:

gv.addBottomPainter(function(g) {//g为CanvasRenderingContext2D实例
var viewRect = gv.getViewRect();// 获取可视范围
var zoom = gv.getZoom(); var startX = viewRect.x;
var endX = startX + viewRect.width;
var startY = viewRect.y;
var endY = startY + viewRect.height; g.save();
g.beginPath();
g.fillStyle = "#ddd";
// 绘制马赛克,只绘制灰色方块,白色方块不绘制以显示网页的白色背景
for (var i = startX, ii = 0; i < endX; i += 10 / zoom, ii++) {
for (var j = startY, jj = 0; j < endY; j += 10 / zoom, jj++) {
// 绘制规则为奇数行绘制奇数列方块,在偶数行中绘制偶数列方块
if ((ii % 2 != 0 && jj % 2 != 0)
|| (ii % 2 == 0 && jj % 2 == 0)) {
g.rect(i, j, 10 / zoom, 10 / zoom);
}
}
}
g.fill(); g.restore();
});

可以看到这个接口本身是非常简单的,只要调用addBottomPainter,传入一个函数即可。

这里我们用到GraphView#addBottomPainter这个API,顾名思义,这是在我们拓扑的底部加一个Painter,示意图如下:

HT for Web 中Painter的介绍及用法

可见BottomPainter是绘制在拓扑原有节点连线下面的,并且我们可以加多个bottomPainter。

聪明的同学们可能想到了,既然有BottomPainter,那有没有TopPainter呢?答案是:有!TopPainter的结构是下面这样:

HT for Web 中Painter的介绍及用法

可以看到,TopPainter是绘制到拓扑原有节点连线上面的,也就是说它会遮挡拓扑内容。那么TopPainter有什么用呢?一个典型的例子是做版权声明,大家可以试玩这个例子,关键代码如下:

tableView.addTopPainter(function(g) {
g.beginPath();
g.strokeStyle = 'cornflowerblue';
var text = 'XXX版权所有';
g.font = '24px Arial';
g.strokeText(text, 60, -tableView.ty() + 50);// 使用ty()以保持文字浮动在固定位置
});

这个Painter的代码也很简单,用画笔画了一段文字,而且大家应该注意到了,不仅仅拓扑上可以用Painter,表格等通用组件也是可以使用的。

Painter机制给开发者带来了极大的便利,从此组件的展示效果不再被局限到HT的内置样式里,开发者可以发挥想象实现各种绚丽的效果,大家快来试试吧,不如先实现一个网格线背景怎么样?

HT for Web 中Painter的介绍及用法的更多相关文章

  1. HT for Web中3D流动效果的实现与应用

    流动效果在3D领域有着广泛的应用场景,如上图中医学领域可通过3D的流动直观的观察人体血液的流动,燃气领域可用于监控管道内流动的液体或气体的流向.流速和温度等指标. 如今企业数据中心机房普遍面临着设备散 ...

  2. Web中常用字体介绍(转)

    1.在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体. 浏览器中展示网页文字内容时,文字字体都会按照设计 ...

  3. Web中常用字体介绍

    1.在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体. 浏览器中展示网页文字内容时,文字字体都会按照设计 ...

  4. Java中BigDecimal类介绍及用法

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  5. 基于HT for Web矢量实现3D叶轮旋转

    在上一篇<基于HT for Web矢量实现2D叶轮旋转>中讲述了叶轮旋转在2D上的应用,今天我们就来讲讲叶轮旋转在3D上的应用. 在3D拓扑上可以创建各种各样的图元,在HT for Web ...

  6. 基于HT for Web矢量实现2D叶轮旋转

    之前在拓扑上的应用都是些静态的图元,今天我们将在拓扑上设计一个会动的图元——叶轮旋转. 我们先来看下这个叶轮模型长什么样 从模型上看,这个叶轮模型有三个叶片,每一个叶片都是不规则图形,显然无法用上我们 ...

  7. 扩展HT for Web之HTML5表格组件的Renderer和Editor

    在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条 color picker:颜色选择器 enum:枚举类型 boolean:真假编辑器 string:普通的文本编辑 ...

  8. 自绘制HT For Web ComboBox下拉框组件

    传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HTforWeb通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在文本框和下拉列表中添加自定义的小图标,让整个 ...

  9. 百度地图、ECharts整合HT for Web网络拓扑图应用

    前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来 ...

随机推荐

  1. 4种scope方法

    默认作用域,自动加载: default_scope { order(created_at: :desc) } model 调用 find_2时才运行 scope :find_2, ->{ whe ...

  2. ScriptTask读取SharePoint上的Excel

    很多情况下,我们会SharePoint 作为文件共享的Server,有时,业务上需要将SharePoint上的Excel文档 Download 到db中.对于搞DB的人来说,难点是如何下载Excel? ...

  3. Delphi中Interface接口的使用方法

    示例注释(现在应该知道的): {   1.接口命名约定 I 起头, 就像类从 T 打头一样.   2.接口都是从 IInterface 继承而来; 若是从根接口继承, 可省略.   3.接口成员只能是 ...

  4. 关于自定义的NavigationBar

    系统的NavigationBar局限太大,而且现在我要做的navigationBar需要四个按钮,一个Label,一个ImageView,所以不能用系统默认的. 刚刚咨询了一个高手,她的建议是,将系统 ...

  5. BP神经网络算法学习

    BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...

  6. Happy Number

    https://leetcode.com/problems/happy-number/ Write an algorithm to determine if a number is "hap ...

  7. How to easily create popup menu for DevExpress treelist z

    http://www.itjungles.com/how-to-easily-create-popup-menu-for-devexpress-treelist.html Adding popup m ...

  8. 初识大数据(三&period; Hadoop与MPP数据仓库)

    MPP代表大规模并行处理,这是网格计算中所有单独节点参与协调计算的方法. 是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果. MPP DBMS是 ...

  9. build tool 的简单认知

    Build Tool 什么是Build Tool(构建工具)? 构建工具是从源代码自动创建可执行应用程序的程序(例如.apk for android app).构建包括将代码编译,链接和打包成可用或可 ...

  10. day12--python操作mysql

        本篇对于Python操作MySQL主要使用两种方式:     1.原生模块 pymsql(http://www.cnblogs.com/wupeiqi/articles/5713330.htm ...