"""Площадка опускается на две стойки. Общая вилка проходит через поперечные окна и ограничивает подъём площадки.""" 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, box, cyl, join, main, params, phase, require MODEL_ID = "fork" DEFAULTS = { "width": 42, "depth": 34, "base_thickness": 3, "post_radius": 4, "post_spacing": 20, "deck_height": 14, "clearance": 0.25, } NOTE = "Площадка опускается на две стойки. Общая вилка проходит через поперечные окна и ограничивает подъём площадки." MODE = "rigid" def make_parts(supplied=None): p = params(DEFAULTS, supplied) w, d, b, r, s, h, c = [ p[k] for k in ( "width", "depth", "base_thickness", "post_radius", "post_spacing", "deck_height", "clearance", ) ] require( s > 2 * r + 2 and w > 2 * r + 6 and d > s + 2 * r and h > b + 4, "Posts must fit inside the plate", ) base = box(-w / 2, -d / 2, 0, w, d, b) deck = box(-w / 2 - 2, -d / 2 - 2, h, w + 4, d + 4, 3) arms = [] for y in (-s / 2, s / 2): post = cyl(r, h + 9 - b, (0, y, b)).cut( box(-r - 1, y - 1.7, h + 3 + c, 2 * r + 2, 3.4, 2.5) ) base = join(base, post) deck = deck.cut(cyl(r + c, 6, (0, y, h - 1))) arms.append(box(-w / 2, y - 1.4, h + 3 + 2 * c, w + 2, 2.8, 2)) fork = join(*arms, box(w / 2, -s / 2 - 1.4, h + 3 + 2 * c, 3, s + 2.8, 2)) return [ Piece("receiver", "Основание со стойками", base), Piece( "deck", "Съёмная площадка", deck, lambda t: Pose(offset=(0, 0, 22 * (1 - phase(t, 0, 0.45)))), ), Piece( "fork", "Запирающая вилка", fork, lambda t: Pose(offset=((w + 5) * (1 - phase(t, 0.45, 1)), 0, 0)), ), ] if __name__ == "__main__": main(make_parts, DEFAULTS, MODEL_ID, __file__, NOTE, MODE)