Lennart SCHWEERS
Premier objet
// Japanese-Style Knife in OpenSCAD
// Parameters for customization
blade_length = 150; // Length of the blade in mm
blade_width = 30; // Maximum width of the blade in mm
blade_thickness = 2; // Thickness of the blade in mm
handle_length = 100; // Length of the handle in mm
handle_width = 20; // Width of the handle in mm
handle_height = 15; // Height of the handle in mm
handle_offset = 3; // How much the handle extends into the blade
module knife() {
translate([0, 0, 0]) blade();
translate([-handle_offset, -handle_width / 2, -handle_height / 2]) handle();
}
// Blade Module
module blade() {
difference() {
// Blade Shape
linear_extrude(height = blade_thickness) {
polygon(points = [
[0, 0],
[blade_length, blade_width / 2],
[blade_length, -blade_width / 2],
[0, 0]
]);
}
// Bevel Edge (sharpness)
translate([blade_length / 2, 0, 0]) {
rotate([0, 0, 90]) {
cylinder(r1 = blade_thickness, r2 = 0, h = blade_length, center = true);
}
}
}
}
// Handle Module
module handle() {
hull() {
// Create a smooth transition from blade to handle
translate([0, 0, 0]) cube([handle_offset, handle_width, handle_height]);
translate([handle_length, 0, 0]) cube([handle_offset, handle_width, handle_height]);
}
difference() {
// Main handle block
translate([0, -handle_width / 2, -handle_height / 2])
cube([handle_length, handle_width, handle_height], center = true);
}
}
// Render the knife
knife();
________________________________
Deuxième Objet: Vase
// Alvar Aalto-style vase approximation in OpenSCAD
$fn = 100; // Increase for smoother curves
// Parameters
height = 200; // Height in mm (20 cm)
thickness = 3; // Wall thickness in mm
difference() {
// Outer vase shape
linear_extrude(height)
offset(r=30) // Offset to round the corners
union() {
circle(30, $fn=100);
translate([50, 0]) circle(25, $fn=100);
translate([-50, 0]) circle(25, $fn=100);
translate([0, 50]) circle(20, $fn=100);
};
// Inner cavity (subtracting inner shape)
translate([0, 0, 0])
linear_extrude(height - thickness)
offset(r=25)
union() {
circle(27, $fn=100);
translate([50, 0]) circle(22, $fn=100);
translate([-50, 0]) circle(22, $fn=100);
translate([0, 50]) circle(17, $fn=100);
};
}
Troisieme Objet
// Paramètres
diametre_interieur = 62; // Diamètre intérieur
epaisseur_bord = 3; // Épaisseur du bord
hauteur_plateau = 60; // Hauteur totale
ecart_plateaux = -2; // Espace entre les deux plateaux
qualite_surface = 100; // Nombre de segments pour lisser les cercles
// Diamètre extérieur
diametre_exterieur = diametre_interieur + 2 * epaisseur_bord;
// Module pour un plateau
module plateau() {
difference() {
// Corps extérieur
cylinder(h = hauteur_plateau - 1, d = diametre_exterieur, center = false, $fn = qualite_surface);
// Cavité intérieure
translate([0, 0, epaisseur_bord]) // Décalage pour laisser un fond
cylinder(h = hauteur_plateau - epaisseur_bord, d = diametre_interieur, center = false, $fn = qualite_surface);
}
}
// Création des deux plateaux côte à côte
translate([-diametre_exterieur/2 - ecart_plateaux/2, 0, 0])
plateau();
translate([diametre_exterieur/2 + ecart_plateaux/2, 0, 0])
plateau();
__________
autres objets:
// Paramètres
module chain_link(radius = 10, thickness = 2, gap = 2) {
// Cercle 1
difference() {
translate([-radius - gap / 2, 0, 0])
cylinder(h = thickness, r = radius, center = true);
translate([-radius - gap / 2, 0, 0])
cylinder(h = thickness + 1, r = radius - thickness, center = true);
}
// Cercle 2
difference() {
translate([radius + gap / 2 - 13, 0, -3]) // Déplacement de 1 cm vers la gauche
rotate([0, 60, 45]) // Rotation de 45 degrés
cylinder(h = thickness, r = radius, center = true);
translate([radius + gap / 2 - 13, 0, -3])
rotate([0, 60, 45])
cylinder(h = thickness + 1, r = radius - thickness, center = true);
}
}
// Exemple d'utilisation
chain_link(radius = 10, thickness = 2, gap = 2);
No Comments