"""Винт формирует резьбу в направляющем отверстии. Технологическое пересечение витков с пластиком соответствует резьбоформованию. Момент затяжки и ресурс требуют пробы.""" 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, require, ring, thread MODEL_ID = "plastic-screw" DEFAULTS = { "screw_radius": 3, "pitch": 1.4, "engagement": 14, "boss_radius": 8, "cover_thickness": 3, "pilot_radius": 2.55, "clearance": 0.25, } NOTE = "Винт формирует резьбу в направляющем отверстии. Технологическое пересечение витков с пластиком соответствует резьбоформованию. Момент затяжки и ресурс требуют пробы." MODE = "thread-forming" def make_parts(supplied=None): p = params(DEFAULTS, supplied) r, pitch, l, br, b, pilot, c = [ p[k] for k in ( "screw_radius", "pitch", "engagement", "boss_radius", "cover_thickness", "pilot_radius", "clearance", ) ] require( r - pitch * 0.42 < pilot < r and br > r + 3 and l > 6, "Pilot radius must lie between thread root and crest", ) base = cyl(br, l).cut(cyl(pilot, l + 2, (0, 0, -1))) lid = ring(br, r + c, b, l + c) z = l + c + b - (l + b) screw = join( thread(r, pitch, l + b).translated(V(0, 0, z)), cyl(r + 2, 3, (0, 0, l + c + b)) ) travel = l + 10 return [ Piece("receiver", "Пластиковая стойка с пилотным отверстием", base), Piece("lid", "Крышка", lid), Piece( "screw", "Резьбоформующий винт", screw, lambda t: Pose( offset=(0, 0, travel * (1 - t)), angle=360 * travel * (1 - t) / pitch ), role="hardware", ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)