GView是基于canvas实现的图形可视化组件, 可以通过Node节点、Link链路、Group分组和Subview子图等图形元素, 实现拓扑图、设备面板图、 流程图、组织架构图等
GView基于canvas实现,坐标系的原点(0,0)位于左上角
图元是GView基本呈现元素, 是Data的子类, 系统默认提供了以下几种图元
系统默认实现了上述图元的渲染方式, 所以只有以上图元及其子类对象可以显示在GView上
GView的属性主要包括图元相关的全局属性, 和图元显示/可见/交互/可用等控制属性
大部分图元显示/控制属性既可以在图元上设置, 也可以在GView上全局设置, 图元上的属性优先级大于GView上的全局属性
以下是图元的全局属性前缀
gView.set("label_field", "label"); //Label标签显示图元的label属性
gView.set("link_gap", 20);
gView.set("label_in_front", true);
适用于Geo地图等场景, 可以避免Label标签遮盖问题
gView.set("info_in_front", true);
适用于拓扑告警提示, 异常信息显示在最上层, 不会被遮盖
有如下可选项:
有如下可选项:
网格线可辅助图元编辑操作
gView.set("grid_line_visible", true); //显示网格线
gView.set("grid_line_space", 100);
gView.set("grid_line_stroke", "LightSkyBlue");
gView.set("grid_line_stroke_line_width", 1);
gView.set("grid_line_axis_stroke_line_width", 2);
点击时系统获取到的只是一个点, 但是很难判断点下是否有图元, 尤其是对于链路来说, 很难被点击和选中, 通过hit_padding将点扩大成了矩形, 就比较容易选中图元
gView.set("hit_padding", 3);
有如下可选项:
gView.set("select_mode", "single");
gView.set("group_expand_on_dblclick", false);
gView.set("subview_drill_on_dblclick", false);
gView.set("selectable", false);
gView.set("hoverable", true); //***
gView.set("movable", false);
gView.set("disabled", true);
本文档只列出了常用方法, 更多方法请参考API文档
gView.zoomFit();
gView.zoomFit(true);
gView.zoomIn(); //以GView的中心作为参考点进行缩放
gView.zoomIn(false); //以GView的左上角作为参考点进行缩放
gView.zoomOut(); //以GView的中心作为参考点进行缩放
gView.zoomOut(false); //以GView的左上角作为参考点进行缩放
gView.zoomCenter(1);
gView.zoomCenter(0.6);
鼠标滚轮wheel缩放使用的就是这个方法
gView.zoomByPoint(2, {x: 100, y:100}); //以(100,100)作为参考点, 并将zoom缩放值设置为2
gView.translate(100, 100);
gView.translate({x: 200, y: 200});
跟zoomFit的区别是, zoomFit是缩放&平移操作以显示所有图元, 而translateCenter只是平移操作
gView.translateCenter(100, 100);
gView.translateCenter(true);
gView.resetTransform();
一般用于交互操作, 例如)拖拽创建节点, 拖拽完成时, 要将鼠标事件转换成GView上的原始坐标, 这样节点才会出现在正确的位置
gView.getOriginalPoint({x: 100, y: 100});
gView.getOriginalPoint(mouseEvent);
gView.getDataWindowBounds(node)
gView.getDataWindowBounds(node,true)
gView.getDataPageBounds(node)
gView.getDataPageBounds(node,true)
getDataPageBounds和getDataWindowBounds主要区别是, getDataPageBounds返回的是相对于整个页面文档的bounds, 而getDataWindowBounds返回的是相对于当前窗口Viewpoint的bounds
gView.getDataAt(mouseDownEvent)
gView.getDataAt({x: 100, y: 100}, false)
gView.getDataArrayAt(mouseDownEvent)
gView.getDataArrayAt({x: 100, y: 100}, false)
gView.getDataArrayAtRect({x: 100, y: 100, width:100, height:100}, false)
Subview子图以层级方式显示图元, 只有当前子图下的子节点才会显示在GView上
gView.setCurrentSubview(aSubview);
gView.setCurrentSubview(aLinkSubview);
gView.setCurrentSubview(null);
gView.getCurrentSubview();