"""Крышка заходит под два неподвижных крюка, затем засов входит под переднюю полку. Для снятия засов отводится обратно.""" 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 App, Piece, Pose, V, box, join, main, params, phase, require MODEL_ID = "hook-slider" DEFAULTS = { "length": 50, "width": 34, "height": 20, "base_thickness": 3, "lid_thickness": 3, "clearance": 0.25, } NOTE = "Крышка заходит под два неподвижных крюка, затем засов входит под переднюю полку. Для снятия засов отводится обратно." MODE = "rigid" def make_parts(supplied=None): p = params(DEFAULTS, supplied) l, w, h, b, c = [ p[k] for k in ("length", "width", "height", "base_thickness", "clearance") ] require(h > 12 and l > 35 and w > 20, "Need height>12, length>35, width>20") base = box(0, 0, 0, l, w, b) for y in (2, w - 8): base = join(base, box(0, y, b, 5, 6, h + 6 - b), box(4, y, h + 3 + c, 6, 6, 3)) base = join( base, box(l - 4, w / 2 - 7, b, 4, 14, h - b), box(l - 10, w / 2 - 7, h - 4, 6, 14, 4), ) lid = box(6, 5, h + c, l - 11, w - 10, p["lid_thickness"]) guide = box(l - 23, w / 2 - 4, h - 8, 10, 8, 8 + c).cut( box(l - 24, w / 2 - 3.3, h - 7, 12, 6.6, 3) ) lid = join(lid, guide) bolt = box(l - 22, w / 2 - 3, h - 6.75, 17.5, 6, 2.5) pivot = (10, 0, h + 3 + c) return [ Piece("receiver", "Основание и крюки", base), Piece( "lid", "Крышка с направляющей", lid, lambda t: Pose( angle=-35 * (1 - phase(t, 0, 0.6)), axis=(0, 1, 0), pivot=pivot ), ), Piece( "bolt", "Печатный засов", bolt, lambda t: Pose( offset=tuple( App.Rotation(V(0, 1, 0), -35 * (1 - phase(t, 0, 0.6))).multVec( V(-8 * (1 - phase(t, 0.6, 1)), 0, 0) ) ), angle=-35 * (1 - phase(t, 0, 0.6)), axis=(0, 1, 0), pivot=pivot, ), ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)