当前位置: 首页 > news >正文

前端之电力系统SVG图低代码

其实所有的图形都是由点,线,面组成的。点线面可以组成一个设备。下面就简单讲讲点线面是怎么画的吧

对于线,可以用path

<g><path:d="`M ${beginX},${beginY} L ${endX},${endY}`":stroke-width="lineWidth":stroke="stroke":style="{ transform: `rotate(${rotateAngle}deg)`, transformOrigin: transformOrigin }"><animate attributeName="stroke" :values="animateStyle" dur="1s" begin="0s" repeatCount="indefinite" v-if="animation" /></path></g>

两点一线,只要知道两个点的坐标就可以,但是基础图元可以旋转,也可以闪烁,所以这些属性都需要动态计算。

两点可以组成线,多点可以组成折线,这就需要一个polyline类去解析每个折线。

ployline也是用path就可以了,但是中间的点需要连起来,样式的计算需要循环拼接字符串

const d = computed(() => {if (polyline.value && centerPoint.value) {let tmp = "";for (let i = 0; i < pointList.value.length; i++) {const point = pointList.value[i];if (i === 0) {beginX.value = (point.X() + centerPoint.value.X()) * scaleX.value;beginY.value = (point.Y() + centerPoint.value.Y()) * scaleY.value;tmp += `M ${beginX.value},${beginY.value}`;} else {if (i === pointList.value.length - 1) {endX.value = (point.X() + centerPoint.value.X()) * scaleX.value;endY.value = (point.Y() + centerPoint.value.Y()) * scaleY.value;}tmp += `L ${(point.X() + centerPoint.value.X()) * scaleX.value},${(point.Y() + centerPoint.value.Y()) * scaleY.value}`;}}transformOrigin.value = `${(beginX.value + endX.value) / 2}px ${(beginY.value + endY.value) / 2}px`;return tmp;}return "";
});

有了线,当然需要面,这时候一个polygon类就可以解决,唯一和polyline不同的是,path最后一个点需要Z闭合

 tmp += "Z";

svg里面的渲染最有难度的大圆弧和小圆弧,需要用到三角函数

   <pathv-else:d="`M ${beginX},${beginY}A ${r} ${r} 0 ${largeArcFlag} ${sweepFlag} ${endX} ${endY}L ${cx} ${cy}Z`":style="style"><animate attributeName="stroke" :values="animateStyle" dur="1s" begin="0s" repeatCount="indefinite" v-if="animation" /></path>

整圆就用<circle>标签

剩下的都是用foreignObject写的

 <foreignObject :x="beginX" :y="beginY" :width="countWidth" :height="countHeight" requiredExtensions="http://www.w3.org/1999/xhtml"><body xmlns="http://www.w3.org/1999/xhtml" class="textBg" :style="{ transform: `rotate(${rotateAngle}deg)` }"><div :class="[isVertical ? 'isVertical' : '', 'textStyle']" v-if="!htmlText" :id="`${str._id}`">{{ strText }}</div><div :class="[isVertical ? 'isVertical' : '', 'textStyle']" v-else v-html="strText" :id="`${str._id}`"></div></body></foreignObject>

http://www.lryc.cn/news/350311.html

相关文章:

  • 括号生成[中等]
  • 配置ubuntu的VNC时遇到报错_XSERVTransmkdir: Mode of /tmp/.X11-unix should be set to 1777
  • openstack部署nova中出现的问题:
  • 【OpenCV 基础知识 3】边缘检测
  • 拓宽知识储备量(指数级成长)
  • x264 帧类型代价计算原理:slicetype_mb_cost 函数分析
  • 战网国际服加速器哪个好用 暴雪战网免费加速器分享
  • Java入门基础学习笔记26——break,continue
  • HNU-算法设计与分析-作业6
  • 2D Chests Assets - Mega Pack
  • 一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性
  • vue阶段性测试题,内容丰富,案例典型,题目配有答案
  • 如何查看PC电脑已经已经连接上的网络WiFi密码?
  • Java 语言的特点分析及应用
  • Golang | Leetcode Golang题解之第84题柱状图中最大的矩形
  • linux实用命令
  • 创建和管理数据库
  • Spring STOMP-发送消息
  • kubernetes多master集群架构
  • MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据)
  • hive动态分区
  • QT状态机10-QKeyEventTransition和QMouseEventTransition的使用
  • PDK安装及简介
  • 20240511每日运维----聊聊nignx改配置所有的nginx改完unknow
  • hive日常使用时忘记部分补充(不定时)
  • android 安全机制 和权限管理 的一点研究
  • Vue3.0 一些总结 【持续更新】
  • C++语法|对象的浅拷贝和深拷贝
  • 行为型模式
  • AI大模型日报#0515:Google I/O大会、 Ilya官宣离职、腾讯混元文生图大模型开源