VUE使用DXFParser组件解析dxf文件生成图片

<template><div><input type="file" @change="handleFileChange" /></div><el-table :data="tableData" style="width: 100%"><el-table-column prop="Control_No" label="序号" width="180" /><el-table-column prop="Index" label="编号" width="180" /><el-table-column prop="ID" label="ID" width="180" /><el-table-column prop="BH" label="编号" width="180" /><el-table-column prop="Piece_Name" label="部位名称" width="180" /><el-table-column prop="data" label="日期" />'<el-table-column label="精品图片"><template v-slot="scope"><!-- 在这里访问tableData.vertices中的数据 --><div id="imageContainer"><!-- 使用scope.row来获取当前行的数据 --><img :src="generateCanvasImage(scope.row.vertices)" alt="精品图片" /></div></template></el-table-column></el-table>
</template><script>
import DXFParser from 'dxf-parser';export default {data() {return {tableData: [],}},methods: {handleFileChange(event) {const file = event.target.files[0];const reader = new FileReader();reader.onload = (e) => {const contents = e.target.result;// const decoder = new TextDecoder('utf-8');// const decodedContents = decoder.decode(contents);const parser = new DXFParser();const dxf = parser.parseSync(contents);// 处理解析后的DXF数据this.processDXF(dxf);// console.log(this.processDXF(dxf))};reader.readAsText(file);// reader.readAsArrayBuffer(file)},processDXF(dxf) {// 在这里处理解析后的DXF数据console.log(dxf);this.tableData.splice(0, this.tableData.length);// 示例:绘制一些图形到canvas上console.log(dxf.blocks)// dxf.blocks.forEach((e)=>{//   console.log(e)// })var Control_No = 1;for (var key in dxf.blocks) {if ('entities' in dxf.blocks[key]) {// console.log(dxf.blocks[key].entities[0].type)for (var i in dxf.blocks[key].entities) {if ("TEXT" === dxf.blocks[key].entities[i].type) {var ver = [];for (var w = 4; w < dxf.blocks[key].entities.length; w++) {if (dxf.blocks[key].entities[w].vertices) {dxf.blocks[key].entities[w].vertices[0].new = truever = ver.concat(dxf.blocks[key].entities[w].vertices);}}console.log(ver.concat(dxf.blocks[key].entities[5].vertices))var newItem = {Control_No: Control_No++,Index: key,ID: dxf.blocks[key].entities[0].text,BH: dxf.blocks[key].entities[1].text,Piece_Name: dxf.blocks[key].entities[2].text,vertices: ver,data: dxf.blocks[key].entities[3].text};this.tableData.push(newItem); // 将新对象添加到tableData数组中break;}}}}},generateCanvasImage(vertices) {// 获取Canvas元素var canvas = document.createElement("canvas");var ctx = canvas.getContext("2d");// 设置多边形的颜色var color = "#FF0000"; // 十六进制颜色值,例如 16711680 对应的颜色为红色// 顶点坐标列表// 计算图形的包围框var minX = Number.MAX_VALUE;var minY = Number.MAX_VALUE;var maxX = Number.MIN_VALUE;var maxY = Number.MIN_VALUE;for (var i = 0; i < vertices.length; i++) {var vertex = vertices[i];minX = Math.min(minX, vertex.x);minY = Math.min(minY, vertex.y);maxX = Math.max(maxX, vertex.x);maxY = Math.max(maxY, vertex.y);}// 计算缩放因子var width = maxX - minX;var height = maxY - minY;var scale = Math.min(canvas.width / width, canvas.height / height);// 绘制多边形ctx.beginPath();ctx.strokeStyle = color; // 设置描边颜色ctx.lineWidth = 1; // 设置线宽// 移动到第一个顶点ctx.moveTo((vertices[0].x - minX) * scale, (vertices[0].y - minY) * scale);// 依次连接顶点for (var e = 1; e < vertices.length; e++) {if (vertices[e].new === true) {console.log("true");// 如果条件成立,移动到当前顶点位置,不连接上一次的顶点ctx.moveTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);} else {// 否则继续连接顶点ctx.lineTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);}}// 关闭多边形路径ctx.closePath();// 绘制多边形ctx.stroke();// 将Canvas内容转换为图片路径var imgDataURL = canvas.toDataURL("image/png");// 在HTML页面上显示图片var imgElement = document.createElement("img");imgElement.src = imgDataURL;return imgElement.src// 将图片元素添加到页面中的图片容器// var container = document.getElementById("imageContainer");// container.appendChild(imgElement);}}
}
</script>

在这里插入图片描述
大致效果图如果大家有疑问欢迎评论我将在更新问题解析!

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

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

相关文章

Ubuntu 安装Nacos

1、官网下载最新版nacos https://github.com/alibaba/nacos/releases 本人环境JDK8&#xff0c;Maven3.6.3&#xff0c;启动Nacos2.2.1启动失败&#xff0c;故切换到2.1.0启动成功 2、放到服务器目录下&#xff0c;我的在/home/xxx/apps下 3、解压 $ tar -zxvf nacos-serve…

【计算机视觉】2.图像特征提取

图像特征提取 一、颜色特征量化颜色直方图聚类颜色直方图 二、边缘特征边缘边缘定义边缘提取边缘精细 三、特征点的特征描述子Harris角点FAST角点斑点SIFTHaar-like特征SURFORBLBPGabor 一、颜色特征 量化颜色直方图 HSV空间 优势&#xff1a;计算高效 劣势&#xff1a;量化问…

Linux基本操作符(1)

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 目录 Linux的登录 Linux下基本指令 指令操作的理解 几个与用户操作符 ls 指令 pwd命令 cd 指令 touch指令 mkdir指令 rmdir指令 && rm 指令 什么叫操作系统&#xff0c;我相信如果是学计算机的都听说过&…

SpringBoot 学习(九)Redis

11. 集成 Redis 11.1 说明 SpringBoot 操作数据&#xff1a;sping-data、jpa、jdbc、mongodb、redis SpringBoot 2. 后&#xff0c;jedis 被替换为 lettuce jedis&#xff1a;采用直连&#xff0c;多线程操作不安全&#xff0c;增强安全性需使用 jedis pool 连接池&#xff0…

Java --- MySQL8之索引优化与查询优化

目录 一、索引失效场景 1.1、全值匹配 1.2、最佳左前缀规则 1.3、主键插入顺序 1.4、计算、函数、类型转换(自动或手动)导致索引失效 1.5、类型转换导致索引失效 1.6、范围条件右边的列索引失效 1.7、不等于(! 或者<>)索引失效 1.8、is null可以使用索引&…

vue3中的watch可能是比watchEffect更好的选择

vue3中的watch可能是比watchEffect更好的选择 vue 最强大的功能之一是能够根据基本数据的变化来执行响应式副作用。为此&#xff0c;vue3提供两个方法&#xff1a;watch 和 watchEffect 。虽然两个方法都可以监控响应式数据的变化&#xff0c;但他们有不同的使用方式和行为。本…

Go语言中的自定义函数类型

函数类型的基本概念 在Go语言中&#xff0c;函数类型是一种将函数作为值的数据类型。与其他类型一样&#xff0c;函数类型可以被声明、赋值给变量&#xff0c;作为参数传递和作为返回值返回。通过函数类型&#xff0c;我们可以将函数看作一种可执行的对象&#xff0c;对其进行…

asp.net企业生产管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 企业生产管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 二、功能介绍 (1)用户管理&…

Spring学习笔记11 GoF代理模式

Spring学习笔记10 JdbcTemplate_biubiubiu0706的博客-CSDN博客 新建个maven模块 static-proxy 演示静态代理 订单接口 测试 需求:统计每个业务方法的耗时 package com.example.proxy.service;/*** author hrui* date 2023/9/25 8:42*/ public class OrderServiceImpl implem…

分布式网络在移动医疗场景中的应用

随着医疗信息化建设实践的深入&#xff0c;越来越多的医疗机构开始借助网络信息技术改善其运营及管理模式&#xff0c;为患者提供更高质量、更高效率、更加安全体贴的医疗服务。移动医疗便是在此背景下产生的新业务需求。 常见的移动医疗场景 住院部&#xff1a;移动查房、智…

Java案例:判断质数

需求&#xff1a;键盘录入一个数&#xff0c;判断是否是质数 分析&#xff1a;从2到number-1开始循环&#xff0c;判断是否有数字能被number整除 import java.util.Scanner;public class demo {public static void main(String[] args){Scanner sc new Scanner(System.in);S…

使用JavaScript将数字格式化成千分位的n种方法

1,使用数组方法: 1) 数字转字符串,字符串按照小数点.分割 2) 整数部分拆分成字符串数组,并倒叙 3) 遍历, 按照每三位添加逗号,号 4) 拼接整数部分小数部分 function format_width_array(number) { // 将数字转换为千分位字符串const arr String(number).split(.);// 整数…

代码阅读分析神器-Scitools Understand

这里写目录标题 前言概要功能介绍1.代码统计2.图形化分析3.代码检查 使用方法下载及使用 前言 作为一名程序员&#xff0c;阅读代码是一个必须要拥有的能力&#xff0c;但无奈很多代码逻辑嵌套非常多&#xff0c;看起来非常吃力&#xff0c;看了那段逻辑就忘记了刚才的逻辑&am…

SpringBoot 集成 AKKA

文章目录 应用场景与 SpringBoot 集成示例 应用场景 AKKA 是一个用于构建高并发、分布式和容错应用程序的开源框架。它基于Actor模型&#xff0c;提供了强大的并发抽象和工具&#xff0c;适用于各种业务场景。以下是一些使用AKKA框架的常见业务场景的示例&#xff1a; 实时数据…

WordPress还原重置插件WP Reset 教程!

这是一篇完整的 WordPress 还原教程&#xff0c;我们将使用一款插件&#xff0c;快速重置整个 WordPress 网站。 有时在安装不同主题、网站插件后&#xff0c;可能会导致程序码彼此的冲突&#xff0c;而让网站出现跑版、错误等 ..&#xff0c;这时直接重新来过可能反而比较快一…

大模型从入门到应用——LangChain:代理(Agents)-[代理执行器(Agent Executor):处理解析错误、访问中间步骤和限制最大迭代次数]

分类目录&#xff1a;《大模型从入门到应用》总目录 LangChain系列文章&#xff1a; 基础知识快速入门 安装与环境配置链&#xff08;Chains&#xff09;、代理&#xff08;Agent:&#xff09;和记忆&#xff08;Memory&#xff09;快速开发聊天模型 模型&#xff08;Models&…

AM@映射@函数@反函数@复合函数

文章目录 abstract直接定义函数的定义反函数定义复合函数定义 基于映射定义映射像原像定义域值域小结例满射单射&#x1f47a;双射映射的其他称呼 逆映射复合映射映射间可复合条件复合顺序 函数基于映射的函数相关定义函数函数的记法及其含义函数值 f ( x ) f(x) f(x)函数关系 …

使用Http Interface客户端解析text/html类型参数

前言 Spring6和Spring Boot3的正式发布也有一段时间了&#xff0c;最低支持的java版本也是直接跳到了17。而且最近java21也出来了&#xff0c;作为一个javaer&#xff0c;你不会还在坚守java8吧&#xff1f; Http Interface是Spring6新推出的一个声明式http客户端&#xff0c;…

命令执行(rce)

1.命令与代码执行原理 命令执行原理 参数给变量未经过滤&#xff0c;直接使用了不安全的函数处理了变量 127.0.0.1&&ipconfig 有漏洞 常用的函数 assert,system,exec,shell_exec, eval,(反单引号&#xff09; 代码执行原理 参数给变量未经过滤&#xff…

56块钱搭建一个ubuntu 2204 linux 服务器

硬件pdd上淘的一个linux小盒子 应该是以前的机顶盒之类的 实物图如下 今天刚收到小盒子 找了个显示器 键盘 查到小盒子上通电 本来指示灯应该亮的 老板刷机之后 led灯都不亮了 不知道有没有开机 我还以为坏了 刚开始 然后直接连到显示器上 有输出 那说明没问题…