Dieses Projekt beschreibt einen parametriebaren Kleiderhaken. Das 3D-Objekt wird mit OpenSCAD erstellt.
Mit einem 3D-Druck Projekt konstruieren wir einen Kleiderhaken. Die STL-Dateien werden in OpenSCAD erstellt.
Kleiderhaken /* ******************************************* Objekt Info: Parametriebarer Kleiderhaken ******************************************* Version: 29.09.2022 khf ******************************************* */ //*************** Auswahl ************* // keine //***************************************** //*************** Libraries ************ // keine //***************************************** //*************** Parameter ************* //Fragmente $fn = 60; //vertikale Laenge des quadratischen Teils des Hakens length1 = 90; //Breite des Hakens width = 40; //horizontale Laenge quadratischer Teil des Hakens length2 = 40; radius1 = width/2; //Dicke des Hakens thickness = 15; /*[Art des Hakens] */ //Art des Hakens (true=Rundung, false=Fase) type = false; //Groesse der Kantenrundung fillet = 3; //Groesse der Fase chamfer = 2; //Radius des Hakens (aendert auch die Gesamtlaenge des Hakens) hookRadius = 10; //Durchmesser der Schraubenloecher diameter = 5; // [5,6,8,10] //Aktiviere die Senkung in der Schraubenloecher countersunk = true; //***************************************** //************** Programm ************** module cylinderWithFillet(h1,r1,r2) { radius = r2; diameter = radius * 2; minkowski() { cylinder(h = h1 - diameter, r = r1 - (radius), center = true, $fn = 100); sphere(r = radius); } } module halfCylinderWithFillet(h1,r1,r2) { difference() { cylinderWithFillet(h1,r1,r2); translate([0,-r1,-0.5*h1]) cube([r1,2*r1,h1]); } } module fillet(l,r1) { intersection() { cube([l,l,l]); cylinder(h=l, r=r1, $fn=50); } } module roundedCube(l,w,h,r1) { d = 2 * r1; translate([r1,r1,0]) hull() { rotate([0,0,180]) fillet(l,r1); translate([0,w-d,0]) rotate([0,0,90]) fillet(l,r1); translate([h-d,0,0]) rotate([0,0,270]) fillet(l,r1); translate([h-d,w-d,0]) rotate([0,0,0]) fillet(l,r1); } } module bendedCubeWithFillet(l, w, h, hr) { rotate_extrude(angle = 90, convexity = 2, $fn = 50) { translate([hr,0,0]) //x-value changes radius minkowski() { projection() roundedCube(l,w,h,fillet); } } } module chamferedCube(l,w,h,c) { linear_extrude(height=l) { hull() { polygon([[c,0],[0,c],[c,c]]); translate([w-c,h-c,0]) polygon([[0,0],[c,0],[0,c]]); translate([w-c,0,0]) polygon([[0,0],[0,c],[c,c]]); translate([0,h-c,0]) polygon([[0,0],[c,0],[c,c]]); } } } module bendedChamferedCube(l,w,h,c,hr) { rotate_extrude(angle = 90, convexity = 2, $fn = 100) translate([hr,0,0]) //x-value changes radius projection() chamferedCube(l,w,h,c); } module halfCylinderWithChamfer(r,c,th) { rotate_extrude(angle=180,convexity = 2, $fn = 60) polygon([[0,0],[r-c,0],[r,c],[r,th-c],[r-c,th],[0,th]]); } module screwHoles(dia, countersunk) { translate([thickness/2,width/2,length1]) rotate([0,90,0]) cylinder(r=dia/2, h=thickness+4, center=true); translate([thickness/2,width/2,length1/3]) rotate([0,90,0]) cylinder(r=dia/2, h=thickness+4, center=true); if (countersunk==true) { translate([thickness/8-0.01,width/2,length1/3]) rotate([0,90,0]) cylinder(r1=dia/2*1.7, r2=dia/2, h=thickness/4, center=true); translate([thickness/8-0.01,width/2,length1]) rotate([0,90,0]) cylinder(r1=dia/2*1.7, r2=dia/2, h=thickness/4, center=true); } } if (type==true) { difference() { union() { roundedCube(length1,width,thickness,fillet); translate([-hookRadius,0,0]) rotate([-90,0,0]) bendedCubeWithFillet(length1, width, thickness, hookRadius); translate([-length2-hookRadius,0,-hookRadius]) rotate([0,90,0]) roundedCube(length2,width,thickness,fillet); translate([-length2-hookRadius,0,0]) rotate([-90,90,0]) bendedCubeWithFillet(length1, width, thickness, hookRadius); translate([thickness/2,radius1,length1]) rotate([0,90,0]) halfCylinderWithFillet(thickness,radius1,fillet); translate([-length2-(2*hookRadius)-thickness/2,radius1,0]) rotate([0,90,0]) halfCylinderWithFillet(thickness,radius1,fillet); } screwHoles(diameter,countersunk); } echo("Die Gesamthoehe des Hakens betraegt: ",length1 + hookRadius + thickness + radius1); echo("Die Gesamttiefe des Hakens betraegt: ",length2 + 2 * (hookRadius + thickness)); } else { difference() { translate([thickness,0,0]) rotate([0,0,90]) union() { chamferedCube(length1,width,thickness,chamfer); translate([radius1,thickness,length1]) rotate([90,0,0]) halfCylinderWithChamfer(radius1,chamfer,thickness); translate([0,thickness+hookRadius,0]) rotate([-90,0,-90]) bendedChamferedCube(width,thickness,width,chamfer,hookRadius); translate([0,thickness+hookRadius,-hookRadius]) rotate([-90,0,0]) chamferedCube(length2,width,thickness,chamfer); translate([0,length2+thickness+hookRadius,0]) rotate([0,90,0]) bendedChamferedCube(width,thickness,width,chamfer,hookRadius); translate([radius1,length2+2*thickness+2*hookRadius,0]) rotate([90,0,0]) halfCylinderWithChamfer(radius1,chamfer,thickness); } screwHoles(diameter,countersunk); } echo("Die Gesamthoehe des Hakens betraegt: ",length1 + hookRadius + thickness + radius1); echo("Die Gesamttiefe des Hakens betraegt: ",length2 + 2 * (hookRadius + thickness)); } RAW nach oben
Kleiderhaken
/* ******************************************* Objekt Info: Parametriebarer Kleiderhaken ******************************************* Version: 29.09.2022 khf ******************************************* */ //*************** Auswahl ************* // keine //***************************************** //*************** Libraries ************ // keine //***************************************** //*************** Parameter ************* //Fragmente $fn = 60; //vertikale Laenge des quadratischen Teils des Hakens length1 = 90; //Breite des Hakens width = 40; //horizontale Laenge quadratischer Teil des Hakens length2 = 40; radius1 = width/2; //Dicke des Hakens thickness = 15; /*[Art des Hakens] */ //Art des Hakens (true=Rundung, false=Fase) type = false; //Groesse der Kantenrundung fillet = 3; //Groesse der Fase chamfer = 2; //Radius des Hakens (aendert auch die Gesamtlaenge des Hakens) hookRadius = 10; //Durchmesser der Schraubenloecher diameter = 5; // [5,6,8,10] //Aktiviere die Senkung in der Schraubenloecher countersunk = true; //***************************************** //************** Programm ************** module cylinderWithFillet(h1,r1,r2) { radius = r2; diameter = radius * 2; minkowski() { cylinder(h = h1 - diameter, r = r1 - (radius), center = true, $fn = 100); sphere(r = radius); } } module halfCylinderWithFillet(h1,r1,r2) { difference() { cylinderWithFillet(h1,r1,r2); translate([0,-r1,-0.5*h1]) cube([r1,2*r1,h1]); } } module fillet(l,r1) { intersection() { cube([l,l,l]); cylinder(h=l, r=r1, $fn=50); } } module roundedCube(l,w,h,r1) { d = 2 * r1; translate([r1,r1,0]) hull() { rotate([0,0,180]) fillet(l,r1); translate([0,w-d,0]) rotate([0,0,90]) fillet(l,r1); translate([h-d,0,0]) rotate([0,0,270]) fillet(l,r1); translate([h-d,w-d,0]) rotate([0,0,0]) fillet(l,r1); } } module bendedCubeWithFillet(l, w, h, hr) { rotate_extrude(angle = 90, convexity = 2, $fn = 50) { translate([hr,0,0]) //x-value changes radius minkowski() { projection() roundedCube(l,w,h,fillet); } } } module chamferedCube(l,w,h,c) { linear_extrude(height=l) { hull() { polygon([[c,0],[0,c],[c,c]]); translate([w-c,h-c,0]) polygon([[0,0],[c,0],[0,c]]); translate([w-c,0,0]) polygon([[0,0],[0,c],[c,c]]); translate([0,h-c,0]) polygon([[0,0],[c,0],[c,c]]); } } } module bendedChamferedCube(l,w,h,c,hr) { rotate_extrude(angle = 90, convexity = 2, $fn = 100) translate([hr,0,0]) //x-value changes radius projection() chamferedCube(l,w,h,c); } module halfCylinderWithChamfer(r,c,th) { rotate_extrude(angle=180,convexity = 2, $fn = 60) polygon([[0,0],[r-c,0],[r,c],[r,th-c],[r-c,th],[0,th]]); } module screwHoles(dia, countersunk) { translate([thickness/2,width/2,length1]) rotate([0,90,0]) cylinder(r=dia/2, h=thickness+4, center=true); translate([thickness/2,width/2,length1/3]) rotate([0,90,0]) cylinder(r=dia/2, h=thickness+4, center=true); if (countersunk==true) { translate([thickness/8-0.01,width/2,length1/3]) rotate([0,90,0]) cylinder(r1=dia/2*1.7, r2=dia/2, h=thickness/4, center=true); translate([thickness/8-0.01,width/2,length1]) rotate([0,90,0]) cylinder(r1=dia/2*1.7, r2=dia/2, h=thickness/4, center=true); } } if (type==true) { difference() { union() { roundedCube(length1,width,thickness,fillet); translate([-hookRadius,0,0]) rotate([-90,0,0]) bendedCubeWithFillet(length1, width, thickness, hookRadius); translate([-length2-hookRadius,0,-hookRadius]) rotate([0,90,0]) roundedCube(length2,width,thickness,fillet); translate([-length2-hookRadius,0,0]) rotate([-90,90,0]) bendedCubeWithFillet(length1, width, thickness, hookRadius); translate([thickness/2,radius1,length1]) rotate([0,90,0]) halfCylinderWithFillet(thickness,radius1,fillet); translate([-length2-(2*hookRadius)-thickness/2,radius1,0]) rotate([0,90,0]) halfCylinderWithFillet(thickness,radius1,fillet); } screwHoles(diameter,countersunk); } echo("Die Gesamthoehe des Hakens betraegt: ",length1 + hookRadius + thickness + radius1); echo("Die Gesamttiefe des Hakens betraegt: ",length2 + 2 * (hookRadius + thickness)); } else { difference() { translate([thickness,0,0]) rotate([0,0,90]) union() { chamferedCube(length1,width,thickness,chamfer); translate([radius1,thickness,length1]) rotate([90,0,0]) halfCylinderWithChamfer(radius1,chamfer,thickness); translate([0,thickness+hookRadius,0]) rotate([-90,0,-90]) bendedChamferedCube(width,thickness,width,chamfer,hookRadius); translate([0,thickness+hookRadius,-hookRadius]) rotate([-90,0,0]) chamferedCube(length2,width,thickness,chamfer); translate([0,length2+thickness+hookRadius,0]) rotate([0,90,0]) bendedChamferedCube(width,thickness,width,chamfer,hookRadius); translate([radius1,length2+2*thickness+2*hookRadius,0]) rotate([90,0,0]) halfCylinderWithChamfer(radius1,chamfer,thickness); } screwHoles(diameter,countersunk); } echo("Die Gesamthoehe des Hakens betraegt: ",length1 + hookRadius + thickness + radius1); echo("Die Gesamttiefe des Hakens betraegt: ",length2 + 2 * (hookRadius + thickness)); }
RAW
nach oben