// 3D Usta anahtarlik: parametreli tasarım (CC BY 4.0, https://3dusta.com) // Üstteki değerleri değiştir, F6 ile hesaplat, Dosya > Dışa aktar > STL. // ---- Değiştirebileceğin değerler ---- satir1 = "MUTLU YILLAR"; satir2 = "2027"; satir3 = ""; motif = "yildiz"; // yok, yildiz, kalp, elmas, halka, cizgi, nokta zeminRenk = "#1f4d2e"; kabartmaRenk = "#f4f1ea"; parca = "tum"; // tum // ------------------------------------- // 3D Usta ortak kütüphane (CC BY 4.0, https://3dusta.com) // Yazı yazı tipi OpenSCAD ile birlikte gelen Liberation Sans'tır. FONT = "Liberation Sans:style=Bold"; $fn = 96; // Yazı en fazla `en` mm genişliğe sığdırılır: uzun metin kenara taşmaz module yazi(t, boy, en = 1000) { if (len(t) > 0) resize([min(en, len(t) * boy * 0.72), 0], auto = [true, true]) text(t, size = boy, font = FONT, halign = "center", valign = "center"); } module yuvarlak_dikdortgen(w, d, r) { offset(r = r) square([w - 2 * r, d - 2 * r], center = true); } module yildiz(ro, ri, n = 5) { polygon([for (i = [0 : 2 * n - 1]) let(r = (i % 2 == 0) ? ro : ri, a = 90 + i * 180 / n) [r * cos(a), r * sin(a)]]); } module kalp(s) { a = s / 1.707; union() { // elmasın ucu iki dairenin kesişimine tam oturursa tek noktada sıkışan (kapalı olmayan) gövde çıkar: 0,02 a aşağıda translate([0, -a * 0.02]) rotate(45) square(a, center = true); translate([-a * 0.3535, a * 0.3535]) circle(d = a); translate([a * 0.3535, a * 0.3535]) circle(d = a); } } // Düz motifler: telifsiz, jenerik şekiller (karakter ya da logo yok) module motif2d(m, s) { if (m == "yildiz") yildiz(s / 2, s / 4.2); else if (m == "kalp") translate([0, -s * 0.12]) kalp(s); else if (m == "elmas") rotate(45) square(s * 0.7, center = true); else if (m == "halka") difference() { circle(d = s); circle(d = s * 0.62); } else if (m == "cizgi") square([s * 1.8, s * 0.14], center = true); else if (m == "nokta") for (x = [-1, 0, 1]) translate([x * s * 0.6, 0]) circle(d = s * 0.32); } // Plaka anahtarlık 62 x 32 mm: sol başta halka deliği, sağda iki satır yazı. ZEMIN = 2.0; KABARTMA = 0.8; GENISLIK = 62; YUKSEKLIK = 32; KOSE = 5; KENAR = 1.2; DELIK = 5; module plaka_2d() { yuvarlak_dikdortgen(GENISLIK, YUKSEKLIK, KOSE); } module zemin() { color(zeminRenk) difference() { linear_extrude(ZEMIN) plaka_2d(); translate([-GENISLIK / 2 + 8, 0, -0.01]) cylinder(h = ZEMIN + 0.02, d = DELIK); } } module kabartma(ek = 0) { color(kabartmaRenk) linear_extrude(KABARTMA + ek) { // kabartma dış çizgisi zeminin dış duvarıyla çakışmasın diye 0,02 mm içeride difference() { offset(delta = -0.02) plaka_2d(); offset(delta = -KENAR) plaka_2d(); } translate([-GENISLIK / 2 + 8, 0]) difference() { circle(d = DELIK + 4.4); circle(d = DELIK + 0.04); } translate([6, 5]) yazi(satir1, 8, 40); if (motif == "yok") translate([6, -3]) square([36, 0.7], center = true); else translate([-9, -3]) motif2d(motif, 3.6); translate([6, -8]) yazi(satir2, 4.2, 40); } } // 0,01 mm gömme: zemin ve kabartma gerçek bir birleşim olur (yüzeyleri sadece değen iki cisim "kapalı gövde" sayılmaz) module tum() { zemin(); translate([0, 0, ZEMIN - 0.01]) kabartma(0.01); } if (parca == "zemin") zemin(); else if (parca == "kabartma") kabartma(); else tum();