# Ласточкин хвост [Открыть интерактивную модель](index.html) Левая кнопка мыши с перетаскиванием вращает вид, колесо меняет масштаб. На сенсорном экране один палец вращает, два меняют масштаб. Нажатие выделяет деталь и показывает объём. Ползунок под просмотром задаёт степень вставки. Детали можно скрывать, чтобы увидеть внутренние поверхности. В локальном редакторе параметры меняются прямо на странице. Кнопка «Пробник для печати» раскладывает пару из текущих размеров, готовит 3MF для P2S / PETG и проверяет нарезку. Запуск редактора — двойной щелчок по ../../start.command. Поддержки подбираются автоматически. ## Параметры в миллиметрах | Ключ | Значение по умолчанию | Назначение | |---|---|---| | `length` | 52 | Полная длина основания | | `slider_length` | 36 | Длина ползуна | | `tail_width` | 18 | Нижняя широкая часть хвоста | | `neck_width` | 12 | Узкая шейка хвоста | | `tail_height` | 6 | Высота трапеции | | `base_thickness` | 3 | Дно прямого участка | | `wall_thickness` | 4 | Минимум боковой стенки прямого участка | | `deck_thickness` | 3 | Верхняя площадка ползуна | | `clearance` | 0,25 | Зазор по нормали к наклонным граням, под хвостом и площадкой | | `end_stop` | 3 | Задний упор. Значение 0 открывает оба торца | | `lead_in` | 0,6 | Длина и расширение входной фаски. Значение 0 отключает фаску | Ширина основания вычисляется из ширины хвоста, зазора и стенки. Габарит демонстрационной сборки в собранном положении составляет 26,81 × 52 × 12,25 мм. Входная фаска локально уменьшает толщину стенки и дна на `lead_in`. Генератор отклоняет бесконечные, отрицательные и несовместимые размеры, а также зазор, при котором хвост проходит вверх через горловину. Основные размеры должны быть положительными, зазор, упор и фаска допускают 0. ## Повторная генерация Измените `parameters.json` и выполните команду из корня RCCarBot на этом Mac. ```sh env PYTHONDONTWRITEBYTECODE=1 \ PYTHONPATH=/Applications/FreeCAD.app/Contents/Resources/lib \ /Applications/FreeCAD.app/Contents/Resources/bin/python \ fastening-catalog/models/dovetail/generator.py \ --params fastening-catalog/models/dovetail/parameters.json \ --output fastening-catalog/models/dovetail/generated ``` В `generated/` создаются сборка `demo.FCStd` и `demo.step`, отдельные `receiver.step` и `slider.step`, два STL для печати, проверка `checks.json`, копия параметров и `model.js` для 3D-просмотра. После обновления страницы интерактивная геометрия и таблица берутся из нового `model.js`. Сохранённые PNG и GIF демонстрируют комплектный набор параметров. ## Использование в своих CAD-моделях В Python-консоли FreeCAD добавьте папку генератора в `sys.path`, затем импортируйте функции. ```python import sys from pathlib import Path import FreeCAD as App sys.path.insert( 0, str(Path("models/dovetail").resolve()), ) from generator import Parameters, make_receiver, make_slider, make_cutter p = Parameters(length=70, slider_length=48, clearance=0.3) receiver = make_receiver(p) slider = make_slider(p).translated(App.Vector(0, p.seated_y, 0)) doc = App.newDocument("MyDovetail") doc.addObject("Part::Feature", "Receiver").Shape = receiver doc.addObject("Part::Feature", "Slider").Shape = slider doc.recompute() Gui.activeDocument().activeView().viewAxonometric() Gui.activeDocument().activeView().fitAll() ``` `make_receiver(p)` возвращает основание. `make_slider(p)` возвращает ползун с задним торцом на Y=0. `make_cutter(p)` возвращает объём для вычитания такого же гнезда из собственного корпуса. Его можно применить через `body.cut(make_cutter(p))`, обеспечив достаточную толщину исходного тела. Для объединения деталей с другими телами используется `fuse()`. Начало координат находится на нижней поверхности основания у заднего торца, по центру ширины. X задаёт ширину, Y идёт к входному торцу, Z направлена вверх. Вставка идёт вдоль −Y. Собранное положение ползуна получается сдвигом на `p.seated_y` вдоль Y. Для размещения в другом месте примените к сопряжённым телам одинаковый `Placement`. ## Проверка и печать При генерации проверяются два валидных твёрдых тела, 61 положение вставки, удержание при подъёме, задний упор и обратный импорт STEP. Скрипт `test_generator.py` проверяет семь наборов размеров, ошибочные параметры и повторяемость построения. Он запускается тем же Python из FreeCAD. Основание в STL лежит дном на столе. Ползун перевёрнут широкой площадкой вниз. Оба STL сдвинуты на Z=0. Фактический зазор зависит от принтера, пластика и первого слоя. Ползун удерживается поперёк направляющей и доходит до заднего упора. Выход обратно через входной торец предусмотрен. Усилие скольжения, нагрузка и физическая посадка проверяются на печатном пробнике.