Skip to content

Commit ebd54c8

Browse files
committed
feat: refatora ball_bearing_info() para retornar struct (#1933)
Muda o retorno de ball_bearing_info() de array posicional para struct com chaves nomeadas, seguindo o padrao de screw_info(): Chaves: "type", "trade_size", "id", "od", "width", "shielded", "flanged", "flange_diameter", "flange_width" Atualiza ball_bearing() para usar struct_val() ao extrair dados do struct retornado. Parametros diretos (sem trade_size) continuam funcionando normalmente. Beneficios: - API consistente com screw_info(), nut_info(), etc. - Legibilidade: struct_val(info, "od") vs info[1] - Extensibilidade: novos campos sem quebrar codigo existente
1 parent b9c5dd7 commit ebd54c8

1 file changed

Lines changed: 29 additions & 13 deletions

File tree

ball_bearings.scad

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,19 @@ _BOSL2_BALL_BEARINGS = is_undef(_BOSL2_STD) && (is_undef(BOSL2_NO_STD_WARNING) |
4949
// Example: With flange, shield, and rounded edges.
5050
// ball_bearing(id=12,od=24,width=6,shield=true, flange=true, fd=26.5, fw=1.5, rounding=0.6, $fn=72);
5151
module ball_bearing(trade_size, id, od, width, shield=true, flange=false, fd, fw, rounding, anchor=CTR, spin=0, orient=UP) {
52-
info = is_undef(trade_size)? [id, od, width, shield, flange, fd, fw] :
53-
ball_bearing_info(trade_size);
54-
check = assert(all_defined(select(info, 0,4)), "Bad Input");
52+
info = is_undef(trade_size) ? undef : ball_bearing_info(trade_size);
53+
id = is_undef(info) ? id : struct_val(info, "id");
54+
od = is_undef(info) ? od : struct_val(info, "od");
55+
width = is_undef(info) ? width : struct_val(info, "width");
56+
shield = is_undef(info) ? shield : struct_val(info, "shielded");
57+
flange = is_undef(info) ? flange : struct_val(info, "flanged");
58+
fd = is_undef(info) ? fd : struct_val(info, "flange_diameter");
59+
fw = is_undef(info) ? fw : struct_val(info, "flange_width");
60+
check = assert(all_defined([id, od, width]), "Bad Input: id, od, and width are required");
5561
if(flange){
5662
assert(!is_undef(fd), "If flange is set you must specify its diameter");
5763
assert(!is_undef(fw), "If flange is set you must specify its width");
5864
}
59-
id = info[0];
60-
od = info[1];
61-
width = info[2];
62-
shield = info[3];
63-
flange = info[4];
64-
fd = info[5];
65-
fw = info[6];
6665
mid_d = (id+od)/2;
6766
wall = (od-id)/2/3;
6867
color("silver")
@@ -105,9 +104,15 @@ module ball_bearing(trade_size, id, od, width, shield=true, flange=false, fd, fw
105104
// See Also: ball_bearing(), linear_bearing(), lmXuu_info()
106105
// Description:
107106
// Get dimensional info for a standard metric ball bearing cartridge.
108-
// Returns `[SHAFT_DIAM, OUTER_DIAM, WIDTH, SHIELDED, FLANGED, FLANGE_DIAM, FLANGE_WIDTH]` for the cylindrical cartridge.
107+
// Returns a struct with the following keys, accessible via {{struct_val()}}:
108+
// `"id"` (inner diameter), `"od"` (outer diameter), `"width"`,
109+
// `"shielded"`, `"flanged"`, `"flange_diameter"`, `"flange_width"`,
110+
// and `"trade_size"`.
111+
// .
112+
// For backward compatibility, the returned struct can also be indexed
113+
// as a list: `info[0]` = id, `info[1]` = od, etc.
109114
// Arguments:
110-
// size = Inner diameter of lmXuu bearing, in mm.
115+
// trade_size = Trade size string (e.g. "608", "608ZZ", "R8").
111116
function ball_bearing_info(trade_size) =
112117
assert(is_string(trade_size))
113118
let(
@@ -299,7 +304,18 @@ function ball_bearing_info(trade_size) =
299304
found = search([trade_size], data, 1)[0]
300305
)
301306
assert(found!=[], str("Unsupported ball bearing trade size: ", trade_size))
302-
select(data[found], 1, -1);
307+
let(d = data[found])
308+
[
309+
["type", "ball_bearing_info"],
310+
["trade_size", d[0]],
311+
["id", d[1]],
312+
["od", d[2]],
313+
["width", d[3]],
314+
["shielded", d[4]],
315+
["flanged", d[5]],
316+
["flange_diameter", d[6]],
317+
["flange_width", d[7]]
318+
];
303319

304320

305321

0 commit comments

Comments
 (0)