From b8ba9e6e64856a88180145eb46f7c14ac0d03a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Paluch?= Date: Sun, 23 Nov 2025 00:01:52 +0100 Subject: [PATCH] =?UTF-8?q?Teraz=20b=C4=99d=C4=99=20robi=C5=82=20z=20zatrz?= =?UTF-8?q?askami?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/orange.cpython-312.pyc | Bin 7973 -> 6965 bytes orange.py | 184 ++++++++++++----------------- orange_copy.py | 140 ++++++++++++++++++++++ 3 files changed, 216 insertions(+), 108 deletions(-) create mode 100644 orange_copy.py diff --git a/__pycache__/orange.cpython-312.pyc b/__pycache__/orange.cpython-312.pyc index 0b7c5fa115a78224aa436e8f43356180523b09fc..b1a9c28821ba4c389bb8b95b9bb7378f63fab926 100644 GIT binary patch literal 6965 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 V)=L#+_g;Fb7VCd6B72nbe*((&FKYk* diff --git a/orange.py b/orange.py index 755cbd8..ec9816f 100644 --- a/orange.py +++ b/orange.py @@ -5,132 +5,100 @@ from ocp_vscode import * orange = import_step("./OrangePi-Box.step") orange = orange.rotate(Axis.X, -90).move(Location((0, 0, 37))) +# (Twoje parametry pozostają bez zmian) dlugosc = 112.80 szerokosc = 87.80 wysokosc = 54 scianka = 3 +# --- Parametry otworów (skrócone dla czytelności kodu, wartości te same) --- +dl1o, sz1o, offset_x1, offset_y1 = 17.84, 11.68, 8.931, 18.295 +dl2o, sz2o, offset_x2, offset_y2 = 24.103, 22.007, 27.894, 19.047 +dl3o, sz3o, offset_x3, offset_y3 = 6.20, 8.40, 55.740, 14.770 +dl4o, sz4o, offset_x4, offset_y4 = 26.577, 19.737, 70.481, 23.208 +dl5o, sz5o, offset_x5, offset_y5 = 15.400, 20.400, 8.910, 16.720 +dl6o, sz6o, offset_x6, offset_y6 = 10.200, 19.600, 27.160, 15.620 +dl7o, sz7o, offset_x7, offset_y7 = 43.200, 20.200, 63.660, 17.820 -# 1 otworek - -dl1o = 17.84 -sz1o = 11.68 -offset_x1 = 8.931 -offset_y1 = 18.295 - -# 2 otworek -dl2o = 24.103 -sz2o = 22.007 -offset_x2 = 27.894 -offset_y2 = 19.047 - -# 3 otworek - -dl3o = 6.20 -sz3o = 8.40 -offset_x3 = 55.740 -offset_y3 = 14.770 - -# 4 otworek - -dl4o = 26.577 -sz4o = 19.737 - -offset_x4 = 70.481 -offset_y4 = 23.208 - -# 5 otworek -dl5o = 15.400 -sz5o = 20.400 - -offset_x5 = 8.910 -offset_y5 = 16.720 - -# otworek 6 -dl6o = 10.200 -sz6o = 19.600 - -offset_x6 = 27.160 -offset_y6 = 15.620 - -# otworek 7 -dl7o = 43.200 -sz7o = 20.200 - -offset_x7 = 63.660 -offset_y7 = 17.820 - -# mini_uchwytik -mini_udl = 10 -mini_usz = 8.500 -mini_ugr = 4 - -# wyciecie_mini -wyc_dl = 3 -wyc_sz = 3 -wyc_gr = 4.50 - -# podstawa_uchwyciku -pods_dl = 12.820 -pods_sz = 13.400 -pods_gr = 1.7 -offset_podstawy = 1.410 -przesuniecie_uchwyciku = 17.607 +# Parametry uchwytu +mini_udl, mini_usz, mini_ugr = 10, 8.500, 4 +wyc_dl, wyc_sz, wyc_gr = 3, 3, 4.50 +pods_dl, pods_sz, pods_gr = 12.820, 13.400, 1.7 +offset_podstawy, przesuniecie_uchwyciku = 1.410, 17.080 with BuildPart() as box: + # --- Główna puszka --- with BuildSketch() as s1: Rectangle(dlugosc, szerokosc) extrude(amount=wysokosc) offset(amount=-scianka, openings=box.faces().sort_by(Axis.Z)[-1]) + + # --- Wycinanie otworów (Twoja logika, zgrupowana dla wydajności) --- front = box.faces().sort_by(Axis.Y)[0] - front_left_edge_vertex = box.faces().sort_by(Axis.Y)[0].edges().filter_by(Axis.Z).sort_by(Axis.X)[0].vertices()[0] - with BuildSketch(front) as s2: - with Locations((front_left_edge_vertex.X + offset_x1, -offset_y1)): - Rectangle(dl1o, sz1o, align=(Align.MIN, Align.MIN, Align.CENTER)) - extrude(amount=-scianka, mode=Mode.SUBTRACT) - with BuildSketch(front) as s3: - with Locations((front_left_edge_vertex.X + offset_x2, -offset_y2)): - Rectangle(dl2o, sz2o, align=(Align.MIN, Align.MIN, Align.CENTER)) - extrude(amount=-scianka, mode=Mode.SUBTRACT) - with BuildSketch(front) as s4: - with Locations((front_left_edge_vertex.X + offset_x3, -offset_y3)): - Rectangle(dl3o, sz3o, align=(Align.MIN, Align.MIN, Align.CENTER)) - extrude(amount=-scianka, mode=Mode.SUBTRACT) - with BuildSketch(front) as s5: - with Locations((front_left_edge_vertex.X + offset_x4, -offset_y4)): - Rectangle(dl4o, sz4o, align=(Align.MIN, Align.MIN, Align.CENTER)) + # Punkt odniesienia frontu + v_front = front.edges().filter_by(Axis.Z).sort_by(Axis.X)[0].vertices()[0] + + with BuildSketch(front): + with Locations((v_front.X + offset_x1, -offset_y1)): Rectangle(dl1o, sz1o, align=(Align.MIN, Align.MIN, Align.CENTER)) + with Locations((v_front.X + offset_x2, -offset_y2)): Rectangle(dl2o, sz2o, align=(Align.MIN, Align.MIN, Align.CENTER)) + with Locations((v_front.X + offset_x3, -offset_y3)): Rectangle(dl3o, sz3o, align=(Align.MIN, Align.MIN, Align.CENTER)) + with Locations((v_front.X + offset_x4, -offset_y4)): Rectangle(dl4o, sz4o, align=(Align.MIN, Align.MIN, Align.CENTER)) extrude(amount=-scianka, mode=Mode.SUBTRACT) + back = box.faces().sort_by(Axis.Y)[-1] - back_left_edge_vertex = box.faces().sort_by(Axis.Y)[-1].edges().filter_by(Axis.Z).sort_by(Axis.X)[-1].vertices()[0] - with BuildSketch(back) as s6: - with Locations((back_left_edge_vertex.X - offset_x5, + offset_y5)): - Rectangle(dl5o, sz5o, align=(Align.MAX, Align.MAX)) - extrude(amount=-scianka, mode=Mode.SUBTRACT) - with BuildSketch(back) as s7: - with Locations((back_left_edge_vertex.X - offset_x6 - 12.450, + offset_y6)): - with GridLocations(12.450, 0, 3, 1): - Rectangle(dl6o, sz6o, align=(Align.MAX, Align.MAX)) - extrude(amount=-scianka, mode=Mode.SUBTRACT) - with BuildSketch(back) as s8: - with Locations((back_left_edge_vertex.X - offset_x7, + offset_y7)): - Rectangle(dl7o, sz7o, align=(Align.MAX, Align.MAX)) + # Punkt odniesienia tyłu + v_back = back.edges().filter_by(Axis.Z).sort_by(Axis.X)[-1].vertices()[0] + + with BuildSketch(back): + with Locations((v_back.X - offset_x5, + offset_y5)): Rectangle(dl5o, sz5o, align=(Align.MAX, Align.MAX)) + with Locations((v_back.X - offset_x6 - 12.450, + offset_y6)): + with GridLocations(12.450, 0, 3, 1): Rectangle(dl6o, sz6o, align=(Align.MAX, Align.MAX)) + with Locations((v_back.X - offset_x7, + offset_y7)): Rectangle(dl7o, sz7o, align=(Align.MAX, Align.MAX)) extrude(amount=-scianka, mode=Mode.SUBTRACT) + + # --- ZAGNIEŻDŻONY BUILD PART NA UCHWYTY --- + # Pobieramy ścianę boczną głównego pudełka jako referencję bok = box.faces().sort_by(Axis.X)[-1] - with BuildSketch(bok) as uchwycik: - Rectangle(mini_udl, mini_usz) - u1 = extrude(amount=mini_ugr) - u1_face = u1.faces().sort_by(Axis.Y)[0] - u2_face = u1.faces().sort_by(Axis.X)[-1] - with BuildSketch(u1_face) as wyc1: - with Locations((-2.750, -0.5)): - Rectangle(wyc_dl, wyc_sz) + + # Tworzymy osobną, "wewnętrzną" przestrzeń tylko dla uchwytów + with BuildPart() as uchwyty_komplet: + + # 1. Budujemy prawy uchwyt (tak jak w Twoim kodzie) + with BuildSketch(bok) as szkic_uchwytu: + with Locations((-przesuniecie_uchwyciku, 0)): + Rectangle(mini_udl, mini_usz) + + # Zmienilem nazwe zmiennej z 'u1' na 'baza', żeby nie psuć kontekstu + baza = extrude(amount=mini_ugr) + + # Operacje na uchwycie + u1_face = baza.faces().sort_by(Axis.Y)[0] + u2_face = baza.faces().sort_by(Axis.X)[-1] + + with BuildSketch(u1_face): + with Locations((-2.750, -0.5)): + Rectangle(wyc_dl, wyc_sz) + mirror(about=Plane.YZ) # Lustro szkicu wycięcia + extrude(amount=-wyc_gr, mode=Mode.SUBTRACT) + + with BuildSketch(u2_face): + with Locations((-offset_podstawy, 0)): + Rectangle(pods_dl, pods_sz) + extrude(amount=pods_gr) + + # 2. KLUCZOWY MOMENT: Mirror całego uchwytu wewnątrz tej pod-przestrzeni + # Ponieważ jesteśmy w 'uchwyty_komplet', to polecenie skopiuje wszystko co tu stworzyliśmy mirror(about=Plane.YZ) - extrude(amount=-wyc_gr, mode=Mode.SUBTRACT) - with BuildSketch(u2_face) as uchwycik_podstawa: - with Locations((-offset_podstawy, 0)): - Rectangle(pods_dl, pods_sz) - extrude(amount=pods_gr) + + # 3. Dodajemy gotowy zestaw uchwytów (prawy + lewy) do głównego pudełka + # add(uchwyty_komplet.part) + # with BuildPart() as zatrzask: + # z = box.faces().filter_by(Axis.Y).sort_by(Axis.Y)[-2] + # with BuildSketch(z): + # Rectangle(20, 20) + # extrude(amount=50) +# # Wizualizacja # show_all() -show(box, orange, uchwycik_podstawa) +show(box, orange) diff --git a/orange_copy.py b/orange_copy.py new file mode 100644 index 0000000..822ece2 --- /dev/null +++ b/orange_copy.py @@ -0,0 +1,140 @@ +from build123d import * +from ocp_vscode import * + + +orange = import_step("./OrangePi-Box.step") +orange = orange.rotate(Axis.X, -90).move(Location((0, 0, 37))) + +dlugosc = 112.80 +szerokosc = 87.80 +wysokosc = 54 +scianka = 3 + + +# 1 otworek + +dl1o = 17.84 +sz1o = 11.68 +offset_x1 = 8.931 +offset_y1 = 18.295 + +# 2 otworek +dl2o = 24.103 +sz2o = 22.007 +offset_x2 = 27.894 +offset_y2 = 19.047 + +# 3 otworek + +dl3o = 6.20 +sz3o = 8.40 +offset_x3 = 55.740 +offset_y3 = 14.770 + +# 4 otworek + +dl4o = 26.577 +sz4o = 19.737 + +offset_x4 = 70.481 +offset_y4 = 23.208 + +# 5 otworek +dl5o = 15.400 +sz5o = 20.400 + +offset_x5 = 8.910 +offset_y5 = 16.720 + +# otworek 6 +dl6o = 10.200 +sz6o = 19.600 + +offset_x6 = 27.160 +offset_y6 = 15.620 + +# otworek 7 +dl7o = 43.200 +sz7o = 20.200 + +offset_x7 = 63.660 +offset_y7 = 17.820 + +# mini_uchwytik +mini_udl = 10 +mini_usz = 8.500 +mini_ugr = 4 + +# wyciecie_mini +wyc_dl = 3 +wyc_sz = 3 +wyc_gr = 4.50 + +# podstawa_uchwyciku +pods_dl = 12.820 +pods_sz = 13.400 +pods_gr = 1.7 +offset_podstawy = 1.410 +przesuniecie_uchwyciku = 17.080 + +with BuildPart() as box: + with BuildSketch() as s1: + Rectangle(dlugosc, szerokosc) + extrude(amount=wysokosc) + offset(amount=-scianka, openings=box.faces().sort_by(Axis.Z)[-1]) + front = box.faces().sort_by(Axis.Y)[0] + front_left_edge_vertex = box.faces().sort_by(Axis.Y)[0].edges().filter_by(Axis.Z).sort_by(Axis.X)[0].vertices()[0] + with BuildSketch(front) as s2: + with Locations((front_left_edge_vertex.X + offset_x1, -offset_y1)): + Rectangle(dl1o, sz1o, align=(Align.MIN, Align.MIN, Align.CENTER)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + with BuildSketch(front) as s3: + with Locations((front_left_edge_vertex.X + offset_x2, -offset_y2)): + Rectangle(dl2o, sz2o, align=(Align.MIN, Align.MIN, Align.CENTER)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + with BuildSketch(front) as s4: + with Locations((front_left_edge_vertex.X + offset_x3, -offset_y3)): + Rectangle(dl3o, sz3o, align=(Align.MIN, Align.MIN, Align.CENTER)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + with BuildSketch(front) as s5: + with Locations((front_left_edge_vertex.X + offset_x4, -offset_y4)): + Rectangle(dl4o, sz4o, align=(Align.MIN, Align.MIN, Align.CENTER)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + back = box.faces().sort_by(Axis.Y)[-1] + back_left_edge_vertex = box.faces().sort_by(Axis.Y)[-1].edges().filter_by(Axis.Z).sort_by(Axis.X)[-1].vertices()[0] + with BuildSketch(back) as s6: + with Locations((back_left_edge_vertex.X - offset_x5, + offset_y5)): + Rectangle(dl5o, sz5o, align=(Align.MAX, Align.MAX)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + with BuildSketch(back) as s7: + with Locations((back_left_edge_vertex.X - offset_x6 - 12.450, + offset_y6)): + with GridLocations(12.450, 0, 3, 1): + Rectangle(dl6o, sz6o, align=(Align.MAX, Align.MAX)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + with BuildSketch(back) as s8: + with Locations((back_left_edge_vertex.X - offset_x7, + offset_y7)): + Rectangle(dl7o, sz7o, align=(Align.MAX, Align.MAX)) + extrude(amount=-scianka, mode=Mode.SUBTRACT) + bok = box.faces().sort_by(Axis.X)[-1] + + with BuildPart() as u1: + with BuildSketch(bok) as uchwycik: + with Locations((-przesuniecie_uchwyciku, 0)): + Rectangle(mini_udl, mini_usz) + u1 = extrude(amount=mini_ugr) + u1_face = u1.faces().sort_by(Axis.Y)[0] + u2_face = u1.faces().sort_by(Axis.X)[-1] + with BuildSketch(u1_face) as wyc1: + with Locations((-2.750, -0.5)): + Rectangle(wyc_dl, wyc_sz) + mirror(about=Plane.YZ) + extrude(amount=-wyc_gr, mode=Mode.SUBTRACT) + with BuildSketch(u2_face) as uchwycik_podstawa: + with Locations((-offset_podstawy, 0)): + Rectangle(pods_dl, pods_sz) + extrude(amount=pods_gr) + mirror(about=Plane.YZ) + + +# show_all() +show(box)