{ "cells": [ { "cell_type": "code", "execution_count": 3, "id": "d3c7da8b-6cb5-4f1c-8f89-f7f07742c08b", "metadata": {}, "outputs": [], "source": [ "from snippets_panel import show_snippet_panel" ] }, { "cell_type": "code", "execution_count": 6, "id": "6b9e7de0-66d6-49cd-8935-c8dd3fcca18d", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d03f993365f64ff7bbbfb3b47955476f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dropdown(description='Snippet:', options=('-- wybierz snippet --', '📥 Start', '🧲 Import STEP', '🖥️ view'), val…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_snippet_panel()" ] }, { "cell_type": "code", "execution_count": 7, "id": "2a686127-10fb-46ca-a1bf-463060dbadf5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting auto display for cadquery Workplane and Shape\n", "Overwriting auto display for build123d BuildPart, BuildSketch, BuildLine, ShapeList\n" ] } ], "source": [ "\n", "from build123d import *\n", "from jupyter_cadquery import show, show_all,open_viewer, show_clear\n", "from IPython.display import display\n", "import ipywidgets as widgets" ] }, { "cell_type": "code", "execution_count": 18, "id": "b862c8ca-ecc7-4ea8-a26d-1cf2f5a08f23", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6f1460081e7842b195ccebf7c1f0306d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Button(description='Viewer dół', style=ButtonStyle()), Button(description='Viewer prawo', style…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " \n", "cv = None # viewer globalny\n", "\n", "def open_bottom(b):\n", " global cv\n", " print(\"Otwieram viewer (split-bottom)\")\n", " cv = open_viewer(\"Build123d\", anchor=\"split-bottom\")\n", "\n", "def open_right(b):\n", " global cv\n", " print(\"Otwieram viewer (right)\")\n", " cv = open_viewer(\"Build123d\", anchor=\"right\")\n", "\n", "# Przycisk 1 – bottom\n", "btn_bottom = widgets.Button(description=\"Viewer dół\")\n", "btn_bottom.on_click(open_bottom)\n", "\n", "# Przycisk 2 – right\n", "btn_right = widgets.Button(description=\"Viewer prawo\")\n", "btn_right.on_click(open_right)\n", "\n", "# Wyświetl przyciski\n", "display(widgets.HBox([btn_bottom, btn_right]))\n", " " ] }, { "cell_type": "code", "execution_count": 19, "id": "530b84eb-9792-4117-bf83-cda7ab89c52e", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "No objects to create a hull", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[19], line 34\u001b[0m\n\u001b[1;32m 31\u001b[0m Circle(pin_diameter \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 32\u001b[0m \u001b[38;5;66;03m# Przesunięcie okręgu do odpowiedniej pozycji na skrzydle\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;66;03m# Pozycja jest na środku długości, przy krawędzi szerokości\u001b[39;00m\n\u001b[0;32m---> 34\u001b[0m \u001b[43mmake_face\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 35\u001b[0m s\u001b[38;5;241m.\u001b[39mvertices()\u001b[38;5;241m.\u001b[39mfilter_by_position(Axis\u001b[38;5;241m.\u001b[39mX, hinge_leaf_width \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m, tolerance\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.1\u001b[39m)\u001b[38;5;241m.\u001b[39mmove(\n\u001b[1;32m 36\u001b[0m Location((hinge_leaf_width \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0\u001b[39m))\n\u001b[1;32m 37\u001b[0m )\n\u001b[1;32m 38\u001b[0m \u001b[38;5;66;03m# Wycięcie otworu przez całą grubość skrzydła\u001b[39;00m\n", "File \u001b[0;32m/usr/local/lib/python3.12/site-packages/build123d/operations_sketch.py:217\u001b[0m, in \u001b[0;36mmake_face\u001b[0;34m(edges, mode)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo objects to create a face\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m outer_edges:\n\u001b[0;32m--> 217\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo objects to create a hull\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 218\u001b[0m validate_inputs(context, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmake_face\u001b[39m\u001b[38;5;124m\"\u001b[39m, outer_edges)\n\u001b[1;32m 220\u001b[0m pending_face \u001b[38;5;241m=\u001b[39m Face(Wire\u001b[38;5;241m.\u001b[39mcombine(outer_edges)[\u001b[38;5;241m0\u001b[39m])\n", "\u001b[0;31mValueError\u001b[0m: No objects to create a hull" ] } ], "source": [ "# Importowanie niezbędnych modułów z build123d\n", "from build123d import *\n", "\n", "# Definicja wymiarów zawiasu\n", "# Szerokość każdej \"skrzydła\" zawiasu (części mocowanej do drzwi/ramy)\n", "hinge_leaf_width = 30\n", "# Długość każdej skrzydła\n", "hinge_leaf_length = 60\n", "# Grubość skrzydła\n", "hinge_leaf_thickness = 3\n", "# Średnica trzpienia (oś obrotu zawiasu)\n", "pin_diameter = 4\n", "# Długość trzpienia (nieco dłuższy niż całkowita długość segmentów zawiasu)\n", "pin_length = hinge_leaf_length * 1.05\n", "# Promień zaokrąglenia na krawędziach\n", "radius = 1\n", "\n", "# Tworzenie pierwszej \"skrzydła\" zawiasu\n", "with BuildPart() as hinge_leaf1:\n", " # Szkic prostokąta, który będzie podstawą skrzydła\n", " with BuildSketch() as s:\n", " Rectangle(hinge_leaf_width, hinge_leaf_length)\n", " # Zaokrąglenie rogów prostokąta\n", " fillet(s.vertices(), radius)\n", " # Wyciągnięcie szkicu, aby nadać mu grubość\n", " extrude(amount=hinge_leaf_thickness)\n", "\n", " # Tworzenie otworu na trzpień w pierwszej skrzydle\n", " with BuildSketch(Plane.XZ) as s:\n", " # Rysowanie okręgu, który będzie otworem\n", " Circle(pin_diameter / 2)\n", " # Przesunięcie okręgu do odpowiedniej pozycji na skrzydle\n", " # Pozycja jest na środku długości, przy krawędzi szerokości\n", " make_face()\n", " s.vertices().filter_by_position(Axis.X, hinge_leaf_width / 2, tolerance=0.1).move(\n", " Location((hinge_leaf_width / 2, 0, 0))\n", " )\n", " # Wycięcie otworu przez całą grubość skrzydła\n", " extrude(amount=-hinge_leaf_thickness, mode=Mode.SUBTRACT)\n", "\n", "# Tworzenie drugiej \"skrzydła\" zawiasu\n", "# Jest identyczna jak pierwsza, więc możemy ją skopiować\n", "hinge_leaf2 = hinge_leaf1.part.copy()\n", "\n", "# Tworzenie trzpienia zawiasu\n", "with BuildPart() as pin:\n", " # Szkic okręgu, który będzie podstawą trzpienia\n", " with BuildSketch() as s:\n", " Circle(pin_diameter / 2)\n", " # Wyciągnięcie szkicu, aby nadać mu długość\n", " extrude(amount=pin_length)\n", "\n", "# Montaż zawiasu\n", "with BuildPart() as hinge_assembly:\n", " # Dodanie pierwszej skrzydła do złożenia\n", " add(hinge_leaf1.part)\n", "\n", " # Dodanie drugiej skrzydła\n", " # Przesunięcie jej tak, aby była obok pierwszej, ale z odstępem na trzpień\n", " # i obrócona o 180 stopni wokół osi Y, aby symulować złożenie zawiasu\n", " add(hinge_leaf2, Location((0, 0, hinge_leaf_thickness + pin_diameter), (0, 1, 0), 180))\n", "\n", " # Dodanie trzpienia\n", " # Pozycjonowanie trzpienia w otworach skrzydeł\n", " add(pin.part, Location((hinge_leaf_width / 2, 0, (hinge_leaf_thickness + pin_diameter) / 2)))\n", "\n", "# Opcjonalnie: wyświetlenie modelu (jeśli używasz środowiska z wizualizacją)\n", "# show(hinge_assembly) # Odkomentuj, jeśli chcesz wizualizować w środowisku build123d\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "ee62118f-0893-4002-ac93-4e7b017ab335", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show(my_part) # Powinien pokazać złożenie my_part" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }