欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VUE使用DXFParser組件解析dxf文件生成圖片的操作代碼

 更新時間:2023年09月27日 12:09:27   作者:幸思無聲_東莞  
這篇文章主要介紹了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中的數(shù)據(jù) -->
        <div id="imageContainer">
          <!-- 使用scope.row來獲取當前行的數(shù)據(jù) -->
          <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數(shù)據(jù)
        this.processDXF(dxf);
        // console.log(this.processDXF(dxf))
      };
      reader.readAsText(file);
      // reader.readAsArrayBuffer(file)
    },
    processDXF(dxf) {
      // 在這里處理解析后的DXF數(shù)據(jù)
      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 = true
                  ver = 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數(shù)組中
              break;
            }
          }
        }
      }
    },
    generateCanvasImage(vertices) {
      // 獲取Canvas元素
      var canvas = document.createElement("canvas");
      var ctx = canvas.getContext("2d");
      // 設(shè)置多邊形的顏色
      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; // 設(shè)置描邊顏色
      ctx.lineWidth = 1; // 設(shè)置線寬
      // 移動到第一個頂點
      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 {
          // 否則繼續(xù)連接頂點
          ctx.lineTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);
        }
      }
      // 關(guān)閉多邊形路徑
      ctx.closePath();
      // 繪制多邊形
      ctx.stroke();
      // 將Canvas內(nèi)容轉(zhuǎn)換為圖片路徑
      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>

在這里插入圖片描述

大致效果圖如果大家有疑問歡迎評論我將在更新問題解析!

到此這篇關(guān)于VUE使用DXFParser組件解析dxf文件生成圖片的文章就介紹到這了,更多相關(guān)vue解析dxf文件生成圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)集成騰訊TIM即時通訊

    vue實現(xiàn)集成騰訊TIM即時通訊

    最近在做商城類的項目,需要使用到客服系統(tǒng),用戶選擇的騰訊IM即時通信,所以本文主要介紹了vue實現(xiàn)集成騰訊TIM即時通訊,感興趣的可以了解一下
    2021-06-06
  • Vue3.0監(jiān)聽器watch與watchEffect詳解

    Vue3.0監(jiān)聽器watch與watchEffect詳解

    在 Vue 3 中,watch 仍然是一種用于監(jiān)聽數(shù)據(jù)變化并執(zhí)行相應操作的方式,不過在組合式 API 中,watch 的使用方式與選項式 API 略有不同,這篇文章主要介紹了Vue3.0監(jiān)聽器watch與watchEffect,需要的朋友可以參考下
    2023-12-12
  • vue3封裝Element導航菜單的實例代碼

    vue3封裝Element導航菜單的實例代碼

    這篇文章主要介紹了vue3封裝Element導航菜單的實例代碼,分為菜單數(shù)據(jù)格式示例,控制導航收縮的詳細代碼,本文通過實例代碼介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 解讀計算屬性和watch監(jiān)聽的區(qū)別及說明

    解讀計算屬性和watch監(jiān)聽的區(qū)別及說明

    計算屬性是基于它們的依賴進行緩存的,只有在它的相關(guān)依賴發(fā)生改變時才會重新求值,而watch則是一個更為通用的監(jiān)聽器,它可以在數(shù)據(jù)變化時執(zhí)行異步操作或開銷較大的操作
    2025-01-01
  • Vue axios設(shè)置訪問基礎(chǔ)路徑方法

    Vue axios設(shè)置訪問基礎(chǔ)路徑方法

    今天小編就為大家分享一篇Vue axios設(shè)置訪問基礎(chǔ)路徑方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue-electron使用serialport時問題解決方案

    vue-electron使用serialport時問題解決方案

    這篇文章主要介紹了vue-electron使用serialport時問題解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Vue2父子組件傳值舉例詳解

    Vue2父子組件傳值舉例詳解

    這篇文章主要給大家介紹了關(guān)于Vue2父子組件傳值的相關(guān)資料,Vue 2.0 中父子組件之間的傳值可以通過屬性(prop)和事件(event)實現(xiàn),文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • VueJs與ReactJS和AngularJS的異同點

    VueJs與ReactJS和AngularJS的異同點

    這篇文章主要為大家詳細介紹了VueJs與ReactJS和AngularJS的異同點,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 教你60行代碼實現(xiàn)一個迷你響應式系統(tǒng)vue

    教你60行代碼實現(xiàn)一個迷你響應式系統(tǒng)vue

    這篇文章主要為大家介紹了教你60行代碼實現(xiàn)一個迷你響應式系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-03-03
  • vue操作select獲取option值方式

    vue操作select獲取option值方式

    文章介紹了在Vue中操作select元素并實時獲取選中的option值的方法,通過使用`@change`事件并傳遞參數(shù),可以實現(xiàn)動態(tài)獲取選中的值
    2025-01-01

最新評論