廖井涛
2025-07-25 6499ec45765ccbcf78c765445d0102aa4d918f98
north-glass-erp/northglass-erp/src/components/sd/order/UpdateAlienEditor.vue
@@ -36,8 +36,8 @@
const emits = defineEmits(['getUploadPicture'])
let fileName=ref(null)
let fileDate=ref(null)
let dxfData=ref(null)
let state=ref(false)
let points=ref([])
@@ -105,8 +105,8 @@
const getproject = () => {
  if (state.value){
    leafer = new Leafer({view: 'canvas'})
    points.value = [datas1.value + (parseInt(data7.value) / big), datas2.value - (parseInt(data8.value) / big), datas3.value + (parseInt(data1.value) / big), datas4.value + (parseInt(data2.value) / big),
      datas5.value - (parseInt(data3.value) / big), datas6.value + (parseInt(data4.value) / big), datas7.value - (parseInt(data5.value) / big), datas8.value - (parseInt(data6.value) / big)]
    points.value = [datas1.value + (parseInt(data5.value) / big), datas2.value - (parseInt(data6.value) / big), datas3.value + (parseInt(data1.value) / big), datas4.value + (parseInt(data2.value) / big),
      datas5.value - (parseInt(data3.value) / big), datas6.value + (parseInt(data4.value) / big), datas7.value - (parseInt(data7.value) / big), datas8.value - (parseInt(data8.value) / big)]
    const polygon = new Polygon({
      points: points.value,
      fill: '#32cd79',
@@ -154,7 +154,8 @@
  const blob = new Blob([dxf.toDxfString()], {type: 'text/plain;charset=utf-8'});
  const base64 = await fileToBase64(blob);
  if(value===1){
    emits('getUploadPicture', "map.dxf",base64.replace(/^data:.+;base64,/, ""),)
    fileName.value="map.dxf"
    fileDate.value=base64.replace(/^data:.+;base64,/, "")
  }
  else if(value===2&&state.value){
    saveAs(blob, 'map.dxf');
@@ -183,6 +184,7 @@
  const main = document.getElementById('mains')
  const width = document.getElementById('width')
  const height = document.getElementById('height')
  validate()
  if(leafer!==undefined){
    leafer.clear()
  }
@@ -198,7 +200,8 @@
        dxfData.value = parser.parseSync(text);
        handleFileUpload()
        emits('getUploadPicture', file.name,base64.replace(/^data:.+;base64,/, ""))
        fileName.value=file.name
        fileDate.value=base64.replace(/^data:.+;base64,/, "")
      } catch (error) {
        console.error('解析DXF文件时出错:', error);
      }
@@ -282,24 +285,17 @@
          main.style.backgroundColor = "#8d9095"
          width.innerHTML = round(maxX - minX, 2)
          height.innerHTML = round(maxY - minY, 2)
          if(entity.vertices.length==4){
            state.value=true
            datas1.value=0
            datas2.value=(maxY - minY) / big
            datas3.value=0
            datas4.value=0
            datas5.value=(maxX - minX) / big
            datas6.value=0
            datas7.value=(maxX - minX) / big
            datas8.value=(maxY - minY) / big
            points.value=[0, heightAgv, 0, 0, widthAgv, 0, widthAgv,heightAgv]
          }
          let point = entity.vertices.map(v => [
            (v.x - minX) / big,
            toBottomOrigin((v.y - minY) / big, (maxY - minY) / big),
          ]).flat()
          if(entity.vertices.length==4){
            isQuadrilateral(maxY,minY,maxX,minX,point)
          }
          const polygon = new Polygon({
            points: point,
            fill: '#32cd79',
@@ -416,12 +412,120 @@
  validate
})
const save =  () => {
  emits('getUploadPicture', fileName.value,fileDate.value)
}
const isQuadrilateral =  (maxY,minY,maxX,minX,point) => {
  state.value=true
  datas1.value=0
  datas2.value=(maxY - minY) / big
  datas3.value=0
  datas4.value=0
  datas5.value=(maxX - minX) / big
  datas6.value=0
  datas7.value=(maxX - minX) / big
  datas8.value=(maxY - minY) / big
  //points.value=[0, heightAgv, 0, 0, widthAgv, 0, widthAgv,heightAgv]
  let numbers = [point[0], point[2], point[4], point[6]]; // 示例数组
  let maxX1 = Math.max(...numbers); // 找到最大的数
  let remaining = numbers.filter(num => num !== maxX1); // 移除最大数,剩下的数组
  let maxX2 = Math.max(...remaining); // 在剩余的数中找到第二大的数
  let arr=[]
  for (let i=0;i<point.length;i++){
    let a=[]
    if(i % 2 === 0){
      a.push(point[i])
      a.push((point[i+1]))
      arr.push(a)
    }
  }
  let x=[]
  let y=[]
  let upperRight=null //右上
  let lowerRight=null //右下
  let topLeft=null //左上
  let lowerLeft=null //左下
  arr.forEach(item=>{
    if(item[0]==maxX1||item[0]==maxX2){
      x.push(item)
    }else{
      y.push(item)
    }
  })
  if(x[0][1]>x[1][1]){
    lowerRight=x[0]
    upperRight=x[1]
  }else{
    upperRight=x[0]
    lowerRight=x[1]
  }
  if(y[0][1]>y[1][1]){
    lowerLeft=y[0]
    topLeft=y[1]
  }else {
    topLeft=y[0]
    lowerLeft=y[1]
  }
  if(lowerLeft[0]*big===0){
    data5.value=0
  }else{
    data5.value=round(lowerLeft[0]*big,0)
  }
  if(lowerLeft[1]*big===0){
    data6.value=0
  }else{
    data6.value=round(maxY-minY-lowerLeft[1]*big,0)
  }
  if(topLeft[0]*big===0){
    data1.value=0
  }else{
    data1.value=round(topLeft[0]*big,0)
  }
  if(topLeft[1]*big===0){
    data2.value=0
  }else{
    data2.value=round(topLeft[1]*big,0)
  }
  if(upperRight[0]*big===0){
    data3.value=0
  }else{
    data3.value=round(maxX-minX-upperRight[0]*big,0)
  }
  if(upperRight[1]*big===0){
    data4.value=0
  }else{
    data4.value=round(upperRight[1]*big,0)
  }
  if(lowerRight[0]*big===0){
    data7.value=0
  }else{
    data7.value=round(maxX-minX-lowerRight[0]*big,0)
  }
  if(lowerRight[1]*big===0){
    data8.value=0
  }else{
    data8.value=round(maxY-minY-lowerRight[1]*big,0)
  }
}
</script>
<template>
  <div style="width: 404px;height: 254px;border: 2px solid #000;float: left;
      position: relative;display: flex;justify-content: center;align-content: center;margin-left: 100px">
      position: relative;display: flex;justify-content: center;align-content: center;margin-left: 100px;margin-top: 25px;">
    <div id="mains" ref="parent"  >
      <canvas  id="canvas" ></canvas>
    </div>
@@ -445,9 +549,12 @@
  <div id="width" style="height: 20px;position: absolute;top: 322px;left: 320px;">横</div>
  <div id="width" style="height: 20px;position: absolute;top: 322px;left: 385px;">竖</div>
  <div style="float: left;margin-top: 20px;margin-left: 80px;">
    <input type="file" @change="handleFile" accept=".dxf" />
    <input style="width: 180px;"  type="file" @change="handleFile" accept=".dxf" />
    <el-button type="primary" @click="exportToDXF(2)">导出DXF</el-button>
  </div>
  <div style="float: left;margin-top: 20px;margin-left: 80px;">
    <el-button type="primary" @click="save()">保存</el-button>
  </div>