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

Stronę tą wyświetlono już: 38 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:

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

    Listing 2
    1. points = [
    2. [0, 0, 0], // 0
    3. [4, 0, 0], // 1
    4. [4, 4, 0], // 2
    5. [2, 4, 0], // 3
    6. [2, 2, 0], // 4
    7. [0, 2, 0], // 5
    8. [1, 1, 1], // 6
    9. [3, 1, 1], // 7
    10. [3, 3, 1], // 8
    11. ];
    12. surfaces = [
    13. [0, 1, 2 , 3, 4, 5],
    14. [0, 1, 7, 6],
    15. [1, 2, 8, 7],
    16. [2, 3, 8],
    17. [3, 8, 7, 4],
    18. [4, 7, 6, 5],
    19. [5, 6, 0]
    20. ];
    21. union(){
    22. translate([0, 0, 1])
    23. polyhedron( points, surfaces);
    24. linear_extrude(height = 1)
    25. polygon([
    26. [0, 0], // 0
    27. [4, 0], // 1
    28. [4, 4], // 2
    29. [2, 4], // 3
    30. [2, 2], // 4
    31. [0, 2] // 5
    32. ]);
    33. cylinder(d = 1, h = 2, $fn = 100);
    34. translate([0, 0, 2])
    35. cylinder(r1 = 0.5, r2 = 0, h = 1, $fn = 100);
    36. }

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

    Listing 3
    1. difference(){
    2. union(){
    3. square([4, 2]);
    4. translate([2, 0, 0])
    5. square([2, 4]);
    6. circle(d = 1, $fn = 100);
    7. }
    8. union(){
    9. translate([0.1, 0.1, 0])
    10. square([3.8, 1.8]);
    11. translate([2.1, 0.1, 0])
    12. square([1.8, 3.8]);
    13. circle(d = 0.8, $fn = 100);
    14. }
    15. }
  2. trójwymiarowych

    Listing 4
    1. points = [
    2. [0, 0, 0], // 0
    3. [4, 0, 0], // 1
    4. [4, 4, 0], // 2
    5. [2, 4, 0], // 3
    6. [2, 2, 0], // 4
    7. [0, 2, 0], // 5
    8. [1, 1, 1], // 6
    9. [3, 1, 1], // 7
    10. [3, 3, 1], // 8
    11. ];
    12. surfaces = [
    13. [0, 1, 2 , 3, 4, 5],
    14. [0, 1, 7, 6],
    15. [1, 2, 8, 7],
    16. [2, 3, 8],
    17. [3, 8, 7, 4],
    18. [4, 7, 6, 5],
    19. [5, 6, 0]
    20. ];
    21. difference(){
    22. union(){
    23. translate([0, 0, 1])
    24. polyhedron( points, surfaces);
    25. linear_extrude(height = 1)
    26. polygon([
    27. [0, 0], // 0
    28. [4, 0], // 1
    29. [4, 4], // 2
    30. [2, 4], // 3
    31. [2, 2], // 4
    32. [0, 2] // 5
    33. ]);
    34. cylinder(d = 1, h = 2, $fn = 100);
    35. translate([0, 0, 2])
    36. cylinder(r1 = 0.5, r2 = 0, h = 1, $fn = 100);
    37. }
    38. translate([1.8, -0.05, 0])
    39. cube([0.25, 0.1, 0.5]);
    40. translate([0.8, -0.05, 0.2])
    41. cube([0.25, 0.1, 0.3]);
    42. translate([1.3, -0.05, 0.2])
    43. cube([0.25, 0.1, 0.3]);
    44. translate([2.3, -0.05, 0.2])
    45. cube([0.25, 0.1, 0.3]);
    46. translate([2.8, -0.05, 0.2])
    47. cube([0.25, 0.1, 0.3]);
    48. }

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

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

    Listing 6
    1. intersection(){
    2. cube([100, 50,50], center = true);
    3. sphere(r = 50);
    4. }

Komentarze