"""Штифт входит в отверстие с заданным радиальным натягом. Технологическое пересечение в CAD соответствует натягу, усилие запрессовки требует пробы.""" import FreeCAD # noqa: F401 (initialize the CAD runtime first) # isort: split import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from common import Piece, Pose, cyl, join, main, params, require MODEL_ID = "press-fit" DEFAULTS = { "pin_radius": 5, "engagement": 16, "wall": 5, "interference": 0.12, "head_radius": 8, } NOTE = "Штифт входит в отверстие с заданным радиальным натягом. Технологическое пересечение в CAD соответствует натягу, усилие запрессовки требует пробы." MODE = "interference" def make_parts(supplied=None): p = params(DEFAULTS, supplied) r, l, w, i, head = [ p[k] for k in ("pin_radius", "engagement", "wall", "interference", "head_radius") ] require( r > i and head > r and i < r * 0.15, "Interference must be a small fraction of the radius", ) base = cyl(r + w, l).cut(cyl(r - i, l + 2, (0, 0, -1))) pin = join(cyl(r, l), cyl(head, 3, (0, 0, l))) return [ Piece("receiver", "Втулка с натягом", base), Piece( "pin", "Запрессовываемый штифт", pin, lambda t: Pose(offset=(0, 0, (l + 6) * (1 - t))), ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)