通过anvt X6和vue3实现图编辑

news/2024/7/10 2:34:06 标签: vue, anvtX6, javascript

通过anvt X6
X6地址:https://x6.antv.antgroup.com/tutorial/about;
由于节点比较复杂,使用vue实现的节点;
x6提供了一个独立的包 @antv/x6-vue-shape 来使用 Vue 组件渲染节点。
VUE3的案例:

<template>
  <div class="app-content">
    <div id="container"></div>
    <TeleportContainer />
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue'
  import ProgressNode from './components/ProgressNode.vue'
  import { Graph } from '@antv/x6'
  import { register, getTeleport } from '@antv/x6-vue-shape'

  register({
    shape: 'custom-vue-node',
    width: 100,
    height: 100,
    component: ProgressNode,
  })
  const TeleportContainer = getTeleport()

  export default defineComponent({
    name: 'App',
    components: {
      TeleportContainer,
    },
    mounted() {
      const graph = new Graph({
        container: document.getElementById('container')!,
        background: {
          color: '#F2F7FA', //画布背景颜色
        },
        panning: true,//是否可以平移 默认true
        mousewheel: true,//是否可以缩放 默认true
        autoResize: true,
        interacting: function (cellView) {
          return {
                nodeMovable: false,//节点是否可以被移动。
             // vertexAddable: false,//是否可以添加边的路径点。
             // arrowheadMovable: false,//边的起始/终止箭头是否可以被移动
             // edgeMovable: false,//边是否可以被移动。
            }
       }
      })

      graph.addNode({
        shape: 'custom-vue-node',
        x: 100, //x位置 
        y: 60, //y位置 
      })
      //x,y设置为0节点添加的位置就是左上角
    },
  })
</script>

节点组件内容如下:

<template>
  <el-progress type="dashboard" :percentage="percentage" :width="80">
    <template #default="{ percentage }">
      <span class="percentage-value">{{ percentage }}%</span>
    </template>
  </el-progress>
</template>

<script lang="ts">
  import { defineComponent } from 'vue'

  export default defineComponent({
    name: 'ProgressNode',
    inject: ['getNode',"getGraph"],//注入node和graph,可以在组件内使用了
    data() {
      return {
        percentage: 80,
      }
    },
    mounted() {
      const node = (this as any).getNode()
      console.log(node)
      const graph = (this as any).getGraph();
      const zoom = graph.zoom(); //获取缩放的比例
      // 画布缩放到0.5
      graph.zoomTo(.5, {
            center: {
            //缩放的中心
              x:0,
              y: 0
            }
      });
    },
  })
</script>

效果如下:代码运行的效果可以进行拖动进程图
在这里插入图片描述
后记:画布进行缩放之后不是1的情况下,设置节点内部的offset会出现bug,可以通过先zoomTo 1 然后进行offset设置,设置完成之后在进行zoomTo 回去。

const graph = (this as any).getGraph();
          const zoom = graph.zoom();
          graph.zoomTo(1, {
            center: {
              x: 0,
              y: 0
            }
          });
//进行offset设置.....

  graph.zoomTo(zoom, {
            center: {
              x: this.zoomX,
              y: this.height / 2
            }
          });

http://www.niftyadmin.cn/n/4925755.html

相关文章

DNS、ARP

目录 DNS以及它的用途 DNS的解析方式 DNS的查询方式 DNS使用TCP/UDP DNS劫持 常见的DNS劫持现象 DNS劫持与HTTP劫持的不同 处理DNS劫持 DNS缓存 DNS实现负载均衡 ARP以及他的工作原理 DNS以及它的用途 DNS是域名解析服务器&#xff0c;用来将域名解析成IP。DNS工作在…

数据请求与导入mysql数据库

端口数据获取与文件保存 文件存入数据库 系统&#xff1a;Ubuntu 工具&#xff1a;Postman&#xff0c;MySql Workbench 端口数据获取与文件保存 打开postman接口测试工具 选择请求方式输入请求地址选择请求参数设置请求参数的格式输入请求参数发送请求 请求成功 选择浏览…

SpringBoot基础之注册Servlet三大组件

文章目录 前言一、介绍二、注入Bean2.1.ServletRegistrationBean2.2.FilterRegistrationBean2.3.ServletListenerRegistrationBean 三.演示结果总结 前言 本文章将介绍SpringBoot注册Servlet的三大组件 一、介绍 由于SpringBoot默认是以jar包的方式运行嵌入式Servlet容器来启…

React中使用mobx管理状态数据使用样例

MobX 是一个身经百战的库&#xff0c;它通过运用透明的函数式响应编程&#xff08;Transparent Functional Reactive Programming&#xff0c;TFRP&#xff09;使状态管理变得简单和可扩展。官网地址&#xff1a;关于 MobX | MobX中文文档 | MobX中文网 安装依赖 mobx-react-…

OpenCV和PIL图像对象转换

OpenCV和PIL&#xff08;Python Imaging Library&#xff09;都是常用的Python图像处理库。它们都有自己的图像对象类型&#xff0c;因此在使用它们时需要进行相应的转换。 下面是OpenCV图像对象和PIL图像对象之间的转换方法&#xff1a; 将OpenCV图像对象转换为PIL图像对象&…

使用MyEclipse如何部署Descriptor (XML)编辑器?

Descriptor (XML) Editor编辑器包含了高级的XML编辑功能&#xff0c;在本文中您将了解到这些编辑功能、Web XML编辑等&#xff0c;此功能包含在MyEclipse中可用。 MyEclipse v2023.1.2离线版下载 1. Web XML 编辑器 MyEclipse Web XML编辑器包括高级XML编辑功能&#xff0c;…

CentOS 7 构建 LVS-DR 群集

一、LVS-DR集群摘要 LVS&#xff08;Linux Virtual Server&#xff09;是一个用于构建可扩展和高可用性的负载均衡集群的软件。它基于Linux操作系统&#xff0c;并提供了一种将网络流量分发到多个后端服务器的机制。 二、基本工作原理 配置负载均衡器&#xff1a;在LVS集群中…

Ubuntu 18.04快速安装Visual Studio Code的方法及插件

Ubuntu 18.04安装Visual Studio Code的方法_李71~李先森的博客-CSDN博客 Step1&#xff1a;update apt&#xff0c;安装依赖项&#xff1a; sudo apt update sudo apt install gnupg2 software-properties-common apt-transport-https wget Step2&#xff1a;使用wget命令导入…