import sys import ezdxf import math minx = 10000000000000 miny = 10000000000000 maxx = 0 maxy = 0 if len(sys.argv) > 0: skala = int(sys.argv[1]) path = (sys.argv[2]) else: skala = 50 alt = 0 fileName = path def drawCross(x, y): msp.add_text( "X:"+str(x), dxfattribs={ "layer": "wsp", "height": 1, "style": "Arial" }).set_pos((x+0.5, y+0.5)) msp.add_text( "Y:"+str(y), dxfattribs={ "layer": "wsp", "height": 1, "style": "Arial" }).set_pos((x+0.5, y-1.5)) msp.add_line((x-2.5, y), (x+2.5, y), dxfattribs={"layer": "siatka"}) msp.add_line((x, y-2.5), (x, y+2.5), dxfattribs={"layer": "siatka"}) try: doc = ezdxf.readfile(fileName) # iterate over all entities in modelspace msp = doc.modelspace() #doc.layers.add(name="siatka", color=0, linetype="SOLID") for e in msp: if e.dxftype() == "LINE": if e.dxf.start[0] < minx: minx = e.dxf.start[0] if e.dxf.end[0] < minx: minx = e.dxf.end[0] if e.dxf.start[1] < miny: miny = e.dxf.start[1] if e.dxf.end[1] < miny: miny = e.dxf.end[1] if e.dxf.start[0] > maxx: maxx = e.dxf.start[0] if e.dxf.end[0] > maxx: maxx = e.dxf.end[0] if e.dxf.start[1] > maxy: maxy = e.dxf.start[1] if e.dxf.end[1] > maxy: maxy = e.dxf.end[1] elif e.dxftype() == "POLYLINE": for point in e.points(): if point[0] < minx: minx = point[0] if point[1] < miny: miny = point[1] if point[0] > maxx: maxx = point[0] if point[1] > maxy: maxy = point[1] ys = (math.floor(miny/100)*100) - (50 * alt) ye = (math.ceil(maxy/100)*100) - (50 * alt) xs = (math.floor((minx)/100)*100) - (50 * alt) xe = (math.ceil((maxx)/100)*100) - (50 * alt) lenX = (xe - xs) + 100 lenY = (ye - ys) + 100 for x in range(0, int(lenX/skala)): for y in range(0, int(lenY/skala)): drawCross(xs+(x*skala),ys+(y*skala)) print(fileName) doc.saveas(fileName[:-4]+"_s.dxf") doc.saveas("public/cross.dxf") except IOError: print(f"Not a DXF file or a generic I/O error.") sys.exit(1) except ezdxf.DXFStructureError: print(f"Invalid or corrupted DXF file.") sys.exit(2)