zoukankan      html  css  js  c++  java
  • vue项目中使用three-dxf来渲染dxf文件

    three-Dxf是一个浏览器dxf文件查看器应用,使用dxf-parser解析成json格式,然后用three.js进行渲染

    DXF文件是制图软件AutoCAD生成的一种数据文件

    github地址:https://github.com/gdsestimating/three-dxf

    <template>
      <div class="hello">
        <div class="container">
            <div role="form">
                <div class="form-group">
                    <label for="exampleInputFile">选择一个DXF文件</label>
                    <input type="file" accept=".dxf" id="dxf" name="file" @change="onFileSelected">
                    <div class="progress progress-striped" style=" 300px;">
                        <div id="file-progress-bar" class="progress-bar progress-bar-success" role="progressbar" style=" 0">
                        </div>
                    </div>
                    <div id="file-description" class="help-block"></div>
                </div>
                <p>在画布上悬停时:右键单击以平移。鼠标滚轮可放大或缩小图像</p>
            </div>
            <div id="cad-view"></div>
            <div id="dxf-content-container">
                <pre id="dxf-content">
                </pre>
            </div>
        </div>
      </div>
    </template>
    

      

    <script>
    /* eslint-disable */
    export default {
      name: 'HelloWorld',
      props: {
        msg: String
      },
      data() {
        return {
        };
      },
      methods: {
        onFileSelected(evt) {
          let self = this;
            var file = evt.target.files[0];
            var reader = new FileReader();
            reader.onprogress = self.updateProgress;
            reader.onloadend = self.onSuccess;
            reader.onabort = self.abortUpload;
            reader.onerror = self.errorHandler;
            reader.readAsText(file);
        },
        errorHandler(evt) {
          switch(evt.target.error.code) {
          case evt.target.error.NOT_FOUND_ERR:
              alert('File Not Found!');
              break;
          case evt.target.error.NOT_READABLE_ERR:
              alert('File is not readable');
              break;
          case evt.target.error.ABORT_ERR:
              break;
          default:
              alert('An error occurred reading this file.');
          }
      },
      updateProgress(evt) {
          console.log('progress');
          // console.log(Math.round((evt.loaded /evt.total) * 100));
    
      },
      onSuccess(evt){
          var fileReader = evt.target;
          if(fileReader.error) return console.log("error onloadend!?");
          var parser = new window.DxfParser();
          var dxf = parser.parseSync(fileReader.result);
    
          let dxfContentEl = document.getElementById('dxf-content');
          
          if(dxf) {
              dxfContentEl.innerHTML = JSON.stringify(dxf, null, 2);
              console.log('json',JSON.stringify(dxf, null, 2))
          } else {
              dxfContentEl.innerHTML = 'No data.';
          }
          new window.ThreeDxf.Viewer(dxf, document.getElementById('cad-view'), 400, 400);
          
      },
      handleDragOver(evt) {
          evt.stopPropagation();
          evt.preventDefault();
          evt.dataTransfer.dropEffect = 'copy';
      },
      }
    }
    </script>
    

      

    点击上传的dxf文件后会生成图像和一些json代码,后端返回的是dxf文件,可以根据 three-dxf 渲染在页面中

     

      

     

     若是后台返回的dxf文件,直接在前端页面渲染并下载,可以这么弄

       mounted() {
            const fileDxf = new File([this.blastAddress], this.blastAddress, {
                type: '',
                lastModified: Date.now()
            });
            this.createFileform(fileDxf);
        },
        methods: {
            createFileform(evt) {
                let self = this;
                var reader = new FileReader();
                reader.onloadend = self.onSuccess;
                reader.onabort = self.abortUpload;
                reader.onerror = self.errorHandler;
                reader.readAsText(evt);
            },
            onSuccess(evt){
                //请求接口生成dxf特殊文件形式
                let jordan = evt.currentTarget.result;
                let info = jordan.replace(/\/g, '/');
                serviceApi.readDxf(info).then(data => this.viewDxfile( data.results));
            },
            viewDxfile(fileReader) {
                //根据data.results来画图渲染页面
                var parser = new window.DxfParser();
                var dxf = parser.parseSync(fileReader);
                let dxfContentEl = document.getElementById('dxf-content');
                // if (dxf) {
                //     dxfContentEl.innerHTML = JSON.stringify(dxf, null, 2);
                // } else {
                //     dxfContentEl.innerHTML = 'No data.';
                // }
                new window.ThreeDxf.Viewer(dxf, document.getElementById('cad-view'), 600, 600);
            }
       }
    

      

     

  • 相关阅读:
    消除醉酒痛苦的九种食品
    要成功,就马上准备有所付出吧!这就是每天你应该养成的习惯。
    赞美
    人的一生究竟需要多少钱?
    试试看
    ubuntu 环境变量PATH的修改[转]
    Ubuntu netsnmp安装
    ubuntu终止进程的方法
    Linux(ubuntu)下MySQL整个数据库的备份与还原 Linux下MySQL整个数据库的备份与还原[转]
    Ubuntu防火墙 UFW 设置
  • 原文地址:https://www.cnblogs.com/theblogs/p/15271352.html
Copyright © 2011-2022 走看看