Joints: cam and follower coupling (joint.cam) (#1734)

Thanks @SychPL.
This commit is contained in:
Mateusz Sych authored and GitHub committed 2026-10-16 10:26:35 -04:00
1 parent 88f76adbc2
commit 6232fa33c2
27 files changed
+2176 -47

No files matched your search

+14
View File
@@ -1338,6 +1338,20 @@ pub(crate) fn paint_with(p: &Painter, r: Rect, name: &str, ink: Color32, fill: C
pen.poly(&[(6.0, 10.0), (18.0, 10.0), (18.0, 15.0), (6.0, 15.0)], pen.fill, a);
pen.arrow((21.0, 17.0), (21.0, 6.0), a);
}
"cam" => {
// A cam on its shaft, its lobe up under the follower it lifts.
let cam: Vec<(f32, f32)> = (0..36)
.map(|k| {
let t = std::f32::consts::TAU * k as f32 / 36.0;
let r = 5.0 + 3.0 * (0.5 + 0.5 * t.sin()).powi(3);
(11.0 + r * t.cos(), 16.0 - r * t.sin())
})
.collect();
pen.poly(&cam, pen.fill, ink);
pen.dot(11.0, 16.0, ink);
pen.poly(&[(9.0, 2.0), (13.0, 2.0), (13.0, 8.0), (9.0, 8.0)], pen.fill, a);
pen.arrow((18.5, 9.5), (18.5, 2.5), a);
}
"interference" => {
pen.closed(&[(3.0, 5.0), (14.0, 5.0), (14.0, 16.0), (3.0, 16.0)], ink);
pen.poly(&[(9.0, 10.0), (14.0, 10.0), (14.0, 16.0), (9.0, 16.0)], ic.interference, ic.interference);
+8
View File
@@ -94,6 +94,13 @@
"browser.precision": "Genauigkeit: {precision}",
"browser.sketch_name": "Skizze {number}",
"browser.units": "Einheiten: {units}",
"cam.flat": "Flachstößel",
"cam.follower": "Stößel",
"cam.knife": "Schneide",
"cam.needs_joints": "braucht ein Gelenk, das sich dreht, und eines, das gleitet oder schwenkt",
"cam.roller": "Rolle",
"cam.roller_pick": "Rolle (optional)",
"cam.tip_pick": "Spitze (optional)",
"cmd.appearance_assign": "Erscheinungsbild",
"cmd.appearance_library": "Erscheinungsbild-Bibliothek",
"cmd.appearance_list": "Erscheinungsbilder auflisten",
@@ -197,6 +204,7 @@
"cmd.inspect_minimum_radius": "Mindestradiusanalyse",
"cmd.inspect_zebra": "Zebra-Analyse",
"cmd.joint_as_built": "Fertigungsgelenk",
"cmd.joint_cam": "Nocken",
"cmd.joint_create": "Gelenk",
"cmd.joint_delete": "Gelenk löschen",
"cmd.joint_drive": "Gelenke antreiben",
+8
View File
@@ -295,6 +295,13 @@
"browser.precision": "Precision: {precision}",
"browser.sketch_name": "Sketch{number}",
"browser.units": "Units: {units}",
"cam.flat": "Flat face",
"cam.follower": "Follower",
"cam.knife": "Knife edge",
"cam.needs_joints": "needs a joint that turns and one that slides or swings",
"cam.roller": "Roller",
"cam.roller_pick": "Roller (optional)",
"cam.tip_pick": "Tip (optional)",
"cmd.appearance_assign": "Appearance",
"cmd.appearance_library": "Appearance Library",
"cmd.appearance_list": "List Appearances",
@@ -398,6 +405,7 @@
"cmd.inspect_minimum_radius": "Minimum Radius Analysis",
"cmd.inspect_zebra": "Zebra Analysis",
"cmd.joint_as_built": "As-Built Joint",
"cmd.joint_cam": "Cam",
"cmd.joint_create": "Joint",
"cmd.joint_delete": "Delete Joint",
"cmd.joint_drive": "Drive Joints",
+8
View File
@@ -275,6 +275,13 @@
"browser.precision": "Précision : {precision}",
"browser.sketch_name": "Esquisse{number}",
"browser.units": "Unités : {units}",
"cam.flat": "Plateau",
"cam.follower": "Suiveur",
"cam.knife": "Arête",
"cam.needs_joints": "nécessite une liaison qui tourne et une qui glisse ou pivote",
"cam.roller": "Galet",
"cam.roller_pick": "Galet (facultatif)",
"cam.tip_pick": "Pointe (facultatif)",
"cmd.appearance_assign": "Apparence",
"cmd.appearance_library": "Bibliothèque d'apparences",
"cmd.appearance_list": "Lister les apparences",
@@ -378,6 +385,7 @@
"cmd.inspect_minimum_radius": "Analyse du rayon minimal",
"cmd.inspect_zebra": "Analyse zébrée",
"cmd.joint_as_built": "Liaison telle que construite",
"cmd.joint_cam": "Came",
"cmd.joint_create": "Liaison",
"cmd.joint_delete": "Supprimer la liaison",
"cmd.joint_drive": "Piloter les liaisons",
+8
View File
@@ -295,6 +295,13 @@
"browser.precision": "精度: {precision}",
"browser.sketch_name": "スケッチ{number}",
"browser.units": "単位: {units}",
"cam.flat": "平面",
"cam.follower": "従動節",
"cam.knife": "ナイフエッジ",
"cam.needs_joints": "回転するジョイントと、スライドまたは揺動するジョイントが必要",
"cam.roller": "ローラー",
"cam.roller_pick": "ローラー (オプション)",
"cam.tip_pick": "先端 (オプション)",
"cmd.appearance_assign": "外観",
"cmd.appearance_library": "外観ライブラリ",
"cmd.appearance_list": "外観を一覧表示",
@@ -398,6 +405,7 @@
"cmd.inspect_minimum_radius": "最小半径解析",
"cmd.inspect_zebra": "ゼブラ解析",
"cmd.joint_as_built": "現位置ジョイント",
"cmd.joint_cam": "カム",
"cmd.joint_create": "ジョイント",
"cmd.joint_delete": "ジョイントを削除",
"cmd.joint_drive": "ジョイントを駆動",
+8
View File
@@ -94,6 +94,13 @@
"browser.precision": "정밀도: {precision}",
"browser.sketch_name": "스케치{number}",
"browser.units": "단위: {units}",
"cam.flat": "평면",
"cam.follower": "종동절",
"cam.knife": "나이프 에지",
"cam.needs_joints": "회전하는 관절과 미끄러지거나 흔들리는 관절이 필요함",
"cam.roller": "롤러",
"cam.roller_pick": "롤러 (선택 사항)",
"cam.tip_pick": "끝점 (선택 사항)",
"cmd.appearance_assign": "외관",
"cmd.appearance_library": "외관 라이브러리",
"cmd.appearance_list": "외관 목록",
@@ -197,6 +204,7 @@
"cmd.inspect_minimum_radius": "최소 반경 분석",
"cmd.inspect_zebra": "얼룩말줄무늬 분석",
"cmd.joint_as_built": "조립 상태 관절",
"cmd.joint_cam": "캠",
"cmd.joint_create": "관절",
"cmd.joint_delete": "관절 삭제",
"cmd.joint_drive": "관절 구동",
+8
View File
@@ -251,6 +251,13 @@
"browser.precision": "Точность: {precision}",
"browser.sketch_name": "Эскиз{number}",
"browser.units": "Единицы: {units}",
"cam.flat": "Плоский",
"cam.follower": "Толкатель",
"cam.knife": "Острие",
"cam.needs_joints": "нужны вращающееся и скользящее или качающееся сопряжения",
"cam.roller": "Ролик",
"cam.roller_pick": "Ролик (необязательно)",
"cam.tip_pick": "Острие (необязательно)",
"cmd.appearance_assign": "Внешний вид",
"cmd.appearance_library": "Библиотека внешних видов",
"cmd.appearance_list": "Список внешних видов",
@@ -354,6 +361,7 @@
"cmd.inspect_minimum_radius": "Анализ минимального радиуса",
"cmd.inspect_zebra": "Зебра-анализ",
"cmd.joint_as_built": "Сопряжение на месте",
"cmd.joint_cam": "Кулачок",
"cmd.joint_create": "Сопряжение",
"cmd.joint_delete": "Удалить сопряжение",
"cmd.joint_drive": "Привод сопряжений",
+8
View File
@@ -295,6 +295,13 @@
"browser.precision": "Точність: {precision}",
"browser.sketch_name": "Ескіз{number}",
"browser.units": "Одиниці: {units}",
"cam.flat": "Плоский",
"cam.follower": "Штовхач",
"cam.knife": "Вістря",
"cam.needs_joints": "потрібні обертове й ковзне або хитне з'єднання",
"cam.roller": "Ролик",
"cam.roller_pick": "Ролик (необов'язково)",
"cam.tip_pick": "Вістря (необов'язково)",
"cmd.appearance_assign": "Вигляд",
"cmd.appearance_library": "Бібліотека виглядів",
"cmd.appearance_list": "Список виглядів",
@@ -398,6 +405,7 @@
"cmd.inspect_minimum_radius": "Аналіз мінімального радіуса",
"cmd.inspect_zebra": "Зебра-аналіз",
"cmd.joint_as_built": "З'єднання за поточним положенням",
"cmd.joint_cam": "Кулачок",
"cmd.joint_create": "З'єднання",
"cmd.joint_delete": "Видалити з'єднання",
"cmd.joint_drive": "Керувати з'єднаннями",
+8
View File
@@ -295,6 +295,13 @@
"browser.precision": "精度: {precision}",
"browser.sketch_name": "草图{number}",
"browser.units": "单位: {units}",
"cam.flat": "平底",
"cam.follower": "从动件",
"cam.knife": "尖顶",
"cam.needs_joints": "需要一个旋转接头和一个滑动或摆动接头",
"cam.roller": "滚子",
"cam.roller_pick": "滚子(可选)",
"cam.tip_pick": "尖端(可选)",
"cmd.appearance_assign": "外观",
"cmd.appearance_library": "外观库",
"cmd.appearance_list": "列出外观",
@@ -398,6 +405,7 @@
"cmd.inspect_minimum_radius": "最小半径分析",
"cmd.inspect_zebra": "斑马纹分析",
"cmd.joint_as_built": "现状接头",
"cmd.joint_cam": "凸轮",
"cmd.joint_create": "接头",
"cmd.joint_delete": "删除接头",
"cmd.joint_drive": "驱动接头",