"""Край колпачка расширяется на буртике и возвращается в кольцевую канавку. Для жёстких FDM-пластиков допустимая деформация требует отдельной проверки.""" 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, phase, require, ring MODEL_ID = "annular" DEFAULTS = { "body_radius": 9.5, "bead_radius": 10.5, "cap_radius": 12.5, "wall": 2.5, "height": 18, "clearance": 0.3, "expansion": 0.7, } NOTE = "Край колпачка расширяется на буртике и возвращается в кольцевую канавку. Для жёстких FDM-пластиков допустимая деформация требует отдельной проверки." MODE = "elastic" def make_parts(supplied=None): p = params(DEFAULTS, supplied) r, bead, ro, w, h, c, e = [ p[k] for k in ( "body_radius", "bead_radius", "cap_radius", "wall", "height", "clearance", "expansion", ) ] inner = ro - w require( r < inner < bead and ro > bead + c and inner + e > bead and h > 14, "Bore, bead and expansion must agree", ) base = join(cyl(r, 12), cyl(bead, 1, (0, 0, 10))) def cap(t): expand = e * phase(t, 0.2, 0.4) * (1 - phase(t, 0.98, 1)) body = ring(ro + expand, inner + expand, h - 10, 8) body = body.cut(cyl(bead + c + expand, 1 + 2 * c, (0, 0, 10 - c))) return join(body, cyl(ro + expand, 2, (0, 0, h - 2))) return [ Piece("body", "Корпус с кольцевым буртиком", base), Piece( "cap", "Колпачок с канавкой", cap(1), lambda t: Pose(offset=(0, 0, 17 * (1 - t))), deform=cap, ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)