|
|
| Ligne 118 : |
Ligne 118 : |
| === Programme OpenSCAD avec encoche circulaire === | | === Programme OpenSCAD avec encoche circulaire === |
| <pre> | | <pre> |
| // Paramètres de la base (en mm) | | // Paramètres |
| longueur = 100; // Longueur de la base
| | base_length = 100; |
| largeur = 50; // Largeur de la base
| | base_width = 50; |
| hauteur = 30; // Hauteur de la base
| | base_height = 50; |
|
| |
|
| // Dimensions de la rainure
| | encoche_diametre = 20; |
| epaisseur_rainure = 3.2; // Tolérance pour la plaque à glisser
| | encoche_profondeur = 5; |
| largeur_rainure = 30; // Dimension de l'ouverture (longueur sur le plan)
| | angle_deg = 0 |
| profondeur_rainure= 15; // Profondeur de la rainure dans le socle
| | ; // Inclinaison de la base en degrés |
|
| |
|
| // Paramètre d'angle (en degrés) | | // Calcul du facteur de rétrécissement en haut |
| // Si angle = 0, le socle aura des faces verticales ; sinon, la face supérieure sera mise en retrait par "d" | | reduction = tan(angle_deg * PI / 180) * base_height; |
| angle = 900; // Privilégiez un chiffre élevé pour observer un changement
| | shrink_x = (base_length - 2 * reduction) / base_length; |
| | shrink_y = (base_width - 2 * reduction) / base_width; |
|
| |
|
| // Calcul de l'offset sur les côtés pour la face supérieure | | // Génération du socle trapézoïdal par extrusion |
| d = hauteur * tan(angle * PI/180);
| | module socle_trapeze() { |
| | | linear_extrude(height = base_height, scale = [shrink_x, shrink_y]) |
| // Définition des 8 sommets du polyèdre
| | square([base_length, base_width], center = true); |
| vertices = [
| | } |
| [0, 0, 0], // V0
| |
| [longueur, 0, 0], // V1
| |
| [longueur, largeur, 0], // V2
| |
| [0, largeur, 0], // V3
| |
| [d, d, hauteur], // V4
| |
| [longueur - d, d, hauteur], // V5
| |
| [longueur - d, largeur - d, hauteur], // V6
| |
| [d, largeur - d, hauteur] // V7
| |
| ];
| |
|
| |
|
| // Définition des faces du polyèdre | | // Affichage final avec encoche ronde |
| faces = [
| | difference() { |
| [0, 3, 2, 1], // Face inférieure (ordre inversé pour une normale vers le bas) | | socle_trapeze(); |
| [4, 5, 6, 7], // Face supérieure
| |
| [0, 1, 5, 4], // Côté 1
| |
| [1, 2, 6, 5], // Côté 2
| |
| [2, 3, 7, 6], // Côté 3
| |
| [3, 0, 4, 7] // Côté 4
| |
| ];
| |
|
| |
|
| // Module générant le socle avec la rainure centrée sur la face supérieure
| | translate([0, 0, base_height - encoche_profondeur]) |
| module socle() {
| | cylinder(h = encoche_profondeur + 0.1, r = encoche_diametre / 2, $fn = 64); |
| difference() {
| |
| polyhedron(points = vertices, faces = faces);
| |
| translate([ (longueur - largeur_rainure) / 2, (largeur - epaisseur_rainure) / 2, hauteur - profondeur_rainure ]) | |
| cube([largeur_rainure, epaisseur_rainure, profondeur_rainure], center = false);
| |
| }
| |
| } | | } |
|
| |
|
| // Affichage du socle
| |
| socle();
| |
| </pre> | | </pre> |
| : | | : |