OpenSCAD - tworzenie własnego modułu rysującego obiekty parametryczne

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 1806 razy

OpenSCAD pozwala na tworzenie własnych modułów, których konstrukcja umożliwia tworzenie obiektów 2W czy też 3W. Moduły w odróżnieniu od funkcji nie mogą zwracać żadnych wartości liczbowych, zaś funkcje nie mogą tworzyć żadnych obiektów a jedynie generować dane niezbędne do ich utworzenia.

Konstrukcja modułu składa się z słowa kluczowego module, następującej po nim nazwy modułu, listy parametrów i ciała, gdzie umieszczane są instrukcje. Oto przykładowy kod takiego modułu, który generuje model łożyska kulkowego:

module bearing(dz = 120, dw = 60, n = 8, $fn = $fn){ h = (dz - dw) / 2; g = 2; rk = h / 3; ray = (dz + dw) / 4; for(angle = [0 : 360 / n : 360]){ rotate([0, 0, angle]) translate([ray, 0, 0]){ sphere(r = rk); } } difference(){ difference(){ union(){ cylinder(r = ray + rk / 2, h = 5, center = true); for(angle = [0 : 360 / n : 360]){ rotate([0, 0, angle]) translate([ray, 0, 0]){ difference(){ sphere(r = rk + g); sphere(r = rk); } } } } // I cut inside part cylinder(r = ray - rk / 2, h = 3 * rk, center = true); } // I cut outside part difference(){ cylinder(r = (ray + rk * 2) * 2, rk * 4, center = true); cylinder( r = ray + rk / 2, h = rk * 5, center = true); } } difference(){ cylinder(r = ray - rk / 1.5, h = h, center = true); cylinder(r = dw / 2, h = h + 1, center = true); rotate_extrude(angle = 360) translate([ray, 0, 0]) circle(r = rk, center = true); } difference(){ cylinder(r = dz / 2, h = h, center = true); cylinder(r = ray + rk / 1.5, h = h + 1, center = true); rotate_extrude(angle = 360) translate([ray, 0, 0]) circle(r = rk, center = true); } }

Jak widać, moduł bearing (łożysko) przyjmuje kilka następujących parametrów:

Poniżej można zobaczyć przykładowe łożysko wygenerowane tym skryptem.

OpenSCAD - łożysko kulkowe wygenerowane za pomocą modułu
Rys. 1

OpenSCAD - łożysko kulkowe wygenerowane za pomocą modułu

rotate([90, 0, 0]) color([.8, .8 , .8]) bearing(120, 60, 8);