Loading...
首先我们将具有相同行为和外观的连接桩归为同一组,并通过 groups
选项来设置分组,该选项是一个对象 { [groupName: string]: PortGroupMetadata }
,组名为键,值为每组连接桩的默认选项,支持的选项如下:
interface PortGroupMetadata {markup?: Markup // 连接桩 DOM 结构定义。attrs?: Attr.CellAttrs // 属性和样式。zIndex?: number | 'auto' // 连接桩的 DOM 层级,值越大层级越高。// 群组中连接桩的布局。position?: [number, number] | string | { name: string; args?: object }label?: {// 连接桩标签markup?: Markupposition?: {// 连接桩标签布局name: string // 布局名称args?: object // 布局参数}}}
然后我们配置 items
,items
是一个数组 PortMetadata[]
,数组的每一项表示一个连接桩,连接桩支持的选项如下:
interface PortMetadata {id?: string // 连接桩唯一 ID,默认自动生成。group?: string // 分组名称,指定分组后将继承分组中的连接桩选项。args?: object // 为群组中指定的连接桩布局算法提供参数, 我们不能为单个连接桩指定布局算法,但可以为群组中指定的布局算法提供不同的参数。markup?: Markup // 连接桩的 DOM 结构定义。指定该选项后将覆盖 `group` 指代的群组提供的默认选项。attrs?: Attr.CellAttrs // 元素的属性样式。指定该选项后将覆盖 `group` 指代的群组提供的默认选项。zIndex?: number | 'auto' // 连接桩的 DOM 层级,值越大层级越高。指定该选项后将覆盖 `group` 指代的群组提供的默认选项。label?: {// 连接桩的标签。指定该选项后将覆盖 `group` 指代的群组提供的默认选项。markup?: Markup // 标签 DOM 结构position?: {// 标签位置name: string // 标签位置计算方法的名称args?: object // 标签位置计算方法的参数}}}
从下面例子代码中可以清晰看到连接桩的定义方式。
节点上有丰富的 API 对连接桩进行增、删、改操作。
// 添加连接桩node.addPort({group: 'top',attrs: {text: {text: 'xx',},},})// 删除连接桩node.removePort(portId)// 更新连接桩node.portProp(portId, 'attrs/circle/stroke', color)
连接桩布局算法只能通过 groups
中的 position
选项来指定,因为布局算法在计算连接桩位置时需要考虑到群组中的所有连接桩,我们在单个连接桩中可以通过 args
选项来影响该连接桩的布局结果。
我们默认提供了下面几种连接桩布局算法,同时支持自定义连接桩布局算法并注册使用,点击下面的链接可以了解每种布局算法的使用方法。
absolute
绝对定位。left
矩形节点左侧均匀分布。right
矩形节点右侧均匀分布。top
矩形节点顶部均匀分布。bottom
矩形节点底部均匀分布。line
沿指定的线均匀分布。ellipse
沿椭圆圆弧分布。ellipseSpread
沿椭圆均匀分布。在 groups
的 label.position
选项和节点的 items.label.position
选项中都可以指定标签的位置。
我们默认提供了下面几种标签位置,也支持自定义标签位置并注册使用,点击下面的链接了解每种标签位置的使用方法。
left
标签位于连接桩左侧。right
标签位于连接桩右侧。top
标签位于连接桩上方。bottom
标签位于连接桩下方。inside
标签位于节点内围(靠近边线的内侧)。outside
标签位于节点外围(靠近边线的外侧)。insideOriented
标签位于节点内围,而且根据所在方位自动调整文本的方向。outsideOriented
标签位于节点外围,而且根据所在方位自动调整文本的方向。radial
标签位于圆形或椭圆形节点的外围。radialOriented
标签位于圆形或椭圆形节点的外围,并使标签文本自动沿圆弧方向旋转。