预览后缀名为dwg的文件

预览后缀名为dwg的文件

预览后缀名为dwg的文件,如: xxx.dwg,时 后端会把dwg文件转化为vsf流文件。然后前端可以借助visualizeJS进行预览,具体实现如下:

在Vue3中

1、在public中引入Visualize预览工具及其相关依赖

在这里插入图片描述

2、在index.html中引入

在这里插入图片描述

3、在.vue文件中使用

<template>
  <canvas id="dwg-canvas" style="width: 100%; height: 100%"></canvas>
</template>

<script lang="ts" setup>
import {
    
     watch } from 'vue';
// dwgUrl: vsf流文件路径
// 该路径可以是:本地文件路径,如:/public/xxx.vsf
// 也可以是:后端接口 http:xxxx/xxx.vsf
const props = defineProps({
    
    
  dwgUrl: {
    
    
    type: String,
    default: () => '',
  },
});
const previewDWG = (dwgUrl) => {
    
    
  // getVisualizeLibInst 全局方法,只要引入了VisualizeJS即可使用
  const lib = window.getVisualizeLibInst();
  const token = localStorage.getItem('TOKEN') as string;
  const headers = {
    
    
    Authorization: `Bearer ${
      
      JSON.parse(token).access_token}`,
  };
  lib.postRun.push(() => {
    
    
    const canvas = document.getElementById('dwg-canvas') as HTMLCanvasElement;
    canvas.height = canvas.clientHeight;
    canvas.width = canvas.clientWidth;
    lib.canvas = canvas;
    lib.Viewer.initRender(canvas.width, canvas.height, true);

    const viewer = lib.Viewer.create();
    function resize() {
    
    
      canvas.height = canvas.clientHeight;
      canvas.width = canvas.clientWidth;
      viewer.resize(0, canvas.width, canvas.height, 0);
      viewer.update();
    }
    resize();
    window.addEventListener('resize', resize);
    const plugin = new window.OdaViewerPlugin(lib);
    plugin.setActive(plugin.type.Pan);
    plugin.setAutoSelect(true);
    // headers : 后端vsf接口需要权限时,需要携带token
    fetch(dwgUrl, {
    
     headers })
      .then((responce) => responce.arrayBuffer())
      .then((arrayBuffer) => {
    
    
        viewer.clear();
        viewer.parseFile(new Uint8Array(arrayBuffer));
        viewer.zoomExtents();
      });
    function render() {
    
    
      viewer.update();
      requestAnimationFrame(render);
    }
    render();
  });
};

watch(
  () => props.dwgUrl,
  (dwgUrl) => {
    
    
    previewDWG(dwgUrl);
  },
  {
    
    
    immediate: true,
    deep: true,
  },
);
</script>

猜你喜欢

转载自blog.csdn.net/weixin_44224921/article/details/130635434