"""Вставка опускается в подготовленное отверстие, затем устанавливается винт. Номинальное пересечение вставки и пластика показывает припуск под вплавление. Нагрев и течение пластика не рассчитываются.""" 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, V, cyl, join, main, params, phase, polygon, require, ring, thread, ) MODEL_ID = "heat-insert" DEFAULTS = { "screw_radius": 3, "pitch": 1, "insert_radius": 4.8, "insert_length": 9, "boss_radius": 9, "boss_height": 12, "interference": 0.1, "clearance": 0.25, } NOTE = "Внутренняя резьба металлической вставки показана габаритным отверстием. Вставка опускается в подготовленное отверстие, затем устанавливается винт. Номинальное пересечение вставки и пластика показывает припуск под вплавление. Нагрев и течение пластика не рассчитываются." MODE = "thermal-fit" def make_parts(supplied=None): p = params(DEFAULTS, supplied) r, pitch, ro, il, br, h, i, c = [ p[k] for k in ( "screw_radius", "pitch", "insert_radius", "insert_length", "boss_radius", "boss_height", "interference", "clearance", ) ] require( br > ro + 2 and ro > r + 0.8 and h > il + 1 and i < ro * 0.1, "Insert needs a supported boss", ) l = il + 3 dz = h + c + 3 - l screw = join( thread(r, pitch, l).translated(V(0, 0, dz)), cyl(r + 2, 3, (0, 0, h + c + 3)) ) insert = ring(ro, r - pitch * 0.42, il, h - il) for angle in range(0, 360, 30): rib = polygon( [(ro - 0.15, -0.35), (ro + 0.25, 0), (ro - 0.15, 0.35)], h - il, il ) insert = join(insert, rib.rotated(V(), V(0, 0, 1), angle)) insert = insert.cut(cyl(r + c, il + 2, (0, 0, h - il - 1))) insert.fix(1e-7, 1e-7, 1e-5) base = cyl(br, h).cut(cyl(ro - i, il + 0.1, (0, 0, h - il))) lid = ring(br, r + c, 3, h + c) return [ Piece("receiver", "Стойка с посадкой под вплавление", base), Piece( "insert", "Резьбовая вставка с насечками", insert, lambda t: Pose(offset=(0, 0, 18 * (1 - phase(t, 0, 0.35)))), role="hardware", ), Piece( "lid", "Прижимаемая панель", lid, lambda t: Pose(offset=(0, 0, 22 * (1 - phase(t, 0.4, 0.6)))), ), Piece( "screw", "Винт", screw, lambda t: Pose( offset=(0, 0, 24 * (1 - phase(t, 0.65, 1))), angle=360 * 24 * (1 - phase(t, 0.65, 1)) / pitch, ), role="hardware", ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)