component
Wakefield Thermal 680-125220 TO-220 heatsink
Public Made by Adomby adom
Bolt-on aluminum heatsink with provisional drawing-led geometry and explicit off-board mechanical roles.
main
#!/usr/bin/env python3
"""Drawing-led nominal 680-125220 visualization, with unresolved details explicit."""
from pathlib import Path
import math,json,hashlib
import cadquery as cq
from glb_shape_helpers import add_shape,write_glb
O=Path(__file__).resolve().parent
width=1.810*25.4;height=1.250*25.4;base=.188*25.4;corner_r=.156*25.4;pitch=1.5*25.4
outer=cq.Workplane('XY').rect(width,width).extrude(height).edges('|Z').fillet(corner_r).val()
body=cq.Workplane('XY').rect(width,width).extrude(base).edges('|Z').fillet(corner_r).val()
fin_width=2.0 # Not dimensioned in the public sheet; illustrative, never a manufacture dimension.
for i in range(16):
degrees=11.25+i*22.5;phase=degrees%90
inner=(1.310 if phase<22.5 or phase>67.5 else 1.560)*25.4/2
length=width-inner
fin=cq.Workplane('XY').box(length,fin_width,height-base,centered=(False,True,False)).translate((inner,0,base)).val().rotate((0,0,0),(0,0,1),degrees)
body=body.fuse(fin.intersect(outer))
for x in [-pitch/2,pitch/2]:
for y in [-pitch/2,pitch/2]:
boss=cq.Solid.makeCylinder(corner_r,height,cq.Vector(x,y,0)).intersect(outer);body=body.fuse(boss)
body=body.cut(cq.Solid.makeCylinder(.147*25.4/2,height+2,cq.Vector(x,y,-1)))
# Two symmetry-related TO-220 mounting holes. Underdimensioned lead relief is omitted explicitly.
for x,y in [(-.440*25.4,-.070*25.4),(.440*25.4,.070*25.4)]:body=body.cut(cq.Solid.makeCylinder(.140*25.4/2,base+2,cq.Vector(x,y,-1)))
assert body.isValid();cq.exporters.export(body,str(O/'680-125220-nominal.step'))
g={'asset':{'version':'2.0','generator':'Adom drawing-led incomplete heatsink study'},'scene':0,'scenes':[{'nodes':[0]}],'nodes':[{'name':'Wakefield.680-125220.Nominal','children':[]}],'buffers':[{'byteLength':0}],'accessors':[]};blob=bytearray();add_shape(g,blob,body,'Heatsink.DrawingLed.Incomplete',(.10,.11,.12),0,'Nominal 680-125220. Fin thickness/spacing inferred; lead-relief details omitted. Not manufacturer CAD.');write_glb(O/'680-125220-nominal.glb',g,blob)
report={'status':'incomplete-drawing-led-model','manufacturer':'Wakefield Thermal','mpn':'680-125220','source':'https://wakefieldthermal.com/content/data_sheets/677.pdf','sourcePrintedPage':75,'catalogDimensionsMm':{'width':width,'height':height,'baseThicknessReference':base,'mountingPitch':pitch,'supportHoleDiameter':.147*25.4,'deviceHoleDiameter':.140*25.4,'finTipDiameters':[1.310*25.4,1.560*25.4]},'inferredGeometry':{'outerCornerRadiusMm':corner_r,'cornerRadiusBasis':'Assumed equal to edge-to-hole-center offset; not a radius callout','radialFinCount':16,'angularStepDegrees':22.5,'phaseDegrees':11.25,'finThicknessMm':fin_width},'omitted':['Two TO-220 lead-relief aperture profiles and their exact placement','Fin/base root fillets, profile tolerances and anodize thickness'],'solidValid':True,'volumeMm3':body.Volume(),'massAt2700KgM3Grams':body.Volume()*.0027,'catalogMassGrams':49.90,'limits':['Visualization only; not suitable for contact-area, airflow, fastener engagement or fabrication acceptance.','The 0.188-inch base dimension is marked REF in the source.','No exact manufacturer CAD was found in this search; availability is not disproved.']};(O/'review.json').write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report,indent=2))