antv/x6 使用Stencil实现拖拽生成节点

news2024/11/27 11:37:57

antv/x6 使用Stencil实现拖拽生产节点

    • 安装stencil插件
    • 引用Stencil
    • 初始化拖拽生成节点

在这里插入图片描述

安装stencil插件

npm install @antv/x6-plugin-stencil@2.1.4 --save

引用Stencil

<div id="stencil"></div>

import { Stencil } from '@antv/x6-plugin-stencil'

// 初始化 stencil
    const stencil = new Stencil({
      title: '流程图',
      target: this.graph,
      stencilGraphWidth: 180,
      stencilGraphHeight: 150,
      // collapsable: false,
      groups: [
        {
          title: '基础',
          name: 'group1',
          collapsable: false,
          layoutOptions: {
            columns: 2,
            columnWidth: 80,
            rowHeight: 45,
          },
        },
        {
          title: '高级',
          name: 'group2',
          collapsable: false,
          layoutOptions: {
            // resizeToFit: true,
            columns: 1,
            columnWidth: 180,
            rowHeight: 70,
            dx: 10,
            dy: 10,
            // marginY:10,
            center: false
          },
        },
      ],
      // layoutOptions: {
      //   columns: 2,
      //   columnWidth: 80,
      //   rowHeight: 55,
      // },
    })
    document.getElementById('stencil').appendChild(stencil.container)
  • title 标题。
  • groups 分组信息。
  • collapsable 是否显示全局折叠/展开按钮。
  • stencilGraphWidth 模板画布宽度。
  • stencilGraphHeight number 模板画布高度。设置为 0 时高度会自适应。
  • stencilGraphPadding 模板画布边距。
  • stencilGraphOptions Graph.Options 模板画布选项。

layoutOptions:

选项说明
columns网格布局的列数,默认为 2。行数根据节点数自动计算。
columnWidthnumber | ‘auto’ | ‘compact’ ‘auto’ 列宽。auto: 所有节点中最宽节点的宽度作为列宽,compact: 该列中最宽节点的宽度作为列宽。
rowHeightnumber| ‘auto’ | ‘compact’ ‘auto’ 行高。auto: 所有节点中最高节点的高度作为行高,compact: 该行中最高节点的高度作为行高。
dx单元格在 X 轴的偏移量,默认为 10。
dy单元格在 Y 轴的偏移量,默认为 10。
marginX单元格在 X 轴的边距,默认为 0。
marginY单元格在 Y 轴的边距,默认为 0。
center节点是否与网格居中对齐,默认为 true。
resizeToFit是否自动调整节点的大小来适应网格大小,默认为 false。

初始化拖拽生成节点

// 初始化图形ports 
const ports = {
  groups: {
    top: {
      position: 'top',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#cf1322',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'visible',
          },
        },
      },
    },
    right: {
      position: 'right',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#389e0d',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'visible',
          },
        },
      },
    },
    bottom: {
      position: 'bottom',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#389e0d',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'visible',
          },
        },
      },
    },
    left: {
      position: 'left',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#cf1322',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'visible',
          },
        },
      },
    },
  },
  items: [
    {
      group: 'top',
    },
    {
      group: 'right',
    },
    {
      group: 'bottom',
    },
    {
      group: 'left',
    },
  ],
}
// 注册节点
Graph.registerNode(
  'start',
  {
    inherit: 'rect',
    width: 66,
    height: 36,
    attrs: {
      body: {
        // strokeWidth: 1,
        stroke: '#38BE89',
        fill: '#38BE89',
      },
      text: {
        fontSize: 12,
        fill: 'white',
      },
    },
    ports: { 
      ...ports,
      items: [
        {
          group: 'bottom'
        }
      ]
    },
  },
  true,
)

Graph.registerNode(
  'end',
  {
    inherit: 'rect',
    width: 66,
    height: 36,
    attrs: {
      body: {
        // strokeWidth: 1,
        stroke: 'rgb(207, 19, 34)',
        fill: 'rgb(207, 19, 34)',
      },
      text: {
        fontSize: 12,
        fill: 'white',
      },
    },
    ports: { 
      ...ports,
      items: [
        {
          group: 'top'
        }
      ]
    },
  },
  true,
)

// 创建节点
const r1 = this.graph.createNode({
  shape: 'start',
  label: '开始',
  attrs: {
    body: {
      rx: 20,
      ry: 26,
    },
  },
})
const r7 = this.graph.createNode({
  shape: 'end',
  data: {
    label: '结束'
  },
  label: '结束',
  attrs: {
    body: {
      rx: 20,
      ry: 26,
    },
  },
})

// 加载节点
stencil.load([r1, r7], 'group1')
stencil.load([r1], 'group2')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sam Altman再出手,投资了两个不到20岁的RPA创业者

“AI到底是变革还是泡沫&#xff1f;” 作者 | 王王 首图来源&#xff1a;IndiaTimes Sam Altman又出手了。这次他投资了一个只有5个人的RPA早期团队Induced AI&#xff0c;两位联合创始人Aryan Sharma和Ayush Pathak&#xff0c;一个18岁&#xff0c;一个19岁。 不只是Sam A…

服务号能升级成订阅号吗

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;一、文章推送的篇数不同服务号在文章的推送篇数上是有所限制的&#xff08;每月推4次&#xff09;订阅号则每天可推送一篇文章。二、定义不同服务号主要是为关注用户提供服务使用的&#xff1b;订阅…

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…

嵌入式系统设计与应用---ARM指令集(学习笔记)

目录 本文图片截取自书本和老师的ppt 概述 指令格式 指令的条件码 ARM的寻址方式 立即寻址 寄存器寻址 寄存器间接寻址 寄存器移位寻址 变址寻址 多寄存器寻址 相对寻址 堆栈寻址 块复制寻址 ARM指令集简介 跳转指令 1.B指令 2.BL指令 数据处理指令 1.数据传…

PostgreSQL简介及安装步骤

PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统&#xff0c;具有强大的扩展性、高度的可定制性和可靠的稳定性&#xff0c;因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…

94 腐烂的橘子

腐烂的橘子 题解1 多源广度优先搜索另一种写法 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 …

儿童围栏上架亚马逊TEMU平台美国站做什么认证?儿童围栏认证标准ASTM F1004

ASTM F1004-21对 "伸缩门 "的定义是&#xff1a;"用于竖立在门口等开口处的障碍物&#xff0c;以防止幼儿通过&#xff0c;但可由能够操作锁定装置的老年人拆除"&#xff08;第3.1.7节&#xff09;。 ASTM F1004-21对 "可扩展围栏 "的定义是&am…

top和jstack分析堆栈问题

1.top 在服务器上&#xff0c;我们可以通过top命令查看各个进程的cpu使用情况&#xff0c;它默认是按cpu使用率由高到低排序的 由上图中&#xff0c;我们可以找出pid为21340的java进程&#xff0c;它占用了最高的cpu资源 2. top -Hp pid 通过top -Hp 21340可以查看该进程下&…

51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)

51单片机的篮球计分器液晶LCD1602显示 &#x1f4d1;1.主要功能&#xff1a;&#x1f4d1;讲解视频&#xff1a;&#x1f4d1;2.仿真&#x1f4d1;3. 程序代码&#x1f4d1;4. 原理图&#x1f4d1;5. PCB图&#x1f4d1;6. 设计报告&#x1f4d1;7. 设计资料内容清单&&…

通信原理板块——时域均衡

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、均衡器 为了减小码间串扰的影响…

十种排序算法(2) - 代码和原理

本文建立在上一篇文章的基础上&#xff1a;《十种排序算法(1) - 准备工具》 注&#xff1a;本文以升序为例子进行实现和解释 1.选择排序 选择排序是最简单几种排序算法之一 (1) 原理 不断使用查找并选择最小的元素放到数组的首端 (2) 复杂度分析 最好&#xff1a;O(n^2…

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

Flask&#xff08;Jinja2&#xff09; 服务端模板注入漏洞(SSTI) 参考 https://www.freebuf.com/articles/web/260504.html 验证漏洞存在 ?name{{7*7}} 回显49说明漏洞存在 vulhub给出的payload: {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__…

多测师肖sir_高级金牌讲师_jenkins搭建

jenkins操作手册 一、jenkins介绍 1、持续集成&#xff08;CI&#xff09; Continuous integration 持续集成 团队开发成员每天都有集成他们的工作&#xff0c;通过每个成员每天至少集成一次&#xff0c;也就意味着一天有可 能多次集成。在工作中我们引入持续集成&#xff0c;通…

ESP-IDF-V5.1.1使用websocket

IDF Component Registry (espressif.com) 在windows系统中&#xff0c;在项目目录下使用命令 idf.py add-dependency "espressif/esp_websocket_client^1.1.0"

OneNote Win10自带的宝藏笔记工具

大家在上学期间&#xff0c;通常要做大量的笔记&#xff0c;为后期巩固和复习。中学小学期间&#xff0c;大家往往是通过手写笔记来记录所学知识&#xff0c;然而上了大学&#xff0c;更加自由的学习条件下&#xff0c;大家逐渐开始用电子产品来做笔记。无论是平板还是电脑&…

【解刊】1区TOP,国人友好,仅1个月左右录用,2天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读&#xff0c;如有相关领域作者有意向投稿&#xff0c;可作为重点关注&#xff01;后文有同领域快刊发表案例&#xff0c;供您投稿参考~ 01 期刊简介 Knowledge-Based Systems ☑️出版社&#xff1a;Els…

Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程

目录 OpenCV的下载与配置Visual Studio 2022的配置新建工程新建文件新建项目属性表环境配置测试先写一个输出将OpenCV的动态链接库添加到项目的 x64 | Debug下测试配置效果 Other OpenCV的下载与配置 参考这个OpenCV的下载与环境变量的配置&#xff1a; Windows10CLionOpenCV4…

「掌握创意,释放想象」——Photoshop 2023,你的无限可能!

Adobe Photoshop 2023(PS2023) 来了,全世界数以百万计的设计师、摄影师和艺术家使用 Photoshop 将不可能变为可能。从海报到包装&#xff0c;从基本的横幅到漂亮的网站&#xff0c;从令人难忘的徽标到引人注目的图标&#xff0c;Photoshop 2023让创意世界不断前进。借助直观的工…

Amazon EC2 安全可调用的云虚拟主机服务器

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Amazon EC2 打造全新的科技链 Amazon Elastic Compute Cloud&#xff08;Amazon EC2&#xff09;提供最广泛、最深入的计算平台&#xff0c;拥有超过 500 个实例&…

开放式耳机能保护听力吗?开放式耳机有哪些优缺点?

先说答案&#xff0c;开放式耳机是可以保护听力的&#xff01; 想要了解开放式耳机是否能保护听力&#xff0c;就要先知道什么是开放式耳机&#xff0c;开放式耳机是一种无需入耳&#xff0c;并且使用时不会堵塞耳道&#xff0c;也不会隔绝外界声音的蓝牙耳机。 一、开放式耳…