索引
插件已不再维护,使用
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和segmentIndexaddShapePoint(shape, segmentIndex, newPoint)在shape的序号为segmentIndex的线段上增加新点newPoint,并自动调整剩下的点和线段类型。
在和右键菜单配合使用时,可以在线段上点击右键然后调用此接口,无需传入参数,此插件会把点击的坐标当作newPoint,插入到相应的线段上removeShapePoint(shape, pointIndex)删除shape的序号为pointIndex的点,并自动调整剩下的点和线段类型。
在和右键菜单配合使用时,可以在相应的点上点击右键然后调用此接口,无需传入参数,此插件自动识别shape和pointIndexgetDefaultSegments(data) Shape或Edge的segments为空时,可用此方法得到默认的segments_shape 鼠标下有高亮线段或编辑点时,高亮线段或编辑点所属的Shape_edge 鼠标下有高亮线段或编辑点时,高亮线段或编辑点所属的Edge_hoverSegmentIndex 鼠标下高亮线段的下标_pause 为true时交互内部停止检测鼠标位置,右键菜单显示出来以后应该设为true,避免再改变_hoverSegmentIndex,右键菜单隐藏后再设回falseonEdgeCreated(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) 操作,表示编辑框与节点边缘的间距,默认值为6nodeBorderColor属性通过getNodeBorderColor()和setNodeBorderColor('newColor')操作,表示组内被选中的节点的边框颜色,默认值为#1ABC9CeditPointBackground属性通过getEditPointBackground()和setEditPointBackground('newColor')操作,表示编辑点的背景色,编辑点包括编辑大小控制点,Shape连接点及旋转控制点,默认值为#E2E2E2editPointBorderColor属性通过getEditPointBorderColor()和setEditPointBorderColor('newColor')操作,表示编辑点的边框色,编辑点包括编辑大小控制点,Shape连接点及旋转控制点,默认值为#2C3E50editPointSize属性通过getEditPointSize()和setEditPointSize(newSize)操作,表示编辑点的大小,编辑点包括编辑大小控制点,Shape连接点、控制点及旋转控制点,默认值为9joinPointBackground属性通过getJoinPointBackground()和setJoinPointBackground('newColor')操作,表示Shape连接点的背景色,优先级高于editPointBackground,如果为空则取editPointBackground的颜色,默认为空joinPointBorderColor属性通过getJoinPointBorderColor()和setJoinPointBorderColor('newColor')操作,表示Shape连接点的边框色,优先级高于editPointBorderColor,如果为空则取editPointBorderColor的颜色,默认为空controlPointBackground属性通过getControlPointBackground()和setControlPointBackground('newColor')操作,表示Shape控制点的背景色,默认为#ff0controlPointBorderColor属性通过getControlPointBorderColor()和setControlPointBorderColor('newColor')操作,表示Shape控制点的边框色,默认与editPointBorderColor保持一致snapPointBorderColor属性通过getSnapPointBorderColor()和setSnapPointBorderColor('newColor')操作,表示Shape吸附点的边框色,默认值为#f00directionLineColor属性通过getDirectionLineColor()和setDirectionLineColor('newColor')操作,表示Shape指导线的颜色,默认值为#888segmentHoverColor属性通过getSegmentHoverColor()和setSegmentHoverColor('newColor')操作,表示Shape线段hover时的颜色,默认值为rgba(255, 0, 0, 0.3)segmentHoverWidth属性通过getSegmentHoverWidth()和setSegmentHoverWidth(newWidth)操作,表示Shape线段hover时的宽度,默认值为8editHelperSize 通过getEditHelperSize()和setEditHelperSize(size)操作,表示辅助编辑按钮的大小,默认为16helperEditableFunc 通过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轴尺寸),请参考下面的例子: