diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..53bc39b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# For more information, please refer to https://aka.ms/vscode-docker-python +FROM python:3.8-slim-buster + + +EXPOSE 5003 + +# Keeps Python from generating .pyc files in the container +ENV PYTHONDONTWRITEBYTECODE=1 + +# Turns off buffering for easier container logging +ENV PYTHONUNBUFFERED=1 + +# Install pip requirements +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +WORKDIR /app +COPY . /app + +# Creates a non-root user with an explicit UID and adds permission to access the /app folder +# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers +RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app +USER appuser + +# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug +CMD ["python", "test.py"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/body.xlsx:Zone.Identifier b/body.xlsx:Zone.Identifier new file mode 100644 index 0000000..8b7e01e --- /dev/null +++ b/body.xlsx:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://brana.imtts.cz/webmail/ +HostUrl=https://brana.imtts.cz/webmail/api/download/attachment/imtts.cz/navratil/3582c3e0-1797-492e-b6b6-60c6039c7e90/6369/0-1/body.xlsx?version=38476&sid=60d37f31d4a485d454612aa752d8d91778d4e5b1ac4adddae508fdef42317af8&mode=view diff --git a/body_advanced.xlsx b/body_advanced.xlsx new file mode 100644 index 0000000..8897be3 Binary files /dev/null and b/body_advanced.xlsx differ diff --git a/body_easy.xlsx b/body_easy.xlsx new file mode 100644 index 0000000..61f3e02 Binary files /dev/null and b/body_easy.xlsx differ diff --git a/compose.debug.yaml b/compose.debug.yaml new file mode 100644 index 0000000..40f8a20 --- /dev/null +++ b/compose.debug.yaml @@ -0,0 +1,12 @@ +services: + test: + image: test2 + build: + context: . + dockerfile: ./Dockerfile + command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 -m flask run --no-debugger --no-reload --host 0.0.0.0 --port 5002"] + ports: + - 5002:5002 + - 5678:5678 + environment: + - FLASK_APP=test.py diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..cd50ce1 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,8 @@ +services: + test: + image: test2 + build: + context: . + dockerfile: ./Dockerfile + ports: + - 5003:5003 \ No newline at end of file diff --git a/excel_to_dxf_bez_zrcadleni.py b/excel_to_dxf_bez_zrcadleni.py new file mode 100644 index 0000000..eb11945 --- /dev/null +++ b/excel_to_dxf_bez_zrcadleni.py @@ -0,0 +1,52 @@ +import ezdxf +import openpyxl +import os +import sys + +def nacti_data_z_excelu(soubor, listname="List1"): + wb = openpyxl.load_workbook(soubor, data_only=True) + sheet = wb[listname] + body = [] + + for row in sheet.iter_rows(min_row=2, values_only=True): + if row[0] and row[1] is not None and row[2] is not None: + label = str(row[0]) + try: + x = float(row[1]) + y = float(row[2]) + z = float(row[3]) if len(row) > 3 and row[3] is not None else 0 + body.append((label, x, y, z)) + except ValueError: + continue + return body + +def exportuj_do_dxf(body, vystup): + doc = ezdxf.new() + msp = doc.modelspace() + + doc.layers.new(name="BODY", dxfattribs={"color": 7}) + doc.layers.new(name="POPISKY", dxfattribs={"color": 1}) + + for label, x, y, z in body: + msp.add_point((x, y, z), dxfattribs={"layer": "BODY"}) + msp.add_text( + label, + dxfattribs={"layer": "POPISKY"}).set_pos((x + 2, y + 2), align="LEFT") # Posun textu od bodu + + doc.saveas(vystup) + +if __name__ == "__main__": + if len(sys.argv) != 3: + print("Použití: python excel_to_dxf_hotovy.py vstup.xlsx vystup.dxf") + sys.exit(1) + + excel_soubor = sys.argv[1] + vystup_nazev = sys.argv[2] + + slozka = os.path.dirname(os.path.abspath(__file__)) + excel_cesta = os.path.join(slozka, excel_soubor) + vystup_cesta = os.path.join(slozka, vystup_nazev) + + body = nacti_data_z_excelu(excel_cesta) + exportuj_do_dxf(body, vystup_cesta) + print(f"Soubor {vystup_nazev} byl úspěšně vytvořen ve složce: {slozka}") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0cea55a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +blinker==1.8.2 +click==8.1.8 +et-xmlfile==2.0.0 +ezdxf==0.17 +flask==3.0.3 +importlib-metadata==8.5.0 +itsdangerous==2.2.0 +jinja2==3.1.6 +markupsafe==2.1.5 +openpyxl==3.1.5 +pyparsing==3.1.4 +typing-extensions==4.13.2 +werkzeug==3.0.6 +zipp==3.20.2 diff --git a/templates/upload_form.html b/templates/upload_form.html new file mode 100644 index 0000000..e174582 --- /dev/null +++ b/templates/upload_form.html @@ -0,0 +1,46 @@ + + + + + + + + + + converter + + + +

XLSX to DXF Converter

+
+
+ +

+ + + + +

+ + + +
+
+ + + + + + diff --git a/test.dxf b/test.dxf new file mode 100644 index 0000000..afe6598 --- /dev/null +++ b/test.dxf @@ -0,0 +1,4684 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1027 + 9 +$ACADMAINTVER + 70 +105 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$LASTSAVEDBY + 1 +ezdxf + 9 +$REQUIREDVERSIONS +160 +0 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$EXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 +0 + 9 +$REGENMODE + 70 +1 + 9 +$FILLMODE + 70 +1 + 9 +$QTEXTMODE + 70 +0 + 9 +$MIRRTEXT + 70 +1 + 9 +$LTSCALE + 40 +1.0 + 9 +$ATTMODE + 70 +1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +Standard + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 +256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 +0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 +0 + 9 +$DIMLIM + 70 +0 + 9 +$DIMTIH + 70 +0 + 9 +$DIMTOH + 70 +0 + 9 +$DIMSE1 + 70 +0 + 9 +$DIMSE2 + 70 +0 + 9 +$DIMTAD + 70 +1 + 9 +$DIMZIN + 70 +8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 +1 + 9 +$DIMSHO + 70 +1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 +0 + 9 +$DIMALTD + 70 +3 + 9 +$DIMALTF + 40 +0.03937007874 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 +1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 +0 + 9 +$DIMSOXD + 70 +0 + 9 +$DIMSAH + 70 +0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ISO-25 + 9 +$DIMCLRD + 70 +0 + 9 +$DIMCLRE + 70 +0 + 9 +$DIMCLRT + 70 +0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 +0 + 9 +$DIMSD1 + 70 +0 + 9 +$DIMSD2 + 70 +0 + 9 +$DIMTOLJ + 70 +0 + 9 +$DIMTZIN + 70 +8 + 9 +$DIMALTZ + 70 +0 + 9 +$DIMALTTZ + 70 +0 + 9 +$DIMUPT + 70 +0 + 9 +$DIMDEC + 70 +2 + 9 +$DIMTDEC + 70 +2 + 9 +$DIMALTU + 70 +2 + 9 +$DIMALTTD + 70 +3 + 9 +$DIMTXSTY + 7 +Standard + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMADEC + 70 +0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 +0 + 9 +$DIMDSEP + 70 +44 + 9 +$DIMATFIT + 70 +3 + 9 +$DIMFRAC + 70 +0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMLWD + 70 +-2 + 9 +$DIMLWE + 70 +-2 + 9 +$DIMTMOVE + 70 +0 + 9 +$DIMFXL + 40 +1.0 + 9 +$DIMFXLON + 70 +0 + 9 +$DIMJOGANG + 40 +0.785398163397 + 9 +$DIMTFILL + 70 +0 + 9 +$DIMTFILLCLR + 70 +0 + 9 +$DIMARCSYM + 70 +0 + 9 +$DIMLTYPE + 6 + + 9 +$DIMLTEX1 + 6 + + 9 +$DIMLTEX2 + 6 + + 9 +$DIMTXTDIRECTION + 70 +0 + 9 +$LUNITS + 70 +2 + 9 +$LUPREC + 70 +4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 +0 + 9 +$AUPREC + 70 +2 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 +0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 +0 + 9 +$TDCREATE + 40 +2460882.440787037 + 9 +$TDUCREATE + 40 +2458532.153996898 + 9 +$TDUPDATE + 40 +2460882.440787037 + 9 +$TDUUPDATE + 40 +2458532.1544311 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 +1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 +0 + 9 +$SPLINETYPE + 70 +6 + 9 +$SPLINESEGS + 70 +8 + 9 +$HANDSEED + 5 +76 + 9 +$SURFTAB1 + 70 +6 + 9 +$SURFTAB2 + 70 +6 + 9 +$SURFTYPE + 70 +6 + 9 +$SURFU + 70 +6 + 9 +$SURFV + 70 +6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 +0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 +0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 +0 + 9 +$USERI2 + 70 +0 + 9 +$USERI3 + 70 +0 + 9 +$USERI4 + 70 +0 + 9 +$USERI5 + 70 +0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 +1 + 9 +$SHADEDGE + 70 +3 + 9 +$SHADEDIF + 70 +70 + 9 +$TILEMODE + 70 +1 + 9 +$MAXACTVP + 70 +64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 +0 + 9 +$PEXTMIN + 10 +1e+20 + 20 +1e+20 + 30 +1e+20 + 9 +$PEXTMAX + 10 +-1e+20 + 20 +-1e+20 + 30 +-1e+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 +0 + 9 +$VISRETAIN + 70 +1 + 9 +$PLINEGEN + 70 +0 + 9 +$PSLTSCALE + 70 +1 + 9 +$TREEDEPTH + 70 +3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 +0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 +1 + 9 +$MEASUREMENT + 70 +1 + 9 +$CELWEIGHT +370 +-1 + 9 +$ENDCAPS +280 +0 + 9 +$JOINSTYLE +280 +0 + 9 +$LWDISPLAY +290 +0 + 9 +$INSUNITS + 70 +6 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 +1 + 9 +$CEPSNTYPE +380 +0 + 9 +$PSTYLEMODE +290 +1 + 9 +$FINGERPRINTGUID + 2 +{D7D6EFDA-684F-49DE-B7CE-25E9CC3ABC9D} + 9 +$VERSIONGUID + 2 +{68A46382-6260-4FC7-B2CC-2903141065E9} + 9 +$EXTNAMES +290 +1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 +0 + 9 +$SORTENTS +280 +127 + 9 +$INDEXCTL +280 +0 + 9 +$HIDETEXT +280 +1 + 9 +$XCLIPFRAME +280 +0 + 9 +$HALOGAP +280 +0 + 9 +$OBSCOLOR + 70 +257 + 9 +$OBSLTYPE +280 +0 + 9 +$INTERSECTIONDISPLAY +280 +0 + 9 +$INTERSECTIONCOLOR + 70 +257 + 9 +$DIMASSOC +280 +2 + 9 +$PROJECTNAME + 1 + + 9 +$CAMERADISPLAY +290 +0 + 9 +$LENSLENGTH + 40 +50.0 + 9 +$CAMERAHEIGHT + 40 +0.0 + 9 +$STEPSPERSEC + 40 +24.0 + 9 +$STEPSIZE + 40 +100.0 + 9 +$3DDWFPREC + 40 +2.0 + 9 +$PSOLWIDTH + 40 +0.005 + 9 +$PSOLHEIGHT + 40 +0.08 + 9 +$LOFTANG1 + 40 +1.570796326795 + 9 +$LOFTANG2 + 40 +1.570796326795 + 9 +$LOFTMAG1 + 40 +0.0 + 9 +$LOFTMAG2 + 40 +0.0 + 9 +$LOFTPARAM + 70 +7 + 9 +$LOFTNORMALS +280 +1 + 9 +$LATITUDE + 40 +37.795 + 9 +$LONGITUDE + 40 +-122.394 + 9 +$NORTHDIRECTION + 40 +0.0 + 9 +$TIMEZONE + 70 +-8000 + 9 +$LIGHTGLYPHDISPLAY +280 +1 + 9 +$TILEMODELIGHTSYNCH +280 +1 + 9 +$CMATERIAL +347 +20 + 9 +$SOLIDHIST +280 +0 + 9 +$SHOWHIST +280 +1 + 9 +$DWFFRAME +280 +2 + 9 +$DGNFRAME +280 +2 + 9 +$REALWORLDSCALE +290 +1 + 9 +$INTERFERECOLOR + 62 +256 + 9 +$CSHADOW +280 +0 + 9 +$SHADOWPLANELOCATION + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SUN + 2 +AcDbSun + 3 +SCENEOE + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 +1153 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 +4095 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 +1152 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +MENTALRAYRENDERSETTINGS + 2 +AcDbMentalRayRenderSettings + 3 +SCENEOE + 90 +1024 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 +1025 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +ACDBPLACEHOLDER + 2 +AcDbPlaceHolder + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +CLASS + 1 +LAYOUT + 2 +AcDbLayout + 3 +ObjectDBX Classes + 90 +0 + 91 +0 +280 +0 +281 +0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +23 +330 +8 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +344.2 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +0.5 + 24 +0.5 + 15 +0.5 + 25 +0.5 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.34 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +1000 + 73 +1 + 74 +3 + 75 +0 + 76 +0 + 77 +0 + 78 +0 +281 +0 + 65 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +2 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +LTYPE + 5 +24 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +25 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +26 +330 +2 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 +4 + 0 +LAYER + 5 +27 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 + 6 +Continuous +370 +-3 +390 +13 +347 +21 + 0 +LAYER + 5 +28 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +Defpoints + 70 +0 + 62 +7 + 6 +Continuous +290 +0 +370 +-3 +390 +13 +347 +21 + 0 +LAYER + 5 +2F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +BODY + 70 +0 + 62 +7 + 6 +Continuous +370 +-3 +390 +13 +347 +21 + 0 +LAYER + 5 +30 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +POPISKY + 70 +0 + 62 +1 + 6 +Continuous +370 +-3 +390 +13 +347 +21 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +5 +330 +0 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +29 +330 +5 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +7 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +6 +330 +0 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +3 +330 +0 +100 +AcDbSymbolTable + 70 +3 + 0 +APPID + 5 +2A +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +73 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +HATCHBACKGROUNDCOLOR + 70 +0 + 0 +APPID + 5 +74 +330 +3 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +EZDXF + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +4 +330 +0 +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 0 +DIMSTYLE +105 +2B +330 +4 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 70 +0 + 40 +1.0 + 41 +2.5 + 42 +0.625 + 43 +3.75 + 44 +1.25 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +2.5 +140 +2.5 +141 +2.5 +142 +0.0 +143 +0.03937007874 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.625 +148 +0.0 + 69 +0 + 70 +0 + 71 +0 + 72 +0 + 73 +0 + 74 +0 + 75 +0 + 76 +0 + 77 +1 + 78 +8 + 79 +0 +170 +0 +171 +3 +172 +1 +173 +0 +174 +0 +175 +0 +176 +0 +177 +0 +178 +0 +179 +0 +271 +0 +272 +2 +273 +2 +274 +3 +275 +0 +276 +0 +277 +2 +278 +44 +279 +0 +280 +0 +281 +0 +282 +0 +283 +0 +284 +8 +285 +0 +286 +0 +288 +0 +289 +3 +290 +0 +371 +-2 +372 +-2 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +9 +330 +0 +100 +AcDbSymbolTable + 70 +2 + 0 +BLOCK_RECORD + 5 +17 +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +1A + 70 +0 +280 +1 +281 +0 + 0 +BLOCK_RECORD + 5 +1B +330 +9 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 70 +0 +280 +1 +281 +0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +18 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +19 +330 +17 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +330 +1B +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POINT + 5 +31 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +TEXT + 5 +32 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +2.0 + 20 +2.0 + 30 +0.0 + 40 +2.5 + 1 +POCATEK + 11 +2.0 + 21 +2.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +33 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +164.7 + 30 +0.0 + 0 +TEXT + 5 +34 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +166.7 + 30 +0.0 + 40 +2.5 + 1 +X62101 + 11 +176.0 + 21 +166.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +35 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +108.2 + 30 +0.0 + 0 +TEXT + 5 +36 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +110.2 + 30 +0.0 + 40 +2.5 + 1 +X62201 + 11 +176.0 + 21 +110.2 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +37 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +51.7 + 30 +0.0 + 0 +TEXT + 5 +38 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +53.7 + 30 +0.0 + 40 +2.5 + 1 +X62301 + 11 +176.0 + 21 +53.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +39 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +200.7 + 30 +0.0 + 0 +TEXT + 5 +3A +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +202.7 + 30 +0.0 + 40 +2.5 + 1 +X62001 + 11 +176.0 + 21 +202.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +3B +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +15.95 + 30 +0.0 + 0 +TEXT + 5 +3C +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +17.95 + 30 +0.0 + 40 +2.5 + 1 +X71001 + 11 +-11.345 + 21 +17.95 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +3D +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +42.0 + 30 +0.0 + 0 +TEXT + 5 +3E +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +44.0 + 30 +0.0 + 40 +2.5 + 1 +X71000 + 11 +-11.128 + 21 +44.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +3F +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +233.45 + 30 +0.0 + 0 +TEXT + 5 +40 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +235.45 + 30 +0.0 + 40 +2.5 + 1 +X72001 + 11 +-11.345 + 21 +235.45 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +41 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +207.65 + 30 +0.0 + 0 +TEXT + 5 +42 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +209.65 + 30 +0.0 + 40 +2.5 + 1 +X72000 + 11 +-11.128 + 21 +209.65 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +43 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +164.7 + 30 +0.0 + 0 +TEXT + 5 +44 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +166.7 + 30 +0.0 + 40 +2.5 + 1 +X62101 + 11 +176.0 + 21 +166.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +45 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +108.2 + 30 +0.0 + 0 +TEXT + 5 +46 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +110.2 + 30 +0.0 + 40 +2.5 + 1 +X62201 + 11 +176.0 + 21 +110.2 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +47 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +51.7 + 30 +0.0 + 0 +TEXT + 5 +48 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +53.7 + 30 +0.0 + 40 +2.5 + 1 +X62301 + 11 +176.0 + 21 +53.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +49 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +200.7 + 30 +0.0 + 0 +TEXT + 5 +4A +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +202.7 + 30 +0.0 + 40 +2.5 + 1 +X62001 + 11 +176.0 + 21 +202.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +4B +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +15.95 + 30 +0.0 + 0 +TEXT + 5 +4C +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +17.95 + 30 +0.0 + 40 +2.5 + 1 +X71001 + 11 +-11.345 + 21 +17.95 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +4D +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +42.0 + 30 +0.0 + 0 +TEXT + 5 +4E +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +44.0 + 30 +0.0 + 40 +2.5 + 1 +X71000 + 11 +-11.128 + 21 +44.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +4F +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +233.45 + 30 +0.0 + 0 +TEXT + 5 +50 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +235.45 + 30 +0.0 + 40 +2.5 + 1 +X72001 + 11 +-11.345 + 21 +235.45 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +51 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +207.65 + 30 +0.0 + 0 +TEXT + 5 +52 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +209.65 + 30 +0.0 + 40 +2.5 + 1 +X72000 + 11 +-11.128 + 21 +209.65 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +53 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +15.95 + 30 +0.0 + 0 +TEXT + 5 +54 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +17.95 + 30 +0.0 + 40 +2.5 + 1 +X71001 + 11 +-11.345 + 21 +17.95 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +55 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +42.0 + 30 +0.0 + 0 +TEXT + 5 +56 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +44.0 + 30 +0.0 + 40 +2.5 + 1 +X71000 + 11 +-11.128 + 21 +44.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +57 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +233.45 + 30 +0.0 + 0 +TEXT + 5 +58 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +235.45 + 30 +0.0 + 40 +2.5 + 1 +X72001 + 11 +-11.345 + 21 +235.45 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +59 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +207.65 + 30 +0.0 + 0 +TEXT + 5 +5A +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +209.65 + 30 +0.0 + 40 +2.5 + 1 +X72000 + 11 +-11.128 + 21 +209.65 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +5B +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +164.7 + 30 +0.0 + 0 +TEXT + 5 +5C +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +166.7 + 30 +0.0 + 40 +2.5 + 1 +X62101 + 11 +176.0 + 21 +166.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +5D +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +108.2 + 30 +0.0 + 0 +TEXT + 5 +5E +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +110.2 + 30 +0.0 + 40 +2.5 + 1 +X62201 + 11 +176.0 + 21 +110.2 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +5F +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +51.7 + 30 +0.0 + 0 +TEXT + 5 +60 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +53.7 + 30 +0.0 + 40 +2.5 + 1 +X62301 + 11 +176.0 + 21 +53.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +61 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +174.0 + 20 +200.7 + 30 +0.0 + 0 +TEXT + 5 +62 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +176.0 + 20 +202.7 + 30 +0.0 + 40 +2.5 + 1 +X62001 + 11 +176.0 + 21 +202.7 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +63 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +15.95 + 30 +0.0 + 0 +TEXT + 5 +64 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +17.95 + 30 +0.0 + 40 +2.5 + 1 +X71001 + 11 +-11.345 + 21 +17.95 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +65 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +42.0 + 30 +0.0 + 0 +TEXT + 5 +66 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +44.0 + 30 +0.0 + 40 +2.5 + 1 +X71000 + 11 +-11.128 + 21 +44.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +67 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +233.45 + 30 +0.0 + 0 +TEXT + 5 +68 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +235.45 + 30 +0.0 + 40 +2.5 + 1 +X72001 + 11 +-11.345 + 21 +235.45 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +69 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +207.65 + 30 +0.0 + 0 +TEXT + 5 +6A +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +209.65 + 30 +0.0 + 40 +2.5 + 1 +X72000 + 11 +-11.128 + 21 +209.65 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +6B +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +15.95 + 30 +0.0 + 0 +TEXT + 5 +6C +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +17.95 + 30 +0.0 + 40 +2.5 + 1 +X71001 + 11 +-11.345 + 21 +17.95 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +6D +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +42.0 + 30 +0.0 + 0 +TEXT + 5 +6E +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +44.0 + 30 +0.0 + 40 +2.5 + 1 +X71000 + 11 +-11.128 + 21 +44.0 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +6F +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.345 + 20 +233.45 + 30 +0.0 + 0 +TEXT + 5 +70 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.345 + 20 +235.45 + 30 +0.0 + 40 +2.5 + 1 +X72001 + 11 +-11.345 + 21 +235.45 + 31 +0.0 +100 +AcDbText + 0 +POINT + 5 +71 +330 +17 +100 +AcDbEntity + 8 +BODY +100 +AcDbPoint + 10 +-13.128 + 20 +207.65 + 30 +0.0 + 0 +TEXT + 5 +72 +330 +17 +100 +AcDbEntity + 8 +POPISKY +100 +AcDbText + 10 +-11.128 + 20 +209.65 + 30 +0.0 + 40 +2.5 + 1 +X72000 + 11 +-11.128 + 21 +209.65 + 31 +0.0 +100 +AcDbText + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +A +330 +0 +100 +AcDbDictionary +281 +1 + 3 +ACAD_COLOR +350 +B + 3 +ACAD_GROUP +350 +C + 3 +ACAD_LAYOUT +350 +D + 3 +ACAD_MATERIAL +350 +E + 3 +ACAD_MLEADERSTYLE +350 +F + 3 +ACAD_MLINESTYLE +350 +10 + 3 +ACAD_PLOTSETTINGS +350 +11 + 3 +ACAD_PLOTSTYLENAME +350 +12 + 3 +ACAD_SCALELIST +350 +14 + 3 +ACAD_TABLESTYLE +350 +15 + 3 +ACAD_VISUALSTYLE +350 +16 + 3 +EZDXF_META +350 +2D + 0 +DICTIONARY + 5 +B +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +C +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +D +330 +A +100 +AcDbDictionary +281 +1 + 3 +Model +350 +1A + 3 +Layout1 +350 +1E + 0 +DICTIONARY + 5 +E +330 +A +100 +AcDbDictionary +281 +1 + 3 +ByBlock +350 +1F + 3 +ByLayer +350 +20 + 3 +Global +350 +21 + 0 +DICTIONARY + 5 +F +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +2C + 0 +DICTIONARY + 5 +10 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Standard +350 +22 + 0 +DICTIONARY + 5 +11 +330 +A +100 +AcDbDictionary +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +12 +330 +A +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +13 +100 +AcDbDictionaryWithDefault +340 +13 + 0 +ACDBPLACEHOLDER + 5 +13 +330 +12 + 0 +DICTIONARY + 5 +14 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +15 +330 +A +100 +AcDbDictionary +281 +1 + 0 +DICTIONARY + 5 +16 +330 +A +100 +AcDbDictionary +281 +1 + 0 +LAYOUT + 5 +1A +330 +D +100 +AcDbPlotSettings + 1 + + 2 +Adobe PDF + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1024 + 72 +1 + 73 +1 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +17 + 0 +LAYOUT + 5 +1E +330 +D +100 +AcDbPlotSettings + 1 + + 2 +Adobe PDF + 4 +A3 + 6 + + 40 +7.5 + 41 +20.0 + 42 +7.5 + 43 +20.0 + 44 +420.0 + 45 +297.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +0 + 72 +1 + 73 +1 + 74 +5 + 7 + + 75 +16 + 76 +0 + 77 +2 + 78 +300 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +1e+20 + 24 +1e+20 + 34 +1e+20 + 15 +-1e+20 + 25 +-1e+20 + 35 +-1e+20 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +1 +330 +1B + 0 +MATERIAL + 5 +1F +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByBlock + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +20 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +ByLayer + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MATERIAL + 5 +21 +102 +{ACAD_REACTORS +330 +E +102 +} +330 +E +100 +AcDbMaterial + 1 +Global + 2 + + 70 +0 + 40 +1.0 + 71 +1 + 41 +1.0 + 91 +-1023410177 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 44 +0.5 + 73 +0 + 45 +1.0 + 46 +1.0 + 77 +1 + 4 + + 78 +1 + 79 +1 +170 +1 + 48 +1.0 +171 +1 + 6 + +172 +1 +173 +1 +174 +1 +140 +1.0 +141 +1.0 +175 +1 + 7 + +176 +1 +177 +1 +178 +1 +143 +1.0 +179 +1 + 8 + +270 +1 +271 +1 +272 +1 +145 +1.0 +146 +1.0 +273 +1 + 9 + +274 +1 +275 +1 +276 +1 + 42 +1.0 + 72 +1 + 3 + + 73 +1 + 74 +1 + 75 +1 + 94 +63 + 0 +MLINESTYLE + 5 +22 +102 +{ACAD_REACTORS +330 +10 +102 +} +330 +10 +100 +AcDbMlineStyle + 2 +Standard + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +MLEADERSTYLE + 5 +2C +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMLeaderStyle +179 +2 +170 +2 +171 +1 +172 +0 + 90 +2 + 40 +0.0 + 41 +0.0 +173 +1 + 91 +-1056964608 + 92 +-2 +290 +1 + 42 +2.0 +291 +1 + 43 +8.0 + 3 +Standard + 44 +4.0 +300 + +342 +29 +174 +1 +175 +1 +176 +0 +178 +1 + 93 +-1056964608 + 45 +4.0 +292 +0 +297 +0 + 46 +4.0 + 94 +-1056964608 + 47 +1.0 + 49 +1.0 +140 +1.0 +294 +1 +141 +0.0 +177 +0 +142 +1.0 +295 +0 +296 +0 +143 +3.75 +271 +0 +272 +9 +273 +9 + 0 +DICTIONARY + 5 +2D +330 +A +100 +AcDbDictionary +280 +1 +281 +1 + 3 +CREATED_BY_EZDXF +350 +2E + 3 +WRITTEN_BY_EZDXF +350 +75 + 0 +DICTIONARYVAR + 5 +2E +330 +2D +100 +DictionaryVariables +280 +0 + 1 +0.17 @ 2025-07-25T08:34:44.830355+00:00 + 0 +DICTIONARYVAR + 5 +75 +330 +2D +100 +DictionaryVariables +280 +0 + 1 +0.17 @ 2025-07-25T08:34:44.831226+00:00 + 0 +ENDSEC + 0 +EOF diff --git a/test.py b/test.py new file mode 100644 index 0000000..69245cd --- /dev/null +++ b/test.py @@ -0,0 +1,78 @@ +from flask import Flask, request, render_template, send_file +from io import BytesIO, StringIO +import ezdxf +import openpyxl +import os +import sys + +app = Flask(__name__) + +@app.route('/', methods=['GET', 'POST']) +def upload_file(): + if request.method == 'POST': + file = request.files['file'] + if file.filename.endswith('.xls') or file.filename.endswith('.csv') or file.filename.endswith('.xlsx'): + # Create a text file with the uploaded file name + + velikost = request.form['range'] + print(velikost) + + body = nacti_data_z_excelu(file) + #print(body) + + dxf_file = exportuj_do_dxf(body, velikost) + dxf_file.seek(0) + return send_file( + path_or_file=dxf_file, + as_attachment=True, + download_name='hotovy.dxf', + mimetype='application/octet-stream' + ) + else: + return render_template('upload_form.html', no_file=True) + return render_template('upload_form.html') + +def nacti_data_z_excelu(soubor, listname="List1"): + wb = openpyxl.load_workbook(soubor, data_only=True) + sheet = wb[listname] + body = [] + + for row in sheet.iter_rows(min_row=2, values_only=True): + if row[0] and row[1] is not None and row[2] is not None: + label = str(row[0]) + try: + x = float(row[1]) + y = float(row[2]) + z = float(row[3]) if len(row) > 3 and row[3] is not None else 0 + body.append((label, x, y, z)) + except ValueError: + continue + return body + +def exportuj_do_dxf(body, velikost) -> BytesIO: + doc = ezdxf.new() + msp = doc.modelspace() + + doc.layers.new(name="BODY", dxfattribs={"color": 7}) + doc.layers.new(name="POPISKY", dxfattribs={"color": 1}) + + for label, x, y, z in body: + msp.add_point((x, y, z), dxfattribs={"layer": "BODY"}) + msp.add_text( + label + "*"*(body.count((label, x, y, z))-1), + + dxfattribs={"layer": "POPISKY", "height": float(velikost)}).set_pos((x + 2, y + 2), align="LEFT") # Posun textu od bodu + + my_file = StringIO() + out_file = BytesIO() + doc.write(my_file, fmt="asc") + print(my_file) + out_file.write(my_file.getvalue().encode('utf-8')) + + return out_file + + + + +if __name__ == '__main__': + app.run(debug=False, port=5003, host='0.0.0.0') \ No newline at end of file