索引
插件已不再维护,使用
graphView.setEditable(true)
开启默认编辑功能
HT
产品包自带ht.graph.EditInterctor
,可以完成简单的编辑功能,但是也有一些限制,比如无法完成旋转后再编辑等功能。
此插件是对ht.graph.EditInterctor
的补充,适用于复杂编辑的场景,主要优点如下:
API
自定义丰富的编辑样式Shape
点吸附、角度捕获、按比例编辑大小Shape
的线段类型Shape
是否闭合host
和parent
关系,甚至是创建连线、改变连线的端点,改变host
时支持吸附到Grid
单元格和CSGShape
的线段要使用此插件,您的页面里需要引入相关的js
文件:
<script src="ht.js"></script> <!--先引入ht.js-->
<script src="ht-xeditinteractor.js"></script>
然后创建此交互的实例,并设置到拓扑组件上:
var editInteractor = new ht.graph.XEditInteractor(graph);
graph.setInteractors(new ht.List([
new ht.graph.ScrollBarInteractor(graph),
new ht.graph.SelectInteractor(graph),
editInteractor,
new ht.graph.MoveInteractor(graph),
new ht.graph.DefaultInteractor(graph),
new ht.graph.TouchInteractor(graph , {editable: false})//禁用Touch上默认的编辑功能
]));
也可以使用下面简单的方式:
graph.setEditable(true);
HT
内部自动判断,如果引入了此插件,使用此插件作为编辑交互器,否则使用自带的编辑交互
此交互提供了六种辅助编辑按钮
,在辅助编辑按钮上按下鼠标并拖拽到另一个图元上(除删除之外),即可改变host
、parent
关系或创建连线或改变连线端点;拖拽到空白区域可以打断关系
host
按钮,设置host
吸附关系,当目标是Grid
时支持吸附到单元格中,当目标时CSGShape
时支持吸附到线段上parent
按钮,设置parent
父子关系edge
按钮,创建Edge
,可重写交互对象的onEdgeCreated(e, edge)
方法,对创建完的Edge
设置特殊样式remove
按钮,通过双击操作删除当前图元source
按钮,改变连线的Source
target
按钮,改变连线的Target
tall
按钮,调整3D场景中模型的高度(Y轴高度)elevation
或pointElevation
按钮,调整3D场景中模型或点的海拔(Y轴坐标)可以重载 getHelperCursor(helper)
方法,自定义按钮的鼠标手势,helper
参数对应的是前面提到的按钮名称
关于交互的详细信息可参考beginners guide
文档中的交互
章节
您可以操作下面的实例验证此插件:
此插件提供了一些API
操作Shape
,列举如下:
changeShapeSegment(shape, segmentIndex, newSegmentType)
将shape
的序号为segmentIndex
的线段改为newSegmentType
类型。
另外在和右键菜配合使用时,可以在线段上点击右键然后调用此接口,只传入newSegmentType
即可,此插件可以自动识别shape
和segmentIndex
addShapePoint(shape, segmentIndex, newPoint)
在shape
的序号为segmentIndex
的线段上增加新点newPoint
,并自动调整剩下的点和线段类型。
在和右键菜单配合使用时,可以在线段上点击右键然后调用此接口,无需传入参数,此插件会把点击的坐标当作newPoint
,插入到相应的线段上removeShapePoint(shape, pointIndex)
删除shape
的序号为pointIndex
的点,并自动调整剩下的点和线段类型。
在和右键菜单配合使用时,可以在相应的点上点击右键然后调用此接口,无需传入参数,此插件自动识别shape
和pointIndex
getDefaultSegments(data)
Shape
或Edge
的segments
为空时,可用此方法得到默认的segments
_shape
鼠标下有高亮线段或编辑点时,高亮线段或编辑点所属的Shape
_edge
鼠标下有高亮线段或编辑点时,高亮线段或编辑点所属的Edge
_hoverSegmentIndex
鼠标下高亮线段的下标_pause
为true
时交互内部停止检测鼠标位置,右键菜单显示出来以后应该设为true
,避免再改变_hoverSegmentIndex
,右键菜单隐藏后再设回false
onEdgeCreated(e, edge)
通过辅助编辑按钮创建连线时,此方法被回调,可以重写此方法对创建的连线设置样式此插件在拓扑组件(ht.graph.GraphView
)上注入了一些API
用于控制编辑外观,列举如下:
editRectBorderColor
属性通过getEditRectBorderColor()
和setEditRectBorderColor('newColor')
操作,表示编辑框的边框颜色,默认值为rgb(0, 168, 255)
editRectBorderStyle
属性通过getEditRectBorderStyle()
和setEditRectBorderStyle('newStyle')
操作,表示编辑框的边框样式,可选值如下:solid
实线边框dashed
虚线边框,此为默认值(需要使用Chrome
或Firefox
或IE11
)editRectPadding
属性通过getEditRectPadding()
和setEditRectPadding(newPadding)
操作,表示编辑框与节点边缘的间距,默认值为6
nodeBorderColor
属性通过getNodeBorderColor()
和setNodeBorderColor('newColor')
操作,表示组内被选中的节点的边框颜色,默认值为#1ABC9C
editPointBackground
属性通过getEditPointBackground()
和setEditPointBackground('newColor')
操作,表示编辑点的背景色,编辑点包括编辑大小控制点,Shape
连接点及旋转控制点,默认值为#E2E2E2
editPointBorderColor
属性通过getEditPointBorderColor()
和setEditPointBorderColor('newColor')
操作,表示编辑点的边框色,编辑点包括编辑大小控制点,Shape
连接点及旋转控制点,默认值为#2C3E50
editPointSize
属性通过getEditPointSize()
和setEditPointSize(newSize)
操作,表示编辑点的大小,编辑点包括编辑大小控制点,Shape
连接点、控制点及旋转控制点,默认值为9
joinPointBackground
属性通过getJoinPointBackground()
和setJoinPointBackground('newColor')
操作,表示Shape
连接点的背景色,优先级高于editPointBackground
,如果为空则取editPointBackground
的颜色,默认为空joinPointBorderColor
属性通过getJoinPointBorderColor()
和setJoinPointBorderColor('newColor')
操作,表示Shape
连接点的边框色,优先级高于editPointBorderColor
,如果为空则取editPointBorderColor
的颜色,默认为空controlPointBackground
属性通过getControlPointBackground()
和setControlPointBackground('newColor')
操作,表示Shape
控制点的背景色,默认为#ff0
controlPointBorderColor
属性通过getControlPointBorderColor()
和setControlPointBorderColor('newColor')
操作,表示Shape
控制点的边框色,默认与editPointBorderColor
保持一致snapPointBorderColor
属性通过getSnapPointBorderColor()
和setSnapPointBorderColor('newColor')
操作,表示Shape
吸附点的边框色,默认值为#f00
directionLineColor
属性通过getDirectionLineColor()
和setDirectionLineColor('newColor')
操作,表示Shape
指导线的颜色,默认值为#888
segmentHoverColor
属性通过getSegmentHoverColor()
和setSegmentHoverColor('newColor')
操作,表示Shape
线段hover
时的颜色,默认值为rgba(255, 0, 0, 0.3)
segmentHoverWidth
属性通过getSegmentHoverWidth()
和setSegmentHoverWidth(newWidth)
操作,表示Shape
线段hover
时的宽度,默认值为8
editHelperSize
通过getEditHelperSize()
和setEditHelperSize(size)
操作,表示辅助编辑按钮的大小,默认为16
helperEditableFunc
通过getHelperEditableFunc()
和setHelperEditableFunc(func)
操作,设置辅助编辑功能是否可用的过滤器,假如要关闭host
辅助编辑但保留parent
辅助编辑,可以通过以下代码实现:
graphView.setHelperEditableFunc(function(data, helper) {
if (helper === 'host') {
return false;
}
return true;
});
leftTopHelpers
通过getLeftTopHelpers()
和setLeftTopHelpers(helpers)
操作,控制左上角的辅助按钮,数组类型,默认为['parent']
rightTopHelpers
通过getRightTopHelpers()
和setRightTopHelpers(helpers)
操作,控制右上角的辅助按钮,数组类型,默认为['host']
leftBottomHelpers
通过getLeftBottomHelpers()
和setLeftBottomHelpers(helpers)
操作,控制左下角的辅助按钮,数组类型,默认为['edge']
rightBottomHelpers
通过getRightBottomHelpers()
和setRightBottomHelpers(helpers)
操作,控制右下角的辅助按钮,数组类型,默认为['remove']
leftTopHelpersAlign
通过getLeftTopHelpersAlign()
和setLeftTopHelpersAlign(align)
操作,控制左上角的辅助按钮的对齐方式,默认为h
水平对齐,可改为v
垂直对齐rightTopHelpersAlign
通过getRightTopHelpersAlign()
和setRightTopHelpersAlign(align)
操作,控制右上角的辅助按钮的对齐方式,默认为h
水平对齐,可改为v
垂直对齐leftBottomHelpersAlign
通过getLeftBottomHelpersAlign()
和setLeftBottomHelpersAlign(align)
操作,控制左下角的辅助按钮的对齐方式,默认为h
水平对齐,可改为v
垂直对齐rightBottomHelpersAlign
通过getRightBottomHelpersAlign()
和setRightBottomHelpersAlign(align)
操作,控制右下角的辅助按钮的对齐方式,默认为h
水平对齐,可改为v
垂直对齐上面一些概念的图示如下:
此插件在拓扑组件(ht.graph.GraphView
)上注入了一些API
用于控制编辑行为,列举如下:
resizeMode
属性通过getResizeMode()
和setResizeMode('newMode')
操作,表示左上、左下,右上,右下四个编辑点的编辑模式,可选值如下:normal
可任意编辑,此为默认值keepRatio
编辑时保持宽高比snapAngle
属性通过getSnapAngle()
和setSnapAngle(newAngle)
操作,表示捕获角度,单位为弧度,默认值为Math.PI / 36
即角度制5
度snapSpacing
属性通过getSnapSpacing()
和setSnapSpacing(newSpacing)
操作,表示编辑大小时要吸附的尺寸,默认为空,表示不吸附pointSnapSpacing
属性通过getPointSnapSpacing()
和setPointSnapSpacing(newSpacing)
操作,表示编辑时edge
和shape
的点要吸附的尺寸,默认为空,表示不吸附除了上面三个属性,此插件也支持HT
内部的编辑、旋转过滤器,可以精细控制节点是否可编辑旋转等,过滤器的内容可参考beginners guide
文档中的过滤
章节
下面的例子展示如何使用此插件实现网格吸附功能:
此插件可以实现编辑时的吸附功能,绘制网格背景和移动吸附需要额外编码实现。
在这个例子中,网格背景采用painter
机制实现,移动吸附通过自定义的SnapMoveInteractor
实现。
3D
编辑是一个非常复杂的命题,除了Graph3dView
提供的九段式编辑,此插件也提供了elevation
、pointElevatoin
、tall
三个辅助按钮编辑3D
模型的海拔(Y轴坐标)、点海拔(Shape
或Edge
点的Y轴坐标)和模型高度(Y轴尺寸),请参考下面的例子: