OpenSCAD - operacje dodawania, odejmowania i części wspólnej na obiektach 2W i 3W

Autor podstrony: Krzysztof Zajączkowski

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

Operacje dodawania dwóch obiektów

Dodawanie jest operacją łączenia dwóch obiektów płaskich 2W lub przestrzennych 3W w jeden obiekt. Poniżej zamieszczam przykłady dla obiektów 2W jak i 3W za pomocą funkcji union.

a)OpenSCAD - wynik dodawania kilku obiektów 2W za pomocą funkcji unionb)OpenSCAD - wynik dodawania kilku obiektów bryłowych za pomocą funkcji union
Rys. 1

OpenSCAD - przykłady użycia funkcji union:

  1. dodawanie obiektów 2W:

    union(){ square([4, 2]); translate([2, 0, 0]) square([2, 4]); circle(d = 1, $fn = 100); }
  2. dodawanie obiektów 3W:

    points = [ [0, 0, 0], // 0 [4, 0, 0], // 1 [4, 4, 0], // 2 [2, 4, 0], // 3 [2, 2, 0], // 4 [0, 2, 0], // 5 [1, 1, 1], // 6 [3, 1, 1], // 7 [3, 3, 1], // 8 ]; surfaces = [ [0, 1, 2 , 3, 4, 5], [0, 1, 7, 6], [1, 2, 8, 7], [2, 3, 8], [3, 8, 7, 4], [4, 7, 6, 5], [5, 6, 0] ]; union(){ translate([0, 0, 1]) polyhedron( points, surfaces); linear_extrude(height = 1) polygon([ [0, 0], // 0 [4, 0], // 1 [4, 4], // 2 [2, 4], // 3 [2, 2], // 4 [0, 2] // 5 ]); cylinder(d = 1, h = 2, $fn = 100); translate([0, 0, 2]) cylinder(r1 = 0.5, r2 = 0, h = 1, $fn = 100); }

Operacja odejmowania

Odejmowanie wielu obiektów od jednego umożliwia funkcja difference. Poniżej zamieszczam przykład użycia tejże funkcji na obiketach 2W i 3W.

OpenSCAD - operacja odejmowania na obiektach 2W za pomocą funkcji differenceOpenSCAD - operacja odejmowania na obiektach 3W za pomocą funkcji difference
Rys. 2

Przykłady wykorzystania funkcji difference na obiektach:

  1. dwuwymiarowych

    difference(){ union(){ square([4, 2]); translate([2, 0, 0]) square([2, 4]); circle(d = 1, $fn = 100); } union(){ translate([0.1, 0.1, 0]) square([3.8, 1.8]); translate([2.1, 0.1, 0]) square([1.8, 3.8]); circle(d = 0.8, $fn = 100); } }
  2. trójwymiarowych

    points = [ [0, 0, 0], // 0 [4, 0, 0], // 1 [4, 4, 0], // 2 [2, 4, 0], // 3 [2, 2, 0], // 4 [0, 2, 0], // 5 [1, 1, 1], // 6 [3, 1, 1], // 7 [3, 3, 1], // 8 ]; surfaces = [ [0, 1, 2 , 3, 4, 5], [0, 1, 7, 6], [1, 2, 8, 7], [2, 3, 8], [3, 8, 7, 4], [4, 7, 6, 5], [5, 6, 0] ]; difference(){ union(){ translate([0, 0, 1]) polyhedron( points, surfaces); linear_extrude(height = 1) polygon([ [0, 0], // 0 [4, 0], // 1 [4, 4], // 2 [2, 4], // 3 [2, 2], // 4 [0, 2] // 5 ]); cylinder(d = 1, h = 2, $fn = 100); translate([0, 0, 2]) cylinder(r1 = 0.5, r2 = 0, h = 1, $fn = 100); } translate([1.8, -0.05, 0]) cube([0.25, 0.1, 0.5]); translate([0.8, -0.05, 0.2]) cube([0.25, 0.1, 0.3]); translate([1.3, -0.05, 0.2]) cube([0.25, 0.1, 0.3]); translate([2.3, -0.05, 0.2]) cube([0.25, 0.1, 0.3]); translate([2.8, -0.05, 0.2]) cube([0.25, 0.1, 0.3]); }

Wyznaczanie części wspólnej obiektów 2W i 3W

Za pomocą funkcji intersection możliwe jest obliczenie części wspólnej dwóch obiektów 2W lub 3W. Poniżej zamieszczam przykłady użycia tejże funkcji.

a)OpenSCAD - część wspólna dwóch obiektów 2Wb)OpenSCAD - część wspólna dwóch obiektów 3W
Rys. 3
OpenSCAD - przykłady wykorzystania funkcji intersection:
  1. dla obiektów 2W

    intersection(){ square([100, 50], center = true); circle(r = 50); }
  2. dla obiektów 3W

    intersection(){ cube([100, 50,50], center = true); sphere(r = 50); }