【国产开源可视化引擎Meta2d.js】图元

news2024/11/16 7:46:40

图元

又称画笔Pen。图形表达的基本元素,组成图像的基本单元。

构成

每一个图元由ID、名字、类型、属性(数据)组成。

ID

名为“id”的特殊属性,图元实例(画布上的图元对象)的唯一标识。拖拽到画布或创建一个图元对象时,自动生成。可以修改,但需要保证唯一性。自定义图形库时不能写死。

名字

名为“name”的特殊属性,用于区分不同的图形。例如正方形、圆、连线、开关、报警灯等。

类型

名为“type”的特殊属性,用于区分节点node连线line

  • 节点 - 没有轨迹的普通图形,具有逐帧动画。

  • 连线 - 包含起点终点的轨迹线条,只有轨迹动画,没有逐帧动画。

属性(数据)

属性即数据。图元属性数据分通用属性自定义数据

  • 通用属性 - Meta2d.js内核支持的通用规则属性。

常用通用属性有: id,name,type,rect,text,anchors、color、background等。

  • 自定义数据 - 图元自身独有数据,用于显示或业务逻辑。可以任意添加自定义数据。

添加

符合格式的 json 数据即图元。例如:

// 矩形 
const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100, }; 
// 方式1:添加到画布,并选中,会触发生命周期函数beforeAddPen 
meta2d.addPen(pen); 


// 方式2:仅添加画笔,不选中,不触发生命周期函数,不重绘(不立刻显示),可用于批量添加后,一次重绘 
meta2d.canvas.makePen(pen); 
// 选中高亮 
meta2d.active([pen]); 
// 重绘显示 
meta2d.render();

上面代码,可直接在 2d.le5le.com 官网在线编辑器或 meta2d 实例页面的控制台执行

查找

const pen = {
  id: "唯一id,缺省自动生成",
  name: "rectangle",
  text: "矩形",
  x: 100,
  y: 100,
  width: 100,
  height: 100,
  tags: ["tag-rectangle"],
};
meta2d.addPen(pen);

// 方法1:通过id查找
const pen1 = meta2d.findOne(pen.id);

// 方法2:通过tag查找。find函数返回的是数组
const pens = meta2d.find("tag-rectangle");

更新

const pen = {
  id: "唯一id,缺省自动生成",
  name: "rectangle",
  text: "矩形",
  x: 100,
  y: 100,
  width: 100,
  height: 100,
  tags: ["tag-rectangle"],
};
meta2d.addPen(pen);

// 方法1:通过id查找修改
meta2d.setValue({
  id: pen.id,
  color: "red",
});

// 方法2:通过tag(批量)修改,满足条件的都将修改
meta2d.setValue({
  tag: 'tag-rectangle',
  color: "red",
});

选中

const pen = {
  name: "rectangle",
  text: "矩形",
  x: 100,
  y: 100,
  width: 100,
  height: 100,
};
meta2d.addPen(pen);

// 选中
meta2d.active([pen]);

// 取消选中
meta2d.inactive();

// 查看是否选中
console.log(pen.calculative.active);

// 查看选中图元
console.log(meta2d.store.active)

区域

每个图元需要有一个宽高不为0的区域,即x,y,width,height

const pen = {
  name: "rectangle",
  text: "矩形",
  x: 100,
  y: 100,
  width: 100,
  height: 100,
};
meta2d.addPen(pen);

// 获取区域坐标
meta2d.getPenRect(pen)

// 设置图元坐标
meta2d.setPenRect(pen,{x,y,width,height})

注意】如果pen为根元素,坐标为>1的像素;如果pen为子元素,坐标为相对父元素的纯小数表示的百分比。

交互事件

仅当画布锁定后(meta2d.store.data.locked = 1 or 2),触发事件。否则,干扰编辑。交互事件主要有:

  • 鼠标进入 enter
  • 鼠标离开 leave
  • 选中 active
  • 取消选中 inactive
  • 单击 click
  • 双击 dblclick
  • 鼠标按下 mousedown
  • 鼠标抬起 mouseup
  • 值变化 valueUpdate
const pen = {
  name: "rectangle",
  text: "矩形",
  x: 100,
  y: 100,
  width: 100,
  height: 100,
  events: [
    {
      name: "click",
      action: EventAction.Link, // 执行动作
      where: { key: "text", comparison: "==", value: "矩形" }, // 触发条件
      value: "2d.le5le.com",
    },
  ],
};
meta2d.addPen(pen);


// 
enum EventAction {
  Link, 					// 打开链接
  SetProps,				// 设置属性
  StartAnimate,   // 执行动画
  PauseAnimate,   // 暂停动画
  StopAnimate,    // 停止动画
  Function,       // 执行JS代码
  WindowFn,       // 执行全局函数
  Emit,           // 发送消息
}

国产开源

乐吾乐潜心研发,自主可控,持续迭代优化

Github:GitHub - le5le-com/meta2d.js: The meta2d.js is real-time data exchange and interactive web 2D engine. Developers are able to build Web SCADA, IoT, Digital twins and so on. Meta2d.js是一个实时数据响应和交互的2d引擎,可用于Web组态,物联网,数字孪生等场景。

Gitee: meta2d.js: The meta2d.js is real-time data exchange and interactive web 2D engine. Developers are able to build Web SCADA, IoT, Digital twins and so on. Meta2d.js是一个实时数据响应和交互的2d引擎,可用于Web组态,物联网,数字孪生等场景。

欢迎Star、Fork、博文支持

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

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

相关文章

【最新鸿蒙应用开发】——Router页面路由

Router路由 页面路由指的是在应用程序中实现不同页面之间的跳转,以及数据传递。通过 Router 模块就可以实现这个功能. 1. 创建页面 之前是创建的文件,使用路由的时候需要创建页面,步骤略有不同 方法 1:直接右键新建Page&#xf…

Java项目:基于SSM框架实现的健康综合咨询问诊平台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的健康综合咨询问诊平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

js使用proxy代理监听控制事件

本文为proxy代理的实例应用,有关代理的内容可以参考: js语法---理解反射Reflect对象和代理Proxy对象 监听事件 要监听dom元素的事件,我们会采用回调触发的方式来执行操作, 而触发事件的过程很明显是一个异步操作,异…

activemq-CVE-2022-41678

Apache ActiveMQ Jolokia 后台远程代码执行漏洞 Apache ActiveMQ在5.16.5,5.17.3版本及以前,后台Jolokia存在一处任意文件写入导致的远程代码执行漏洞。 启动环境 admin/admin 方法一:利用poc 这个方法受到ActiveMQ版本的限制,因…

矢量数据库:LLMs外挂知识库

矢量数据库为管理高维数据提供了专门的解决方案,这对人工智能的上下文决策至关重要。但它们究竟是如何做到的呢? 介绍 信息有多种形式。有些信息是非结构化的,例如文本文档、图片和音频。有些则是结构化的,例如应用程序日志、表格…

【可视化大屏系列】Echarts之柱图绘制

本文为个人近期学习总结,若有错误之处,欢迎指出! Echarts之柱图绘制 前言需求实现效果大概思路具体实现实现思路具体代码1.父组件写法2.子组件写法 附加1.同坐标系下,并排柱图绘制2.柱图下钻功能实现 前言 在前文页面布局、DataV…

HW期间——应急响应

01HW中应急响应的流程 001应急响应所处位置(应急处置组) 监控研判组发现的一些安全时间提供给应急处置组,应急处置组通过上机取证把线索给到溯源反制组。但是溯源反制组可能已经没有了,有些单位有,有些单位取消了。有…

标准扩散模型(standard diffusion)和潜在(latent diffusion)扩散模型的关键区别、对潜在扩散模型的认识

标准扩散模型(standard diffusion)和潜在(latent diffusion)扩散模型的关键区别、对潜在扩散模型的认识 1.两者的关键区别 潜在扩散模型通过在低维潜在空间的扩散过程,可以减少内存和计算的复杂性。而standard diffusion是在像素级别的空间(actual pixel space)进…

CSS上下悬浮特效

要实现一个上下悬浮的特效,可以使用CSS的keyframes规则和动画属性。以下是一个简单的示例: 代码示例 /* 定义一个名为floating的动画 */ keyframes floating {0% {transform: translateY(0); /* 初始位置 */}50% {transform: translateY(-4px); /* 向上…

吴恩达机器学习笔记2.1 - 什么是机器学习

吴恩达机器学习笔记2.1 - 什么是机器学习 最早的机器学习 1959年,亚瑟塞缪尔(Arthur Samuel)将机器学习定义为“Field of study that gives computers the ability to learn without being explicitly programmed”(无需编程即可学习的研究领域&#xf…

ABAP BAPI_INCOMINGINVOICE_CREATE dump

在执行BAPI_INCOMINGINVOICE_CREATE 之后,正常生成了发票号,但是系统会dump 数据会回滚 dump如下 查阅后得知相关note:1894901 原因是在填写税行的时候,输入了多行,将数据合并为一行后即可 代码如下: ls_headerdat…

openlayers更改点坐标

我现在的需求是无人机点位根据ws传输的经纬度改变位置,在网上查了很多资料,终于是做出来了,如果有问题请指出。 效果图,无人机可以来回移动 这里是核心代码 // 添加飞机点位图层let vectorLayerpointfunction DronepointLayer()…

vscode设置左侧窗口字体大小

vscode设置左侧窗口字体大小 打开设置 在搜索框输入Zoom 修改这个值即可放大相关字体

从数字化营销与运营视角:看流量效果的数据分析

基于数据打通的“全链路”营销是当下的“时髦”,应用它的前提是什么?深度营销和运营的关键数据如何获得?如何利用数据进行更精准的营销投放?如何利用数据优化投放的效果?如何促进消费者的转化,以及激活留存…

【js面试题】深入理解尾递归及其在JavaScript中的应用

面试题:举例说明尾递归的理解,以及应用场景 引言: 在编程中,递归是一种常见的解决问题的方法,它允许函数调用自身来解决问题。然而,递归如果不当使用,可能会导致栈溢出错误,特别是在…

无损音频格式 FLAC 转 MP3 音频图文教程

音频文件的格式多样,每种格式都有其独特的特点与适用场景。FLAC(Free Lossless Audio Codec),作为一种无损音频压缩格式,因其能够完美保留原始音频数据的每一个细节而备受音频发烧友和专业人士的青睐。 然而&#xff0…

代码随想录打卡第十八天

代码随想录–二叉树部分 day 17 休息日 day 18 二叉树第五天 文章目录 代码随想录--二叉树部分一、力扣654--最大二叉树二、力扣617--合并二叉树三、力扣700--二乘树中的搜素四、力扣98--验证二叉搜索树 一、力扣654–最大二叉树 代码随想录题目链接:代码随想录 给…

双系统ubuntu20.04扩容

windows端 打开磁盘管理器,选择需要的盘点击压缩卷 点击未分配的盘,新建简单卷,一致点击下一步即可,记住分配的大小容量 ubuntu端 lsblk 查看所有的磁盘,可以看到新增为nvme0n1p4、nvme1n1p2 win分配的格式为NTFS&a…

Idea-单个窗口导入并开启多个module项目

前言 大家是否有过这样的困扰,我们每次打开一个项目就需要单开一个idea窗口,项目少时了还好,一旦涉及多个项目间服务调用,特别是再包括网关、注册中心、前端web服务,需要开启的窗口就会是一大批,每次切换的…

antd a-select下拉框样式修改 vue3 亲测有效

记录一下遇到的问题 1.遇到问题: 使用到Vue3 Ant Design of Vue 3.2.20,但因为项目需求样式,各种查找资料都未能解决; 2.解决问题: ①我们审查元素可以看到,下拉框是在body中的; ①在a-select 元素上添加dropdownCla…