antv x6连线与取消连线的操作+自定义连接桩+节点选择/框选

本文介绍如何在AntV X6中实现自定义连线功能,包括定义不同类型的连接桩并控制其样式与数据,设置连线规则以确保只有相同类型的连接桩才能连接,以及在节点选择或框选时回传数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

antv x6连线与取消连线的操作+自定义连接桩+节点选择/框选

我们的需求:给连接桩赋不同样式与数据代表不同类型,连线中只有相同类型的连接桩才可以相连,并且左边连接桩为输入,右边连接桩为输出,输入必须和输出相连,输出也只能和输入相连,每次选择节点后回传数据

在这里插入图片描述
假设我们的数据结构如下;

{
   
			"name": "python",
			"icon": "images/pythonScripts@2x.png",
			"icon1": "images1/pythonScripts@2x.png",
			"description": "",
			"category": "Scripts",
			"typeID": 3,
			"inputs": [
				{
   
					"name": "Data",
					"type": "DataType"
				},
				{
   
					"name": "Model",
					"type": "ModelType"
				}
			],
			"outputs": [
				{
   
					"name": "Data",
					"type": "DataType"
				},
				{
   
					"name": "Model",
					"type": "ModelType"
				}
			]
		},

然后我们先来看:

1.自定义连接桩

1.1定义连接桩位置及数据

let groups = {
   },
    items = [],
    inputs = type.inputs,
    outputs = type.outputs,
    name = type.name;

  if (inputs.length) {
   
    inputs.forEach((item, index) => {
   
      // 如果type为data类型
      if (item.type === "dataType") {
   
        groups.input1 = {
   
          position: {
   
            name: "absolute", // 连接桩固定属性
          },
          attrs: {
   
            fo: {
   
              magnet: "true", 
            },
            data: item, // 自定义与与节点/边关联的业务数据
          },
        };
        items.push({
   
          id: `${
     name}_input_${
     item.name}_${
     item.type}`, // 使用拼接字符串代表此连接桩属性
          group: "input1",
          args: {
    // 连接桩位置
            x: 0,
            y: 47,
            angle: 45,
          },
        });
      }
      // 如果type为model类型
      if (item.type === "<class 'sklearn.base.ClassifierMixin'>") {
   
        groups.input2 = {
   
          position: {
   
            name: "absolute",
          },
          attrs: {
   
            fo: {
   
              magnet: "true",
            },
            data: item, // 自定义与与节点/边关联的业务数据,为我们上方展示的数据结构
          },
        };
        items.push({
   
          id: `${
     name}_input_${
     item.name}_${
     item.type}`,
          group: "input2",
          args: {
   
            x: 0,
            y: 104,
            angle: 45,
          },
        });
      }
    });
  }

  if (outputs.length) {
   
    outputs.forEach((item, index) => {
   
      // 如果type为data类型
      if (item.type === "<class 'pandas.core.frame.DataFrame'>") {
   
        // console.log(123123123123123123123123123123123123123123);
        groups.output1 = {
   
          position: {
   
            name: "absolute",
          },
          attrs: {
   
            fo: {
   
              magnet: "true",
            },
            data: item, // 自定义与与节点/边关联的业务数据
          },
        };
        items.push({
   
          id: `${
     name}_output_${
     item.name}_${
     item.type
### AntV X6 连线样式自定义配置 AntV X6 提供了丰富的 API 和配置项来实现连线样式的自定义。以下是关于如何通过不同的方式调整和设置连线样式的具体说明。 #### 1. 基本连线样式配置 X6 中可以通过 `edge` 的属性对象来自定义连线的外观。例如,可以指定线条的颜色、宽度以及箭头形状等基本参数: ```javascript const edge = graph.addEdge({ source: 'node1', target: 'node2', attrs: { line: { stroke: '#8f8f8f', // 设置线条颜色 strokeWidth: 2, // 设置线条粗细 }, marker: { // 添加箭头标记 name: 'block', size: 10, fill: '#5F95FF' } } }); ``` 上述代码片段展示了如何为一条边设置基础样式[^2]。 --- #### 2. 路由路径控制 为了更精确地控制连线的路由行为,可以利用 `router` 属性。常见的路由算法有 `'manhattan'`, `'orthogonal'` 或者第三方库支持的 Dagre 等。以下是一个例子展示正交路由的应用: ```javascript graph.addEdge({ source: 'node1', target: 'node2', router: { name: 'orthogonal', // 正交路由模式 args: { padding: 20 // 边距大小 } }, attrs: { line: { stroke: '#ff7d7d', strokeWidth: 3 } } }); ``` 此部分描述了如何应用不同类型的路由器并结合视觉效果优化线路表现[^1]。 --- #### 3. 自定义锚点位置 默认情况下,X6 计算源端点到目标端点之间的最短距离作为起点终点的位置。如果希望手动干预这些锚定点,则可通过如下方式进行设定: ```javascript graph.addEdge({ source: { id: 'node1', anchor: [0.5, 0] }, // 定义从 node1 上方中心出发 target: { id: 'node2', anchor: [0.5, 1] } // 到达 node2 下方中心结束 }); ``` 这里介绍了灵活调整两端连接处的具体坐标的方法[^3]。 --- #### 4. 图片节点间的特殊处理 当涉及图像型节点时可能会面临一些额外挑战,比如图片加载延迟影响初始渲染等问题。针对这种情况建议预先加载资源文件后再执行绘图操作;另外对于多拐点多角度的情况也可以尝试简化拓扑结构减少不必要的折弯数量从而提升整体美观度。 --- #### 总结 综上所述,借助于 AntV X6 所提供的强大工具集完全可以满足大多数场景下对图形化数据呈现的需求,并且允许开发者高度个性化定制其界面风格以匹配特定应用场景的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值