251 lines
9.8 KiB
Plaintext
251 lines
9.8 KiB
Plaintext
{
|
||
"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": [
|
||
"<cad_viewer_widget.widget.CadViewer at 0x1552b223e6c0>"
|
||
]
|
||
},
|
||
"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
|
||
}
|