最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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");
      // 設置多邊形的顏色
      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 {
          // 否則繼續(xù)連接頂點
          ctx.lineTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);
        }
      }
      // 關閉多邊形路徑
      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>

在這里插入圖片描述

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

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

相關文章

  • vite?vue3下配置history模式路由的步驟記錄

    vite?vue3下配置history模式路由的步驟記錄

    路由存在兩者模式,一種是歷史模式history,一種是hash模式,下面這篇文章主要給大家介紹了關于vite?vue3下配置history模式路由的相關資料,需要的朋友可以參考下
    2023-01-01
  • 使用vue開發(fā)移動端管理后臺的注意事項

    使用vue開發(fā)移動端管理后臺的注意事項

    這篇文章主要介紹了使用vue開發(fā)移動端管理后臺的注意事項,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 關于Element-UI中slot的用法及說明

    關于Element-UI中slot的用法及說明

    這篇文章主要介紹了關于Element-UI中slot的用法及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式

    Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式

    這篇文章主要給大家介紹了關于Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式的相關資料,前段獲取生成的是base64圖片,需要轉(zhuǎn)化為jpg,png,需要的朋友可以參考下
    2023-09-09
  • vue3使用quill富文本編輯器保姆級教程(附踩坑解決)

    vue3使用quill富文本編輯器保姆級教程(附踩坑解決)

    這篇文章主要給大家介紹了關于vue3使用quill富文本編輯器保姆級教程的相關資料,在許多網(wǎng)站和應用程序中富文本編輯器是一種常見的工具,它使用戶能夠以直觀的方式創(chuàng)建和編輯文本內(nèi)容,需要的朋友可以參考下
    2023-11-11
  • axios的攔截請求與響應方法

    axios的攔截請求與響應方法

    今天小編就為大家分享一篇axios的攔截請求與響應方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 實現(xiàn)一個 Vue 吸頂錨點組件方法

    實現(xiàn)一個 Vue 吸頂錨點組件方法

    這篇文章主要介紹了實現(xiàn)一個 Vue 吸頂錨點組件方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • vue+axios 前端實現(xiàn)的常用攔截的代碼示例

    vue+axios 前端實現(xiàn)的常用攔截的代碼示例

    這篇文章主要介紹了vue+axios 前端實現(xiàn)的常用攔截的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Vue3翻頁后刷新并保持該頁面數(shù)據(jù)方式

    Vue3翻頁后刷新并保持該頁面數(shù)據(jù)方式

    這篇文章主要介紹了Vue3翻頁后刷新并保持該頁面數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue el-form-item如何添加icon和tooltip

    vue el-form-item如何添加icon和tooltip

    這篇文章主要介紹了vue el-form-item如何添加icon和tooltip問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

辽宁省| 黑龙江省| 绥江县| 依兰县| 荔波县| 佛学| 大兴区| 镇雄县| 铜梁县| 布拖县| 祥云县| 丰都县| 郎溪县| 九龙县| 岐山县| 马尔康县| 山东省| 锦州市| 梁河县| 新源县| 崇信县| 友谊县| 新乡县| 宝应县| 祁连县| 清丰县| 竹北市| 博爱县| 高州市| 安康市| 澎湖县| 达尔| 资中县| 大宁县| 东阿县| 始兴县| 红河县| 盐津县| 当雄县| 鹿泉市| 鄂州市|