"""Draw a clearly provisional dimension diagram for the KFL001 plate.""" from pathlib import Path from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import landscape,A4 from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.lib.colors import HexColor import pypdfium2 out=Path(r'C:\projects\wheel\models\kfl001_plate_v1') pdfmetrics.registerFont(TTFont('Chinese',r'C:\Windows\Fonts\simhei.ttf')) p=out/'KFL001固定板_尺寸图.pdf' c=canvas.Canvas(str(p),pagesize=landscape(A4));W,H=landscape(A4) c.setTitle('KFL001 mounting plate V1 - prototype') def txt(x,y,t,size=11,color='#17202a'): c.setFillColor(HexColor(color));c.setFont('Chinese',size);c.drawString(x,y,t) def ln(x1,y1,x2,y2,col='#444444',width=.7): c.setStrokeColor(HexColor(col));c.setLineWidth(width);c.line(x1,y1,x2,y2) def tick(x,y):ln(x-3,y-3,x+3,y+3) txt(36,555,'KFL001 固定板尺寸图',23) txt(36,532,'试制版:中心孔直径 39,适配直径 38 凸起',13,'#B42318') txt(36,512,'两块几何相同;厚 8 mm;下方尺寸单位均为 mm',11) k=3.6;x0=110;y0=125;w=76*k;h=80*k;cx=x0+w/2;cy=y0+51*k c.setFillColor(HexColor('#eef2f6'));c.setStrokeColor(HexColor('#263444'));c.setLineWidth(1.1);c.rect(x0,y0,w,h,fill=1,stroke=1) c.setFillColor(HexColor('#ffffff'));c.circle(cx,cy,19.5*k,stroke=1,fill=1) for xx in (-24,24):c.circle(cx+xx*k,cy,3.5*k,stroke=1,fill=1) for xx in (-23.5,23.5):c.roundRect(cx+(xx-4.75)*k,y0+(9-2.75)*k,9.5*k,5.5*k,2.75*k,stroke=1,fill=1) c.setDash(4,3);ln(cx-23*k,cy,cx+23*k,cy,'#858b93',.5);ln(cx,cy-23*k,cx,cy+23*k,'#858b93',.5);c.setDash() # Outside dimensions: overall width, height, axis height and KFL bolt pitch. for x in (x0,x0+w):ln(x,y0-3,x,y0-31) ln(x0,y0-23,x0+w,y0-23);tick(x0,y0-23);tick(x0+w,y0-23);txt(cx-8,y0-19,'76',10) for y in (y0,y0+h):ln(x0-2,y,x0-38,y) ln(x0-30,y0,x0-30,y0+h);tick(x0-30,y0);tick(x0-30,y0+h);txt(x0-50,y0+h/2,'80',10) ln(x0+w+10,y0,x0+w+38,y0);ln(x0+w+10,cy,x0+w+38,cy) ln(x0+w+30,y0,x0+w+30,cy);tick(x0+w+30,y0);tick(x0+w+30,cy);txt(x0+w+34,y0+(cy-y0)/2,'51',10) by=cy+30*k for x in (cx-24*k,cx+24*k):ln(x,cy+4*k,x,by+4) ln(cx-24*k,by,cx+24*k,by);tick(cx-24*k,by);tick(cx+24*k,by);txt(cx-8,by+5,'48',10) txt(472,454,'孔位说明',15) for i,t in enumerate(['1 中心孔:直径 39,适配直径 38 凸起','2 两侧轴承孔:直径 7,孔距 48','3 底部两槽:9.5 × 5.5,横向','4 两槽中心距 47,槽心距底边 9','5 M5 名义横向总行程 4.5','6 中心孔到轴承孔边名义余量仅 1','7 直径 12 垫圈向中心孔悬出约 1.5','8 与 3030 连接用长角码及实物复核']):txt(472,424-i*24,t,11,'#B42318' if i in (0,5,6) else '#17202a') ln(472,217,805,217,'#b9c0c9');txt(472,196,'轴承及连接件先试装,',11,'#B42318');txt(472,178,'紧固和动态强度需实物验证。',11,'#B42318') txt(36,42,'注:圆孔和长槽均贯穿;两块相同。按孔心尺寸加工,无螺纹。',10) c.showPage();c.save() doc=pypdfium2.PdfDocument(str(p));page=doc[0];page.render(scale=1.6).to_pil().save(str(out/'KFL001固定板_尺寸图.png'))