39 lines
1.9 KiB
Python
39 lines
1.9 KiB
Python
"""Rebuild a distinct 70 mm adapter with 24 plain M4 tap-drill holes.
|
|
|
|
Run through rebuild_70_m4_drill_plain.FCMacro in FreeCAD. The existing source
|
|
builder is used to retain its native editable PCD features and source contour.
|
|
"""
|
|
import os
|
|
from pathlib import Path
|
|
import FreeCAD as App
|
|
import FreeCADGui as Gui
|
|
import Part, Import
|
|
|
|
root = Path(r'C:\projects\wheel')
|
|
out = root / 'models' / '70_m4_drill_plain'
|
|
out.mkdir(parents=True, exist_ok=True)
|
|
src = root / 'scripts' / 'build_70.py'
|
|
code = src.read_text(encoding='utf-8')
|
|
old_target = "target = os.path.join(root, 'models', '\\u0037\\u0030\\u8f6c\\u63a5\\u677f_\\u53c2\\u6570\\u5316.FCStd')"
|
|
new_target = "target = os.path.join(root, 'models', '70_m4_drill_plain', '70_M4_drill_plain.FCStd')"
|
|
assert old_target in code
|
|
code = code.replace(old_target, new_target)
|
|
code = code.replace("('HoleDiameter', '4.234 mm', 'Through hole diameter (all 24 holes)')", "('HoleDiameter', '3.3 mm', 'M4x0.7 tap drill, all 24 holes')")
|
|
code = code.replace(" ('CountersinkDiameter', '6.8 mm', 'Countersink at bottom face'),\n", '')
|
|
begin = code.index("sheet.set('A16', 'CountersinkDepth')")
|
|
end = code.index("sheet.set('A17', 'OuterChamfer')", begin)
|
|
code = code[:begin] + code[end:]
|
|
begin = code.index('cones = []')
|
|
end = code.index('prior = set(doc.Objects)', begin)
|
|
code = code[:begin] + "final = current\nfinal.Label = '70 adapter - 24 plain M4 tap-drill holes'\ndoc.recompute()\nassert final.Shape.isValid() and len(final.Shape.Solids)==1\n\n" + code[end:]
|
|
os.chdir(str(root))
|
|
ns = {'__name__': '__main__', '__file__': str(src)}
|
|
exec(compile(code, str(src), 'exec'), ns)
|
|
doc, final = ns['doc'], ns['final']
|
|
assert abs(doc.getObject('Parameters').get('B4').Value-3.3) < 1e-8
|
|
Import.export([final], str(out / '70_M4_drill_plain.step'))
|
|
Gui.activeDocument().activeView().viewAxonometric()
|
|
Gui.activeDocument().activeView().fitAll()
|
|
Gui.activeDocument().activeView().saveImage(str(out / '70_M4_drill_plain.png'), 1600, 1200, 'White')
|
|
doc.save()
|