From 2257d7d3ad501f47822746ab59521ab2f5db69b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Paluch?= Date: Wed, 26 Nov 2025 22:33:11 +0100 Subject: [PATCH] first commit --- README.md | 0 __pycache__/box.cpython-312.pyc | Bin 0 -> 241 bytes __pycache__/ramie.cpython-312.pyc | Bin 0 -> 1651 bytes __pycache__/rigid.cpython-312.pyc | Bin 0 -> 1428 bytes __pycache__/symulacja.cpython-312.pyc | Bin 0 -> 1532 bytes __pycache__/test.cpython-312.pyc | Bin 0 -> 1917 bytes __pycache__/test_hinge.cpython-312.pyc | Bin 0 -> 1057 bytes rigid.py | 27 ++++++++++++++ symulacja.py | 49 +++++++++++++++++++++++++ 9 files changed, 76 insertions(+) create mode 100644 README.md create mode 100644 __pycache__/box.cpython-312.pyc create mode 100644 __pycache__/ramie.cpython-312.pyc create mode 100644 __pycache__/rigid.cpython-312.pyc create mode 100644 __pycache__/symulacja.cpython-312.pyc create mode 100644 __pycache__/test.cpython-312.pyc create mode 100644 __pycache__/test_hinge.cpython-312.pyc create mode 100644 rigid.py create mode 100644 symulacja.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/__pycache__/box.cpython-312.pyc b/__pycache__/box.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebaf34e8fc3a7c9736d34e4847abc05549061ab2 GIT binary patch literal 241 zcmX@j%ge<81Q|~1nL$AMF^B^LOi;#W6(D0eLkdF*V-CYwCPoO05z1o9VajEWVrFEh zWY%PP3DTm;c#BaBNU(Zj=B20lX|mknOe)RHNij4sPPxUEpIi`MR-Bxll6s3TBe5u@ zJh3QMF9W2qhy|#5CBtWs8NamkGxBp&^$QYnG7Sxl^qpV^=;tMtW+%pH6*oXCP%4@j;uvTGQHdIrU@0L@Tcy2(9<0SPg>`I?wYwB( z4y9_Pa;PdxJ(OdQK~ROB+A9s5awsc@Sd7|3)RS*UIaunhHhU2?-2{>H z0uw^&hSuhod!7H*StdUIea+l=x3tgC(;Y7)H`qFYf=Jv59o5Fh|C}5&lXo_gceXPf zCJ&+Tf62+by(*W9&Fq`cCv9OA=AE} zE|ur7Jv-;oNRc4dvlguO5h~6)c!>%QMjvy1hUAFj(y)UI2s`O4u?wCXKS8ybc{_)O zN8UnICz)dUGdDw+fcv7_1mFA6ay%NeoP4?|#SRrF$Rd?KwKCYHic1_XJ+nl`cNcA! z!fC2{q?qQLRC|wPEYBtdm+H6dSsP99u2d}YiUO-h!+GKn=UHL(>Qc_;{%CN9cpk~O z>PSr$m0PB%o*{(-&Uk5$tbwP@C}<>-b0m+GMJs0y50509zImo(!J5Bg9i~k>R^Gvp~{n542vN5tb;v1vO*A7&mM@yH=+NlE&kcRfdvC=|0 z+-F28K-Fza3N)xNjo_Lxy zkM>o}e&6gbn`bI!(l?Wv;xF>ga@idF75e7e%Qsrh$IBY;Cnfe(bGK`7Pd&%_Nr`%t zRji!^TCAdW`)c>HR0{zpe-rvLv>WdAL0<(7`e5+h)%#OxQ@dl={BzeIfhlGOO3NRu z^smN#Jh5tQdXK^7`WUlc->}7v{C8Y>k zrZzb)ZT0ArNoA{F7%Q6rS1LvAyfRIEf2w1(n(~sUflJKqRU}k!+(Pp-`eGsMH`?8_%TPWW8&4 z*O=rK2@Xhba8K>gy#>Wc=`ANjnG3#*2R-0CxZe80w(N|AG#G79h7oU8ssh(X}OAs-hxt zZ9xxkgaC+$5e~G28-k}+46+zl@^hT{li&u+!&foHF!F}yfC*4km>)j&UEK%{VVOi% z5#V(wp0z0Aa67WWI^nAr!;pV|ZkHElT74vj!Kws+`wsxnj`|qCh6&)J5vx9ieN1O<5~(*_zv4*H;9g}k@E6YT{UhI775R4 zH8Mxaj%FHE$X?b)*;S?lDjGGLMiyOIsjREEof0kn5{|ch?(XxOXGi=o9v?B`pu;m5 z4$}&lmUc@sC|WIH&7!jHsG6Y@+ot0Cm**HDR8<{fX{t^Y4Kt3ms1b`I4&r>Is|!S@ zu_aS8oRV&qRkzxJS$7yQc>mkFq1mTRT2?XroQKq9n2n#n3sxfNjb$okm1JtFu4S|18CQxp}pHixzn_b=@xCwJs2&d*OfWeYo%vTv4Q*&DvXN{0?EP|^x*8<+`bYi45NoACopIG3@TiZx6cK+J&Xz& NdHY@09!G`A;J>w;YxV#D literal 0 HcmV?d00001 diff --git a/__pycache__/symulacja.cpython-312.pyc b/__pycache__/symulacja.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d7e84326d87f8112572198c649a835587e76011 GIT binary patch literal 1532 zcmaJ>&2Jk;6rb^aZ`bRuBo@Sqs)P#Jq&5yDRH#jHFbB$~S}t`D*2c3mYt~+CciqH7 zLYCl=Lk}(-0yi#5iBgpO4JZdBPL>OpPSs%{l(ZMI2r0flt0$tsq^Wi zHVQospK7j&3m^>~xJmBLU2+#7c-Y@!?t)D?f&YC0j)r(V(xuYk5W@s9tg~TlcIhqY z1}Mzf^agsS`_IYANtdNt95L_5nJ%KikJKy?gSnDbExU0BbEdYgn^ouesI$#N~5un;LXMUc~eacBn#@DWkvxAij8?YvjUiAS-tUNuaV zUU~&#*(y}>51fKU2vi)F*67}cv@a}S@y(iP&}1yVJ8JJ>)>B2~KF|>s$2eAvQpK`e z9pyb$nEO~O=nfVf0_N9in9Xb%4u(0>UUT$3-No{4yG>87$=myW|=e(|Xsda69%iOhcec00D% zj4ife$yOxwm%z^Z>S`NIH^Fq{eiO_Q_E4e^W?(^b literal 0 HcmV?d00001 diff --git a/__pycache__/test.cpython-312.pyc b/__pycache__/test.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fd228086b610184063d0ac221ce0281d1405d33 GIT binary patch literal 1917 zcmbVMO-vg{6rS;VcW2hv3*H7oiV}-Z93zB9QYernDTJ;n(xz3EMuHqH$Gd6l8n5eJ z{%)>{S`HlCUV6orkGRmdOq4Lcr2TQ)RGiz@_=I4;HGDV_o)qhkSO=P!_iX1)BgU99v z4&R#dLeJ=&CO>I+xj?WYTm-|wgiG|5&(ik=K>@D!E_1VB3AUcBzdj-U&k6DT3Gvkv z;%kj~q@%(pMj(L$l>oIW|I$^V-z}){bh}M_^TtBPie-&t#)@z`_AMN2v@VchC$Y4V zh+9b`Q@O-SSynT-!oEbOBEnVPacw6+P$E7bGt-83mp1a}^o*wGVopCZ(n;`xg=AVA zzI;U^l99;97R`jA=>$))@E7r%MSQH@$cm8LN|$M8aXTWV1;-m zmy;%evjp8-NhjGT0_TWyC;3%Un_(OXa*K&K%i0UHy`GB`|HB+L{vU)aBO7DQ=?Hc} zga%|HC5%i)PgpU_AYSv4v9t-^P{N=-7=2{S>(OjHog5y%9CZjVUeQc^;p=#lan#aH zYbd)?M<31`+Co~to@39C{XLl*bgyy{!dIZ{6*#*u073rleia}%4GXvSyyBW?ZK~i| z{rqnnEL<%seYVn9Qu@ovkgW`DSlf%6izQ`rCub`YC46-sK)!1awHG=Hlk0&RN4TO zv@uia`k>?=qcCu24=aV47x)4lk3%()=G8EQA&LNZmeDyIoy+r81fckX|6BjsybXHF zAZ&y12EX05*|sxhU;5|;n54uZpTGau`zLs>Ho}x(;?!%1ajH6W>rHBo+VxsL9Y+sv zsO}7{GKBTUXqpkKn@jY@e!8Xxxu>%9@i_mqdxF}}lnzzkpY?RaMyT_@n*8mF&MA3!ViGR*c2IxXe4NC~ z`~Upu_&BytIORkCW{CD*{4R-ai0S1C^ri6bzv2*y6HQFowKK&`>Ih`PLv^v8YoZFl z{mVC%Yfwk&?zSXKBaV&>qk1J)7q51X+Eb+6BU0^S(rD7i=`W{suGJ~_OI){zJtf}M zr0KfEDqw0>iBDV}^-Hu^v5DvLxI^uoghp+fxb0!V!(&xev;Bg@sO_hfwj9fq4ccd#>6cIWL|m~k51O8g|ovaF*jJzDNK7sCIG6S<;jxi;=1XQp_1H( zE4RRnDk~Re%{nzb9?i+(i>B*y-LYo;ipiB6yUC49bc*8hQZSE~JP%DAi_cvsN*;=g0({fyg0e zW-D^K%5cphBd*+zT&VY4m<gozNOrf3cq^7@_3UXSQ?1=yEhG6o z5l)8YjBh=lr*2>002NK3rLj+Hcrmn?TS9jxM4gseytQ)mS@~u9-Qf5K^}^4nL~X<& zwdX ibJv%SFOPnN?9W31ThMvSiwWsZ4(585SG`*9aQGLoj}gZJ literal 0 HcmV?d00001 diff --git a/rigid.py b/rigid.py new file mode 100644 index 0000000..7f46d6c --- /dev/null +++ b/rigid.py @@ -0,0 +1,27 @@ +import copy +from build123d import * +from bd_warehouse.flange import WeldNeckFlange +from bd_warehouse.pipe import PipeSection +from ocp_vscode import * + +flange_inlet = WeldNeckFlange(nps="10", flange_class=300) +flange_outlet = copy.copy(flange_inlet) + +with BuildPart() as pipe_builder: + # Create the pipe + with BuildLine(): + path = TangentArc((0, 0, 0), (2 * FT, 0, 1 * FT), tangent=(1, 0, 0)) + with BuildSketch(Plane(origin=path @ 0, z_dir=path % 0)): + PipeSection("10", material="stainless", identifier="40S") + sweep() + + # Add the joints + RigidJoint(label="inlet", joint_location=-path.location_at(0)) + RigidJoint(label="outlet", joint_location=path.location_at(1)) + +# # Place the flanges at the ends of the pipe +# pipe_builder.part.joints["inlet"].connect_to(flange_inlet.joints["pipe"]) +# pipe_builder.part.joints["outlet"].connect_to(flange_outlet.joints["pipe"]) + +# # show(pipe_builder, flange_inlet, flange_outlet, render_joints=True) +show(pipe_builder, render_joints=True) diff --git a/symulacja.py b/symulacja.py new file mode 100644 index 0000000..601884f --- /dev/null +++ b/symulacja.py @@ -0,0 +1,49 @@ +from build123d import * +from ocp_vscode import show + +# 1. Importujemy plik STEP +# (Ponieważ nie mam Twojego pliku, symuluję go tutaj jako 'imported_motor') +# imported_motor = import_step("motor_2207.step") + +# --- SYMULACJA IMPORTU (Tylko dla przykładu) --- +with BuildPart() as m: + Cylinder(14, 15) # Dzwonek + with Locations((0,0,-2)): + Cylinder(4, 5) # Ośka wystająca w dół (dziwny silnik, ale niech będzie) +# Załóżmy, że ten silnik jest przesunięty w kosmos w pliku STEP: +imported_motor = m.part.moved(Location((100, 200, 50))) +# ----------------------------------------------- + +# 2. Szukamy miejsca na Jointa (To jest kluczowe przy STEPach!) +# Nie wiemy gdzie on jest (100, 200...), więc szukamy geometrycznie. + +# Np. szukamy największej płaskiej ściany na samym spodzie silnika (podstawa) +# Axis.Z ujemne -> szukamy na dole +base_face = imported_motor.faces().sort_by(Axis.Z)[0] + +# A może szukamy otworu na śrubę? +# Szukamy krawędzi (edges) będących okręgami, o promieniu 2mm (M4) +# screw_hole = imported_motor.edges().filter_by(GeomType.CIRCLE).filter_by(lambda e: e.radius == 2).first() + + +# 3. Naklejamy Jointa na znalezioną ścianę +# WAŻNE: Musimy użyć 'to_part', bo modyfikujemy istniejący obiekt, a nie builder. +imported_motor.joints["mount"] = RigidJoint( + label="mount", + to_part=imported_motor, + joint_location=Location(base_face.center()) # Centrum znalezionej ściany +) + +# --- TERAZ MOŻEMY GO UŻYĆ --- + +# Tworzymy ramię drona +with BuildPart() as arm_builder: + Box(100, 30, 4) + RigidJoint("motor_pad", joint_location=Location((20, 0, 0))) +arm = arm_builder.part + +# Łączymy! +# Silnik (który był w kosmosie: 100, 200, 50) przyleci idealnie na ramię. +imported_motor.joints["mount"].connect_to(arm.joints["motor_pad"]) + +show(arm, imported_motor, render_joints=True)