| | |
| | | |
| | | const emits = defineEmits(['getUploadPicture']) |
| | | |
| | | |
| | | |
| | | let fileName=ref(null) |
| | | let fileDate=ref(null) |
| | | let dxfData=ref(null) |
| | | let state=ref(false) |
| | | let points=ref([]) |
| | |
| | | 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', |
| | |
| | | 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'); |
| | |
| | | const main = document.getElementById('mains') |
| | | const width = document.getElementById('width') |
| | | const height = document.getElementById('height') |
| | | validate() |
| | | if(leafer!==undefined){ |
| | | leafer.clear() |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | 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', |
| | |
| | | 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> |
| | |
| | | <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> |
| | | |
| | | |
| | | |