Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
// ----------------------------------------------------
// Material Hyperobject Compensations
// (Passed dynamically by the Commons API)
// Fit and scale compensation (explicit geometry inputs)
// ----------------------------------------------------
mat_shrinkage_x = 1.0;
mat_shrinkage_y = 1.0;
mat_shrinkage_z = 1.0;
// scale_comp_x/y/z: unitless scale factors applied to the slide body
// (1.0 = none). Manifest parameters of microscope-slide-hyperobject.
scale_comp_x = 1.0;
scale_comp_y = 1.0;
scale_comp_z = 1.0;
// fit_clearance_slide: extra slot clearance in mm that slide_slot_width()
// adds for a sliding fit (0 = none). A library input: microscope-slide-holder
// declares it; microscope-slide-hyperobject renders no slot, so it does not.
fit_clearance_slide = 0.0;

mat_clear_press = 0.0;
mat_clear_slide = 0.0;
mat_clear_loose = 0.0;
// LEGACY material injection. REMOVE AT THE FLIP of the yantra4d flag
// RENDER_MATERIAL_INJECTION (owner ruling "flag now, flip later").
// While that flag is on, a render request naming target_material makes the
// platform pass the material card's mat_shrinkage_x/y/z and mat_clear_slide
// with -D. They are undef unless injected, and an injected value WINS over
// the explicit parameter above, so a render with the flag on is unchanged.
// At the flip, delete these four assignments and _legacy_or() and read the
// explicit parameters directly. mat_clear_press and mat_clear_loose were
// declared here but never read, so they are no longer declared.
mat_shrinkage_x = undef;
mat_shrinkage_y = undef;
mat_shrinkage_z = undef;
mat_clear_slide = undef;
function _legacy_or(legacy, explicit) = is_undef(legacy) ? explicit : legacy;

// Standard Microscope Slide Dimensions (ISO 8037)
function slide_slot_width(thickness, tolerance) = thickness + tolerance + mat_clear_slide + 0.1;
function slide_slot_width(thickness, tolerance) =
thickness + tolerance + _legacy_or(mat_clear_slide, fit_clearance_slide) + 0.1;
function slide_pitch(slot_w, rib_w) = slot_w + rib_w;

module slide_retention_rib(height, depth, root_w, tip_w, chamfer_h) {
Expand Down Expand Up @@ -87,8 +104,11 @@ render_mode = 0; // [0:main]
if (render_mode == 0) {
// Material simulation logic for transparency via OpenSCAD nightly alpha
color([0.8, 0.9, 0.9, 0.4]) {
// Apply Material Hyperobject Shrinkage Compensation
scale([mat_shrinkage_x, mat_shrinkage_y, mat_shrinkage_z]) {
// Scale compensation: the explicit scale_comp_* parameters, or the legacy
// injected mat_shrinkage_* while the platform still injects them.
scale([_legacy_or(mat_shrinkage_x, scale_comp_x),
_legacy_or(mat_shrinkage_y, scale_comp_y),
_legacy_or(mat_shrinkage_z, scale_comp_z)]) {
if (slide_standard == 0) {
// ISO 8037-1 Primary
iso_8037_slide(76.0, 26.0, 1.0);
Expand Down
23 changes: 23 additions & 0 deletions microscope-slide-holder/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,29 @@
"es": "Holgura añadida al grosor de laminilla (ancho de ranura)"
}
},
{
"id": "fit_clearance_slide",
"type": "slider",
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.01,
"group": "tolerance",
"visible_in_modes": ["box", "staining_rack", "cabinet_drawer"],
"visibility_level": "advanced",
"label": {
"en": "Extra slide-fit clearance (mm)",
"es": "Holgura extra de ajuste deslizante (mm)",
"fr": "Jeu supplémentaire d'ajustement glissant (mm)",
"pt": "Folga extra de ajuste deslizante (mm)"
},
"tooltip": {
"en": "Added to every slot width of the OpenSCAD box, staining rack and cabinet drawer (slot = slide thickness + Z tolerance + this + 0.1 mm). 0 adds nothing. The staining rack keeps a 5 mm minimum pitch, so there it only matters for thick slides. A caller that resolves a sliding-fit clearance elsewhere passes the number here.",
"es": "Se suma al ancho de cada ranura de la caja, el bastidor de tinción y el cajón de gabinete en OpenSCAD (ranura = grosor de laminilla + tolerancia Z + este valor + 0.1 mm). 0 no añade nada. El bastidor de tinción mantiene un paso mínimo de 5 mm, así que ahí solo influye con laminillas gruesas. Quien resuelve una holgura de ajuste deslizante en otro lugar pasa aquí el número.",
"fr": "S'ajoute à la largeur de chaque fente de la boîte, du portoir de coloration et du tiroir de cabinet OpenSCAD (fente = épaisseur de lame + tolérance Z + cette valeur + 0,1 mm). 0 n'ajoute rien. Le portoir de coloration garde un pas minimal de 5 mm : il n'y compte que pour les lames épaisses. Un appelant qui calcule ailleurs un jeu d'ajustement glissant transmet ici la valeur.",
"pt": "Somada à largura de cada ranhura da caixa, do suporte de coloração e da gaveta de gabinete em OpenSCAD (ranhura = espessura da lâmina + tolerância Z + este valor + 0,1 mm). 0 não acrescenta nada. O suporte de coloração mantém um passo mínimo de 5 mm, então ali só influi com lâminas grossas. Quem resolve uma folga de ajuste deslizante em outro lugar passa aqui o número."
}
},
{
"id": "density",
"type": "select",
Expand Down
Loading