def draw_pad(d,center=(0,0),front=True): layer='B.Mask' color=2 if front: layer='F.Mask' color=3 x,y=center w=0.5*PAD_WIDTH_X h=0.5*PAD_HEIGHT_Y points=[ (x-w,y-h), (x-w,y+h), (x+w,y+h), (x+w,y-h) ] solid = dxf.solid( points, layer=layer, color=color) d.add(solid)
def out_dxf(png_path): # 用opencv 读取png颜色 _img = cv.imread(png_path) gray = cv.cvtColor(_img, cv.COLOR_RGB2GRAY) box_hex = [] for row in range(25): box_col_hex = [] for col in range(25): px = gray[row * 20 + 12, col * 20 + 12] if px > 200: box_col_hex.append(0) else: box_col_hex.append(1) box_hex.append(box_col_hex) # print(box_hex) # 父目录的父目录 dxf_dir = os.path.dirname(os.path.dirname(png_path)) name = os.path.basename(png_path)[:-4] dxf_path = os.path.join(dxf_dir, 'dxf', f'{name}.dxf') print(f'正在生成{dxf_path}') drawing = dxf.drawing(dxf_path) ## box_size = 7.5/25 二维码总宽度/格子数 box_size = 0.3 for i, box_row in enumerate(box_hex): for j, box_col in enumerate(box_row): if box_col > 0: solid = dxf.solid([(box_size * i, box_size * (25 - j)), (box_size * (i + 1), box_size * (25 - j)), (box_size * (i + 1), box_size * (26 - j)), (box_size * i, box_size * (26 - j))], color=7) solid['layer'] = 'solids' solid['color'] = 7 drawing.add(solid) drawing.save()
def drawSolidTriangleFMC(draw, Ax, Ay, Bx, By, Cx, Cy, colorT): solid = dxf.solid([(Ax, Ay), (Bx, By), (Cx, Cy)]) solid["color"] = colorT draw.add(solid) draw.add_layer(currentLayer, color=colorT)
def drawSolidTriangleFMC(draw, Ax, Ay, Bx, By, Cx, Cy, colorT): solid = dxf.solid([(Ax, Ay), (Bx, By), (Cx, Cy)]) solid['color'] = colorT draw.add(solid) draw.add_layer(currentLayer, color=colorT)
# add LINE-entity drawing.add(dxf.line((0, 0), (10, 0), color=dxfwrite.BYLAYER, layer='dxfwrite')) # add a CIRCLE-entity drawing.add(dxf.circle(center=(5, 0), radius=5)) # add an ARC-entity drawing.add(dxf.arc(center=(5, 0), radius=4, startangle=30, endangle=150)) #add a POINT-entity drawing.add(dxf.point(point=(1, 1))) # add a SOLID-entity with 4 points drawing.add(dxf.solid([(0, 0), (1, 0), (1, 1), (0, 1)], color=2)) # add a SOLID-entity with 3 points drawing.add(dxf.solid([(0, 1), (1, 1), (1, 2)], color=3)) # add a 3DFACE-entity drawing.add(dxf.face3d([(5, 5), (6, 5), (6, 6), (5, 6)], color=3)) # add a Trace-entity drawing.add(dxf.trace([(7, 5), (8, 5), (8, 6), (7, 6)], color=4)) # add a TEXT-entity drawing.add(dxf.text("Manfred")) # add a TEXT-entity with more properties drawing.add(
drawing.add(dxf.line((0,0),( 10,0), color=dxfwrite.BYLAYER, layer='dxfwrite' )) # add a CIRCLE-entity drawing.add(dxf.circle(center=(5,0), radius=5)) # add an ARC-entity drawing.add(dxf.arc(center=(5,0), radius=4, startangle=30, endangle=150)) #add a POINT-entity drawing.add(dxf.point(point=(1,1))) # add a SOLID-entity with 4 points drawing.add(dxf.solid([(0,0), (1,0), (1,1), (0,1)], color=2)) # add a SOLID-entity with 3 points drawing.add(dxf.solid([(0,1), (1,1), (1,2)], color=3)) # add a 3DFACE-entity drawing.add(dxf.face3d([(5,5), (6,5), (6,6), (5,6)], color=3)) # add a Trace-entity drawing.add(dxf.trace([(7,5), (8,5), (8,6), (7,6)], color=4)) # add a TEXT-entity drawing.add(dxf.text("Manfred")) # add a TEXT-entity with more properties drawing.add(dxf.text(
def writeCSDXF(fname, nameCS, nodeIDsCS, nodesCS, valuesCS, decFlow, scale, prefix, suffix): from dxfwrite.const import TOP, BOTTOM, LEFT, CENTER, RIGHT dwg = dxf.drawing(fname) # create block for symbol on left side of CS arrowLeft = [(0.0,0.25), (1.0, 0.25), (0.5, 1.1160), (0.0,0.25)] symbolLeft = dxf.block(name='symbolLeft') symbolLeft.add( dxf.solid(arrowLeft, color=0) ) symbolLeft.add( dxf.attdef(insert=(0, -0.25), tag='CS', height=1.0, color=0, halign=LEFT, valign=TOP )) # create block for symbol on right side of CS arrowRight = [(0.0,0.25), (-1.0, 0.25), (-0.5, 1.1160), (0.0,0.25)] symbolRight = dxf.block(name='symbolRight') symbolRight.add( dxf.solid(arrowRight, color=0) ) symbolRight.add( dxf.attdef(insert=(0, -0.25), tag='CS', height=1.0, color=0, halign=RIGHT, valign=TOP )) # create block for symbol on center of CS symbolCenter = dxf.block(name='symbolCenter') symbolCenter.add( dxf.attdef(insert=(0.0, 0.03), tag='MAX', height=0.75, color=0, halign=CENTER, valign=BOTTOM) ) symbolCenter.add( dxf.attdef(insert=(0.0, -0.25), tag='MIN', height=0.75, color=0, halign=CENTER, valign=TOP) ) # add block definitions to the drawing dwg.blocks.add(symbolLeft) dwg.blocks.add(symbolCenter) dwg.blocks.add(symbolRight) for csID in nodeIDsCS: x1 = nodesCS[nodeIDsCS[csID][0]][0] x2 = nodesCS[nodeIDsCS[csID][1]][0] y1 = nodesCS[nodeIDsCS[csID][0]][1] y2 = nodesCS[nodeIDsCS[csID][1]][1] p1 = (x1, y1) p2 = (x2, y2) dx = x2 - x1 dy = y2 - y1 phi = math.atan2(dy,dx)*180.0/math.pi pm = ((x1+x2)/2.0, (y1+y2)/2.0) valMin = valuesCS[csID][0] valMax = valuesCS[csID][1] dwg.add(dxf.polyline((p1, p2))) values = {'CS': "{0}".format(nameCS[csID])} dwg.add(dxf.insert2(blockdef=symbolLeft, insert=p1, attribs=values, xscale=scale, yscale=scale, layer='0', rotation = phi)) dwg.add(dxf.insert2(blockdef=symbolRight, insert=p2, attribs=values, xscale=scale, yscale=scale, layer='0', rotation = phi)) valuesCenter = {'MIN': "{0}%.{1}f{2} (min)".format(prefix, decFlow, suffix) % valMin, 'MAX': "{0}%.{1}f{2} (max)".format(prefix, decFlow, suffix) % valMax} dwg.add(dxf.insert2(blockdef=symbolCenter, insert=pm, attribs=valuesCenter, xscale=scale, yscale=scale, layer='0', rotation = phi)) dwg.save()