From 853ad1ba128eaae7b265bc7932f43bc4f72a36e2 Mon Sep 17 00:00:00 2001 From: Clarence Risher Date: Wed, 30 Nov 2011 00:55:15 -0500 Subject: [PATCH] Lower Vertex --- build/LowerVertex.stl | Bin 0 -> 33784 bytes build/compatibility/README | 1 + partsrc/LowerVertex.py | 60 +++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 build/LowerVertex.stl create mode 100644 build/compatibility/README create mode 100644 partsrc/LowerVertex.py diff --git a/build/LowerVertex.stl b/build/LowerVertex.stl new file mode 100644 index 0000000000000000000000000000000000000000..fc982705619b7aecb0604f85fc7437c465283efb GIT binary patch literal 33784 zcmb`Pd$46ib;cWq42pm}g5vmqg78pg96=Bq!##U$08!9XL{VcAd=$(mDk2I4jLa^H z5>Qd2F4xcpkja_O#17!*ZIEgbM_gi%Kc+* zPw(~XuV1_O+N*ot*B)}@VT)e-|Mt(87d$P*pSp*C?dKD-o(ci!UE2S9x~XtI5j9d~ zh2OX`i8cZjbsztR@ZeJWjVqo;j?!i^iBKy~Qv+PxJLN#dE2dRuQXR}x6`F5z0IHIEnTtIT@#4;2XDR9>z-SYW}VRTeU3Y6_Uk+R zGL?n&_ilf6O0WH|56ymLk3%MCD4}&%I@j2^=z;3;b@#Mou_k%@$mF%sep5Z#+x+6# zqIaMEsr8kQ<~DD$vB`;}2G3dQV;(I>y{n^{6P$5Pg_?YD;qQ`$>U9(7pYvb$`$Q<+ zO<)W*T=H-tl+FolhmOCtDJQfYnCB~$mV-+aaF-`u^~ zXfAm>RGan~!9%a!b?NB-kg@3=5A;v}J-<#GIxD;9F52;%!5_xjk++Zas(au5>Z!A5 zt=TdW+NSPylp3}sV#VPcqXJrf&3TKK`aP(<(A{$M`>US&$fzBzk!w?>?%n*{WwXm4 zcsvmccBqyf^Q?_2ec8E(Ei8g|zT{qvOvf0N2W`pOs1q%`{Q z)P47#pz%-NIBj;g&5k20@9FN|RSg|y)nhBryCvamQaUHFE_q*J)Vz1|UMExcHviw{ zv)7y&W}|hby{o-Wd(;Y6-dEbw-MyI|U5wP#$Nl$c zJbctZ&ph2RZn~CX;O?{=$jP9p1%5qO%?^NV>y|GZ^s%wv(J$K)i zj`aMVAJr-*&{rh(d-k!jgEMzegwoTA-pU1uP&y~dcKBSI`w_7>Y?bIHbiU>^nY^#GchL@?F|;rH3L5^b)$#8pP!nI(lTYYl>ptI1LV%xOF&RtSdtynbm9`1_8Bx1N zUSHObZ}g>xmaF|UrqO~nf)-n_-nEzvF8lMm)W}DTwPK8;BrqGiT-3^9GSf8F3U#-b z%rru+Fg6y;m`3QB>o|9}L+2=FyZ75zU)9jX+|5UdeZ^RYS^B@2iR^c62mD=&)wr$w zuKPM3T6ab%N}`;*KKqbwZ{96YyGCB$ydCx&EH$(pT6cK*7C{&%ST5J75Ew5h32nKy zmXVN>$jkC|Fa$;oN`gyR++l5eWHDZ z)y^U>YL68zS7)slFDVIC*VZE6JiwC3%c2G&EG3a&A;AbsN#s{Z@cpwTYWr<{Ww94q z4a`rpd1Y@%r3T;PZ4AtBhn4zTr0Tx*Ro*|-2rn1CYcZK=8ft}^Xfc^-gj!)`u$as= zLap$mwwTN`LapEpSWIRDQ6ta&M7M&+VKEt8EBdNN9tgF{XLvyv5Q%&YJd%dX1yLJf zv&3fu-zIFv*qfeNhK#V-3$D;B25s-PEz$nUeFmK|W3?I)`K;z_?7S)V10CU|vJ!(uOXr}`a?T3M{7By`m9MrSb@Sb5~7 zB-9G;h8C0QAZpA+wc^|41j41#O6_$=@A@1YYsZMtCujb&EZQ+5v`5hDV4 zyUxmqM2&Xn7$EJ>+A$(p#M~0iVI&Uujhms-fjF-BhHZ zF|*;r{YQ@qbFtxtUrS$|&%}~Yub64uG2_n0rrXg}Y#%h%{KfnF8&10-)e8QV?a}5n zWPVAozDhJzPTcamzwJM<;@PQpamC-NSrdB~;eNdmYQ?l^j1hhGF0A~`lr_EX zgjz9eedXs4MtwB{4Yb_fU$srlmk~?^M=hswq8*P!Xt_+=nEN@0(Y%_XftvUnLwf5t z+gDYGq?Tij+Q}^KADitwv89CeF4H#KNwoJz(!f38QAgEdK5C_eS}|?+xt}Qu;o-QJ zEIQ@%q@imf%MF3~&^YeA`k-&0u__U|Ceo@TR71;U+D>mV7QShXrlK}#b;JQ*npv^p zq*SYNbsk@}OM+$T)4)z1a_?^Yh0o~Sxci%v2D~u$$W)K{&{+M&CA~9e7AHcVWVBMh z6ohJMxlA_|=_jYrRMZCX)i=Jaw|w=V=R*8}@8do$tu((R)Qah*Vo4z8J$y>Bn0L|BR*$)_&5I4ypmfXUw5!ZL@LYutCA+swgW3e(on*!&?fFp zD#0sOE2o(+y_+=9qyFAUD|>_FK4&|EiBK!1ZOny;Gx6-1#ptgZ^T*%MRFC4=%a$rHcKd#^X%}E3E)g$IC*Y=Hgy0N`$(Tv#719~w%i71Or1 zlXxQfa2JaY=kaKkYtJY@e}~BUZvAt_hx1r5o*zy#jasROmdms~)u>VWa2~(1=c{?f zc%E~gTM4ydx;*u?>2{c3;^+OMClh_R`^1OyNE&Nm{*|A4$_ce%+Wada3Lnm6#qa>U zr{SacUi!$tO819aF>M-SL_fqISb2O8<$9Z#j}a_=IJY8UedVXOMlHwclYBUjGSnL-xVLuqo-I)oMsxeQVlJaX_B`hq=+cMt zXdRx;UPE{TezGd}`qYYP^WjKr9(}mCh!5u)S}r^%o{dt1SImcVn)&Ff(udPnpO*_l zPgCVSoX7fDuK8Ld+FB)ViDl(hXp^7biZj4ko(Nu1!rDYaJu>vD#}JifK3cAXS}|>7 z?kB`XGckD?m~kEjX1O+ZEnnttBGig$n~5aaxtj>gSC5jb9`m8m-h&{rlR&i6(?TFr zL(65_?pi-hnQ0^+&f{&=u(ia`OywRKJ*2#b%tx(CAI>$fmUy{2F(+|2-TR+>IsqC= zs1?&q#gahW5uYEIwLTnnN!$ygRS3)nu`oW>j%|H7jR@1KBveDoWxA?}6~=0igXwPL!da^i>4hkO31 z7KhX5x%M>kp`nCYF>M<3;aZ{};t#Cchht4NUo;Y-R!rw#!Him-{42E9eK^+Lb~fl= zwPT(Lj+$C&T6#ATS}xNz=1)Zf<@&Az(uc*_{<_wO!yI*=O8brZC81VK+ia%~cW%4~ zf86?TxF_6)W4R$P9~w%i71MT~(}#OzTuTmYeK84^yAhwU5%&OHEhvSvJ zT%MCF30_e`Pw9bBA5ICTn+j=qWJ079f9}JPFbxuIJCaAnvT`f5j~PZ`AFiE=$-lzgh^ zqrGcE1l)J-`_RhnT6$!vq2)4dcP$Cgs3&XKTH?M|2nX0sLuv;-q`ZdAM>~{I4W?~{ z^RJrGUjM;cg`bVVe(jb+|H_nShoQlrx`#1fj1@F~Y&;kjwOssbUp0Dc5`9H0(zFMG zxy0x)t#WNL@q2?ff*#Gp2)drN50+&+a7TGGTdi_!)zH0d)l-`GXa`1W^nJe6P)o`Q z)QbB9Y(;1PRt$&H4 z8o9Q%1Kx{&-LHDx8kl{ygN50^cI4Ws0l&?6i&d{%1GA6&XVl2GRReR$zmL&c{Ag>f(%poX+dbymS2}{)rd%Vx!V$#1!kua|_V*chg+x9VjPPg?)(`tW zifcR0=;%5xM2)(S6Lzog$zTNj#hD+kiI$6NED8VPDI`7tknJm+eY@nlfVkp6rs4ln zn(KUfwYJ}NpU(;8P=jl`S^B@ZhL+29zO}9Gw|)7-^H4WuPDJ) zyCrJZ$kp>&@swt?&In#1f!f+SZ)N+x`4?_l6Rz`aYrpG0pA*Poxm?>zLR+roa-A=U zyew*PZ7&Jc&~mxXmqcC`HMq8yglcHHTvtjWFN+#{8k9tSg#@1lC6Qkt!L_6$xN=&= z!@mXL%2yJ6PFMuWPl$CBd`?)b$IoJQ6MRlse9uoLbrag}d;-MVA^TF3ZK?ZerM=Ki z=$NZsH^HX?lsO*V1fLT*k(Z?H$j6o%c}eFVbHHAUwfD7`1XCWE{KK<~`iBJzo^>U5l=Pw!V{^e(mwOo57Csaer)gH--k6*XnaL;)gQmwR2-R+p! z^UlHATYfs$4%N;z9@u-|;a&Sanh4eF)|k8N_Q3C$)ckPAlmap03hQTdc{$xx;wR4SI{``{R{MV0b zsCG^qeelBJ!F}s@t(BIP6Z$kb`TAcB?%Ma8sfM~LbrY)(yKQjg6{{1WbT{#>+iw~y zT5TFicN1C@9nEgy(VK10+vyPxXKeUE9p;p_i{j1^q zyKIr}d3`c;6L&1!efZ#=&q##Q-NZe+?lJuM2e(Ru(%r=12YU_|US_MP(%r;@8(%bB z{?TodhSJ@Ht}9A+6T12+ofC)Nx_)rsR`$1Q&;I_x;iA>{ggfg!i-%WU;eWM~Ox^qX zj`t0AI{u0@`z~Jm;^8~j*>hKE+GEU>P%G8Wi31L~XK>DoE=d|%6MY7E6Kd7HUa5xG zMD=nF^-|UU)L!T&)Jl6KC)EGc8s_b|&%VvT{zuwh_P>iVInK~jAt<3%OxwP*N4!J$ ze%#w0$oUfg&TDd<0UAr=j{6(re2IVOrBMT>L8yk7%e3vddyIVie2Kqd>pLgksiC1K zQq+p+GS<84cG#H-kE)08pYeRjt#ZD^-{M&leY;1klu#?C?d*rglk?Le`o26lUILBs ze2I?-3DfY%{fLP1$~?9(Ip!c5iBK!1t*<=FJ!*M6`+?T_cV5~i=F12sf}>^;7N>Kf z?cGFZxlG%bdt7`pOQvX`Cb|o-B+mA?$oUeFs!WcyfL21Sn6}yO@%_>Lk$P7n5E{Q= zJ~Y}pDiLbMwB6^7k?(YOZ*FfnU*g}svRpeY!kv_MFEwdsj7(!EOrut+q2)4dyRT10 z!}f%^BlMAYzT^ZsUo!d%ceHP0JJsBEQbOCowCz-r_+30-vQEyI_;+3!TV!MsEiccP z_!rBxvR!@dx2cAf%e3txli0L|oi*UTVR^p9zw^?_EhEKfhZ1VVw4E>E{^xe_e96Da z`4ZRAavAZ4h7!DDXEB^+J_z$D@jKMKVkbF#e;E1P!4@K&FY)iLN}5DlE36DjLkYJ+ zo46CN1g}`FoMyiCZqh)H`VJ4Rbmyle)QV{vbDlx?emv=PO8cD`W}koOrFzVVh7xMU zba|fP!FYe%-G1kV`D*72Y=*lY^P$n+gT2_h>3oTQ=S3^KYk5*ZHCSKOu)CIoXr%Kc z;~KV>_{oU;v)QJu?JGAWK4fQR!|%Yoc{${Ib;0n&^yS%(5kF`(5|7g{sFmT&bb; zRlP9{m+EV|T6e}sOARec+rhYKNvMXF%QwA}(6Us6k<^mVD@rf|*%Gz=uKSEMhQQdX z-h(BfR*arbBh*SqO;?GeGOAT>#d~m!@XGbIh1zn)MO)Jmp)J>P85b=HElV{R_bCZ2 zOEnltEeXA%1fw4%p{op|r{$g=sk*OLjGj&-)QYjtX@pua7CMbkE5_cY5qd{yFXa1? z+H%JCLSQTu79NwOHBxn7tr!c%wJt)f7z>?7s1;+O(+IUlG$y02D@o=zjwiqX?) zgjz9rI*m{(Mo*^^YNhK(cgxjESD$Wzk;V`h7maV*qnK>jyK2RFVhD^UmV}n2bT^^T zRIMSSk)?*NB}#V_TCUcxo6y#(U#ecM)~oJo3zhCBv>jR#^-GgRKl<&6e$*uNtU-Bq zMN22dE6&e;CBpF zeo3em(@n*aK%75s=l*k=!%{n_9s<)%#iwXV@QM;4FdxMG)*s&g<8=#?2FF>gH2vg= zreaATE`8{P{uV1PnTuT&)GuLcHNPa(is={+kR9dto$$+F-=AHueIFX?$*jBhu0pP2z@u8RY|CZmdkWgkw&dH zt7zqxf=0Cnwa3>88qw7kqT@gZ}Y4`zvYs&Pl8IHMpD{ zigD4$KRa{x_8&^M()U_gm4s?&xlA_|X|#OP8cjuQ5J!J;^WIAz{rglaeWRyU2+S`D zwPL!da^jo!yu7#93tl#+p;nAoKtl;$(VA!!2gI*q4DRP_~38tHh(Vddu6)jg| zWFT()%*nl*zjJodP=e{EqF+)HyrSiXz;Lj2(sO*a*NqLSbhCDgM7 zvEr{!?cI3WyYP&vm0&vVd8b?F(0)G7j4};X2~0&kr8U8zE)1~N?t?eLqmNy z^}Hv?$Vx)3m~JYT1VVi{_1kF`0`ozrf2Hpnv?>YJ&~lk>D$>x{KYD#s+X1Q^tl`~8^p;k;cRZgsrKHRfgA5PzESd-|H%ekER z7n+1nE2f(&CpJVM?w?y9PT$X2ljtSL$*K^PP%EaJDks#3(>FTSME5DsyN5=PY|rb> zBjc#4m8L zxyw-!yrM+>YkhKZJ^l^5=)-Lpo$(NVctz7q#eETID8VaAgur|d>cjC$ZpHn!lHe63 z;>msaE+mAnL?3SLIp)LZt|hH>FBKX}s1?(3H+;1F3POE2-9M#O2+S`DwPL!da^g+V zhnw5ad^p|Pq*eU8wek&3?vd#(BCSe7HMCr&<6lYZ(x@kEG!^sF^85aM>)v}?AC4YU R2($`;`6Z!NOgB|d{2y&Y3hV#? literal 0 HcmV?d00001 diff --git a/build/compatibility/README b/build/compatibility/README new file mode 100644 index 0000000..fa53711 --- /dev/null +++ b/build/compatibility/README @@ -0,0 +1 @@ +This directory contains binary (or otherwise non-source) model files, such as STLs, that are exported to parameters that match other designs diff --git a/partsrc/LowerVertex.py b/partsrc/LowerVertex.py new file mode 100644 index 0000000..929cbba --- /dev/null +++ b/partsrc/LowerVertex.py @@ -0,0 +1,60 @@ +from __future__ import division # allows floating point division from integers +from FreeCAD import Base +import sys +from math import * + +extrusion_width = 20 +#how far apart should the bottom frame rectangles be? +frame_rectangle_spacing = 30 +#how far apart should bolt holes into the same extrusion be? +hole_spacing = 20 + +# import MendelMax.py settings here + +#how thick should the non-flange parts be? +part_thickness = 5 +#how big are the structural bolts? +bolt_hole_diameter = 5.5 + +box = Part.makeBox(extrusion_width*2+frame_rectangle_spacing+part_thickness,extrusion_width*2,part_thickness) +box.translate(Base.Vector(-part_thickness,0,0)) +vertex = box + +#reinforce the base rectangle plate to the diagonal plate +filler_cross_section = Part.makePolygon([ +Base.Vector(0,0,0), +Base.Vector(0,-(extrusion_width*sqrt(3)-part_thickness)/sqrt(3),0), +Base.Vector(-(extrusion_width*sqrt(3)-part_thickness),0,0), +Base.Vector(0,0,0), +]) +filler_face = Part.Face(filler_cross_section) +filler = filler_face.extrude(Base.Vector(0,0,part_thickness)) +filler.translate(Base.Vector(-part_thickness,extrusion_width*2,0)) +vertex = vertex.fuse(filler) + +#TODO: cleaner calculation of length of this part to reduce trimming +box = Part.makeBox(extrusion_width+hole_spacing+40,extrusion_width,part_thickness) +cylinder = Part.makeCylinder(bolt_hole_diameter/2,part_thickness) +cylinder.translate(Base.Vector(extrusion_width/2,extrusion_width/2,0)) +box = box.cut(cylinder) +cylinder.translate(Base.Vector(hole_spacing,0,0)) +box = box.cut(cylinder) +box.translate(Base.Vector(-(extrusion_width+hole_spacing+15),0,0)) +box.rotate(Base.Vector(0,extrusion_width,0),Base.Vector(0,0,1),-30) +vertex = vertex.fuse(box) +#TODO: reduce or eliminate this trimming +box = Part.makeBox(40,10,extrusion_width) +box.translate(Base.Vector(-part_thickness-5,-10,0)) +vertex = vertex.cut(box) + +cylinder = Part.makeCylinder(bolt_hole_diameter/2,part_thickness) +cylinder.translate(Base.Vector(extrusion_width/2,extrusion_width/2,0)) +vertex = vertex.cut(cylinder) +cylinder.translate(Base.Vector(0,extrusion_width,0)) +vertex = vertex.cut(cylinder) +cylinder.translate(Base.Vector(frame_rectangle_spacing+extrusion_width,0,0)) +vertex = vertex.cut(cylinder) +cylinder.translate(Base.Vector(0,-extrusion_width,0)) +vertex = vertex.cut(cylinder) + +Part.show(vertex)