Skip to content

Instantly share code, notes, and snippets.

@pschatzmann
Last active March 6, 2023 14:09
Show Gist options
  • Save pschatzmann/1bf4617ff8543016333a3881d6522912 to your computer and use it in GitHub Desktop.
Save pschatzmann/1bf4617ff8543016333a3881d6522912 to your computer and use it in GitHub Desktop.
3D Printed Springs in OpenSCAD
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3D Printed Springs in OpenSCAD\n",
"\n",
"I needed to generate some Springs in OpenSCAD. \n",
"\n",
"To simplify my work I have written a very small library which can generate different basic shapes that can be used as springs. This library is described here in this Blog.\n",
"\n",
"The basis of most of the functionality is the need to __draw simple lines__ in the 3D space. To do this, we are using simple spheres to generate vertices/nodes. To draw a line between the two nodes we can just use the hull operation! "
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SCAD code buffer has been cleared"
]
}
],
"source": [
"%clear"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 20\n"
]
}
],
"source": [
"/**\n",
"* An edge (or line) between 2 nodes\n",
"*/\n",
"module line(start, end, d, fn=4) {\n",
" hull() {\n",
" node(start,d, fn);\n",
" node(end,d, fn);\n",
" } \n",
"}\n",
"\n",
"/**\n",
"* A single node which is connected by edges\n",
"*/\n",
"\n",
"module node(pos, d, fn=4) {\n",
" if (pos[0]!=undef && pos[1] != undef && pos[2] != undef){ \n",
" translate(pos) sphere(d=d, $fn = fn); \n",
" }\n",
"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we are ready to generate the logic for a simple spring. The x position can be calculated with a cos, the y with a sin from the angle and while we rotate we just increase the z poision:"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 43\n"
]
}
],
"source": [
"/**\n",
"* Basic logic for generating a 3d spring\n",
"*/ \n",
"\n",
"module spring(d, dBottom=6, dTop=6, windings=2, height=10, steps=10, wireDiameter=1,fn=10) {\n",
" // we use either d or dBottom&dTop\n",
" r0 = d != undef ? d/2 : dBottom/2;\n",
" r1 = d != undef ?d/2 : dTop/2;\n",
" \n",
" rx = (r0-r1) / (360.0*windings); \n",
" heightPerDegree = height/windings/360;\n",
" \n",
" for ( angle = [steps : steps : 360*windings] ){\n",
" r = r0 - (angle * rx); \n",
" x0=r*cos(angle-steps);\n",
" y0=r*sin(angle-steps);\n",
" z0=(angle-steps)*heightPerDegree;\n",
" x=r*cos(angle);\n",
" y=r*sin(angle);\n",
" z=angle*heightPerDegree;\n",
"\n",
" line([x0,y0,z0],[x,y,z],d=wireDiameter,fn=fn); \n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 72 elements\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAABJmklEQVR4AezVMQGAMBDAQMC/TXR8p2r4IXcKsuWd+R8Aer7tAAB2GABAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARBkAQJQBAEQZAECUAQBEGQBAlAEARN0BHPbqH7eRKg7g+NhOgMIyXAAaiq0ozAUoV0hIPkjECYhoEDeAK3CA7SjSho6t0Gq1soSCtggVWBY4cWbMbCaMvZP4n1bKG+v3+Shy3jzPWG+a3xeAYAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoAQAICgBAAhKAACCEgCAoI5SHwA4GPOXT1cvj5/8nPpEvJPOYvE69RmAVvv12RefPflgww1KcKC6qQ8AtNjvX2b56POvPtp81/zl029OhqnPyt46i8Xr1GcA2qcc/R+/92bRyeavZltv/+6HP8vPvMi+//F56qOzKwEA3laP/kony2ZF+X/+x/W6J3569tf44u7bsgElGTgIAgD8rzH6s+X0f2OSlx/zv/PV78vRX6/rBmS3GdCA9uumPgDQDvlo6/QvHX/Y+3e2qP8G/V59+6efLB/vdbNvvx6mfiW2EADgdvrv7+x82thZbUBJA1pOAICHdLJsVtytJ3m9Pbm8qRb19B/0e6vPacABEQAILx81d7ZN/80aDaC1BABiuz/9d3B2Pl29HPR7jRtWG3B6Mkz9kjxMAIC3dbJsVtytJ3m9Pbm8qRaN6b9O1YCiSP06rCcAEFg+au5sm/7rDPq9+5tVA2gtAYCoNk//Nc7Opzv+/G+vrsq/F+NZuT49GaZ+Wx4gABDS/enfMMmXy8ubarF5+g/6vXpdjv7yc3xxlfo92eQo9QGAFrgusve72ay4u9x/+teq0Z+Z/odAACCefLRcX98O/ePO5um/I9P/sHRTHwB4XPX0L0f/cvovsmLTQ2fn060//Mvzfx7cfzGelZ+nJ8PUb07TUeoDAI/uemXYV9O/Um5P8/qbyeVNtdh3+o8vrlK/ITvpNq7/Y6/cg+Q47gLcszP33tt76B5cbGPHsiBAKjh2bGMKy8LPSFakSgLBVBKnShRFkUCVqRRVqsA/GJOC0p8J7yoKqDIVqMQQYiiDExVCVg4HSefEsoxiyYoeJ+net3t3u7d7Mzv0bO/29sz09PQ87mZ29/eVam62r2emp1f3fQAAtDOlj3naH9nsv3xjSzdM/O/MudJwTpV/gpf9X/zTmaRfHnACAQCAjgHbn0Vof3Ly/Xc2ZW48PVNM+t2AMEAAAKAz2BH7X7pa5s5559Jm0u8PcIAAAEAHENn+wznV9yFe9gdSCwQAANqdyPYXMD1TTPr1gPBAAACgrYnP/sM51THC2v/S1bJgFd949Z2kNwLgAAEAgPYlPvuLEdv/2NGppDcC4KMlvQCgE3n71X3sx3LFvO/QiaQX1XYEt78vwzl1tVC/cHqmSE5mzpdy2UzSbwuEQTHN2aTXALQql088VqmYXr8tblYVpAS6oYmcdzN5t4da+BPK/t9/Z9P3xiQAxP5Y/XTcqwHHjk7dve940tsB8NGSXgCQdm698QQ+rq1X8bFadfoYW15wLRa6fAM2Stat+vts8xXe1TPfepScVGsP3yhaP/b+6smktyo1UPtj6fdl6ieUCPbHDOdU3ABW/QKw/ZPeC0AEBABwwhqfJd8Qh5rxvHZxxXCM9PdmAj1dN4KtNqOggX7rEWe++Sg73rlVIPYnxif23zKbFY5mf8KfvbQkP/nufceT3hHAE8U0Z5NeA5A8vtJ3sJKX8vSF98qBAjA1oXHHx0Y1r0s0lTNYrfIn33/4RGxblk6w/Yn6EWN/ghKP/V/4ypymKdxf5bK27/rY0SkEAUg3EIDOZenMk8iuctP0NP57Vyvsx5Ghpnex5cUPkm/AYMMg2X6pS0aHm8vo7lLEk2kVdKPuxIc+8d8x7GN6WDlYP+lr7B61P2bDZv/NsrUdN+b0tY2q/BOw/fFRJgBg/5ZAS3oBwE7j9j5mcUUnJ+zftkP6mCuz9ZH5pYz8E4ubVfkGENaL/lYaGlTZjxVWdg3YKmQaS+hRrbNypfrGy3vpb1s7BlT9qGF/D/VjblyuBxvbP9BDiP0xum56NQBoLRTTnE16DcBOQLyP7Oqn3qec/N+NO2/rZkeo9B30BXS6ZAMGs7K3dQSAGRfdAScB4x7HPaDnLRaDyPZf2/DPLbU/gRuAXOO7O3Z0Ch/v3nc86a0BfIAAtDlc7yOX+rH3Q9w8tQ3wqkJ/n/POhsGZzMYApbwH1P701Tzsz1U/wTcADvsjjwCgWgPA/i2ElvQCgO1idcZSv5rBrm9a4Pqtrd6e5p8u6/1iqS6O/j5F8hGlTUsc8hkoblb7AzYjLvJrNsfREqhMQWgMerqbi8QxeOPlveWKtTl7nz2ZyOL5UPWjhv091I+E9scMDmQEDXDbH2gbFNOcTXoNQNxc3b+6ZP2ds+pHNfuTE9wArvop8g0g9AXRukwDBrOyNxwaVAMtdWjQeWcaAwcGs3lkO/Lr9aHkSxCf/QleAfCyv6bx/4f85Yu34ePd+44nvD+AHBCA9uLa/tXF+h85a3+qfszx6XV8HBzIuL3vIFAGAjVAN3wefdtkl+StogdApgdVm1GTLgG1P12qh/1l1E9xN8DL/ogXgMld2vNHxkaHVLB/CwEBaBek1U9RM/5+j9iAf3wl7xj55P6czK22LwAyDXDEoLuruQmbm7Z07XQJqPpRw/4e6kcB7Y9cARDYH9kDgNWPj8T++AQC0EJAAFqfa/uRquQX6qKfX7QsoCgi9bP4ZkCyAdMzxYUlQzwndvsTgjZAPgD05oprDxIoAbV/T201+IuLz/4E2gCx/RETAGp/fMQBAPu3FhCAVqamfvzTYX/Mhfesv//sgGU6gf0p4gxwG4CN7xgRBICo/+VXCzKvNTmuOUY+dWBIMH9bA4DJZVU2AI4YOEqAajHYKFb3HzmFYoTYv6fxbAM/lFkHY/9w6ieQAPjan0A7DfZvXSAALcvSM6hsqcfL/pjv/aAofz+ZBrilz4IDoHqouFoN8GbuAPhfMmZdcujxnOT8QA3AAaDngUpwY37r/MXyF798GkUBq7/mZTTaWIZBH6Sw6o9of8Lv/vFNmWkO+0MAWhQIQAuC1U8om277o0YAAtkfc+Zc6cEP9XN/dfVGZaVg+N5hedVzzs4EgAu3CoECgOwNIPiWwGxY+mbtO9p/5BQKwfUD1pGj/hrF2sfGk6Lb/3f+6Kam+k8D+7cNEICWgqofxWl/rH5y4ggA9j770bcBcQUABW+AIABccBUCNcAdAAq3BJpqna2tN187cAZk1N/gwltFg9n7YingdtfU31i5z0y3/TEfOXwCAS2IlvQCAGns9i8s6AqyLHNzvp6BTEYh9g8EtT/F4X15RodVQQNSwi/+3AA+rm0Y+B8dvP3HukLf0GyoeGSo6c6NoqXgwWy9MbgEU+PWI9781j5cgvMXy1/88mnPOwZUf/Q9ofb3hWv/0SG/aABpRTHN2aTXAEhgtz8+4ACQTzQAp84UJ3ZZRf/eD6Sk4FD/gx/q91X/SsHH714BqFaDve7kuBZs/pj//Klx7QO7e3ynecUgl/XR3HDOmqAozRGSAQrOAD3HGcDH/UdOOe8ibX+H+g37xhdLsjvusL/m/ZZc+2M+cvgEAloTCEArQO3fm0H5+h86NwD4ePl6hXWQFw77/8T7LTMW1nz8HjoAKGADggZApgFTrnv69oCNgWQAKPRbkM2AtPqRy/7hAuBQP8ErAGD/tkRLegGAH8T+WP0M1P5czJorBBkwGZkQ9cfF6LAqaEDa+L9LZXrOjcH1W1vMp62fvqdX/ub0Wxjor393pASD2fpHXIKp8a7o6ufS35cRN4Brf4xucBoA9m9XIADpBtvfrn4HN+frhjp1xvLC5esV+issIG4Doth/JKeuFFrG74FgY/CJp4fiui0bY1ICkgFUK8HuPb160YiufiPgd+Jlfy5g/zYGApBiNj4mtj9GN0xNVbx+y9rHYX+u+nODamEtpN9/5ZlhfPzzl5ZiefW5BX1yPLH/nNMzddU+/OH+WG5Itx1/FyQDYyOqNqCiIVUb5tlfWv0C+vsyxVLVMRhI/Yix/+c+OcKOg/3bAwhAS5F32vmOqe5rNyv45PL1yvtv7+ZeRDNg2qwSA0T6BEn1H3oiJ3nzG/Nb7sFrN7difgchtATILwbDOVXmhvgrGB+tq785ati/mDjszyWc/Yn6R5gFg/3bBsU0Z5NeA8Djyn40Zs9zj4LmdXJaWNDpMAkA5muv5OVvv16scscLa4b4wqceGXQPOuz/a58adc+ZW9Tll8e1v4C3391kP+65q8c9Z2pck7zb1ESX4LfcEsgEwFL/+5hI2zxf+xBW/Yb3l1Ys1b9oeftrtVfB9ifqJ9AAgP3bCS3pBQAesPbH6idMaKQBuXGNbYAkqqoYRl0x2f4MtwG5QZXbgM9/Zhc5uXilQgeHBjMLy9ZkrvG3G4f0Wd79Udk9KB8AMdMzdS9zS+DG8v6AioaYQpiuSaWQ6pdBXv0UsH+HAAFIN1T93twx1X3tZsV3GrZ/uCVQ9aOa/bH0k94Ui1sL+q5h5//epVV+FPc+MLAda/AtgZz6mQwraOFKeTlvRF8bLf2f/NVC0Gu/9PkJ7jjYv/2AAKSSK/vRbV1BL3r24NDXXsmL5+AMUDWIYb1PSYn9vXAnYW5Rf+zhbbE/Cy7BxC7t/g/20RFL/e/rtk1y7Drr/RpY/eGeXqnwv9AXvjof4m5f+s1xx8hILWBg/7YEApBKBPaf0NC8jn/mxrXCgk7G7pjqvljTR39fpmg3S2nT+tjXyxF3tj+zXqy6x3/vCxMrecM9vrCsh34hLOIEtrHG8ekNer6tMThzrvTRvVltQEU1Y9Zxy9n+BYX2Ptp+9VPA/u0KBKDVyCj0lG3APXf24AY8/Uj2P06ukxFSAqx+3AD8LztQt5KqKoZhet3+t5/bxbU/l4VlI+ntCMb2xeDggSHrR26H1I+2zf6apjh+BfZvYxTTnE16DYAd/RB/nFE/urVFT2kDMBdrTqENICytWBNoADA0AOvFppKw+smJVwAWlvXQAZhbrF/7yAP93AlvvFnyvcmPZivNDVhwLsb30WLYHkxNdEne/Mhna5s2mLGOSuMLcpjZ7n3kp/5lvwAHVb/vXlH7I1cAnnzudQS0LxCA9OEOAFV/zTOI+CRCA0gAJse0S1ctpVL1E7gBcNvfKwAPf7ip+NWCj8sK66IJ537IEeX/vFkMtJ2SAWD59OFh8QSb95soznl29Yu9TxEEIKj6CYIAsOonsAEA+7c9EID0wQYgwziFtY2wAW+eL2UHMu4G0ABgxkascxwAGfsjjwDcc2cPZ/Cx47Fvydl/fZS2pLDetOo//Xve99oQASg2xP3rz46y43zvK43viJVzKPUTuAEIp36CVwAE9h8f1e49+F8IaHcgAOlCv/C0trthVS/7E9gGNORQWLRlAB9PnS3Ska0ts9qYSQJwYN+g467uADjUf/8H+/Jr1rO3Q/Th+Je/+Hn2o6MKUQJAmP63PdYPL++z4Avtog6kfoI7AFHsT3A3wG1/VAsAqL+jgACkCxwAfKw3gAQg4z2baEo3kf3P252Bs2+XSmVLIuWaSoj9n31mqLBRddySBmDPXdYavnt2A9Wkj4/jD3w76e0JAK1Cfs34+39eDXQtCUAw79upLOn4ueFWzgYguvoJbAC46idMTXSB/TsKCEC6aAbA1/4EVhASGcDH1bUqDgC2vzXHHgBif6L+csX6VWtJX8zfHXuInAh68J2v77Z+DLr2Xdr79DxcAKj941I/gQbAy/5Y/fgI9u80IAApgtgf0QD42h/VrFSxa0guA585POywP2ZsRMPebyfpe0Fj8LlP72qOZjPI4fng3qeEDoBb/affsr6yM+dKc7wHyUACILA/qL8zgQCkiGYAfrJXYrrdTcIMYFYXtuj5a6+vz96yPh56IkdGsPpzP/ufSW/ATnHjQPM8a8+sEtX7lHABeOX4mnsQq5+chA7AkV8a8foV2L+TgQCkCBoAJaOoe3qEcxX+MJsBw0TLHAexJcD87ddXnn/xdNKvvv1Q6TuMz6IqyHQNBvQ+JVAAuN5HjPoJ4QJw6PHc2IjqHsfqx0ewfycDAUgRbADw0aMBiv+NSAYMRmYSJXjt9fVf/q3ppPcgPqjxkbf0Vd5mkm0L632CvP256nd4nxI0AFj95MQdAGx/UD8AAUgLDvsTXA1QAtyxxHPQMl9My3NbjpHR+15LekukYV1PCSR9wjqzOY1voRLQuQSZAARSP0WyAVT9COwPeKMlvQBAhPFumWmAEuziPubPnsZglBlkYjA62eW8fPZAGqvAdT3y1j0SGh/ZpU8pmwjhf6hSrMb+BlzvIwn1y8Pa3w3YH6BAANJOrQG9Ue9CY1BifIdjwPpt1alCdxWWzz6Jj7puch8y8eC3o6zxysnH6fmdu3s85wlcTxFI39P4TmK3P1f9MXofSaj/G6/mqya692C8bwa0Koppzia9BqCOfuFpfFQyTnkR4fb8VF/Mz9sw/OesSszxRQl7oYzrMV3MA7jSlpY+S5QA5NdsT4xR/XNLOnfcS/1jI/X2Y/uvFozvfHedfPzDr84goOOBAKQIHAC3/WkACPFlwKW/DaHvfGVY4EnW8TaSQhfQJRETstRQ0meJHgCu91FY9RPcAfBSP4EE4AO7e/DxyuwWPkIDAAoEIEVwA8DanxI5A9IepFUIIUPTjLRGGddz01VhnquHX0OUALz0zdXzFze9flvaDL8qRwDE9sd8/ClrwsJy/SpoAMACAUgR8gEghM1AKPvIyNAhYjYAfZkgG2HKPsJNxX7tzgbg2F8vkJPVgiGYFksAfNWPGvYnQAMANxCAdGG8+1HHiC5UWM+Pd6MBVfr2ZqTFVUO8T9gn5o2QFyYRAOp9yvYF4MLl8nMfH/Gd9tnndqGq9ZT1eZ0OQgMABxCAdPEHz9/3+1+YYEcEATBqf+H9d/XUP/uUwIy6uBAyrYR9aDFEbXiP284AuL1P2aYA3HV79+SYJp5jqZ8CDQCEQABSB9sAXegvEgDENoDijEES9kdhAxCX/bcnAALvU2IPAFY/OREEwKZ+CjQA8AYCkDpwAPCRNEAyAIjbAMJAJp5lhTDpTtqf+zg9UvYcAZDxPiWuAFDvU7wCwLc/QboBCDLQYUAA0ghtgCAArP0J29iAHbM/ChsA7uMiBIDaP5D3KeIAIIkGuNVPcAdApH5K438LzQDbgMK6cfqtktlYETSgc4AApBESAMzR3xj3muMIgMEIZ3C3qwRRGhBOo+ECEKP9IwTgb/5h+ebCFopAlAB4qR+57P/UL2Qn7+6RXZN3A966sImPuAH4SDIADegQIABphAbANM1Dj+d+Zk+ve44gABRbCcI1IP32jykAWPrsxygB8LU/8giAQP0EGgCs/uagfAMIVZM2YH6pfnLuh80GoFoGoAGdAAQgpZAGkACQETYDDvt7BYDFikGIBoQIQDj7o7ABEDxOuHiH8R3sZAB8vU8hAXjo3r6hrGobl2lAb+3b37Q2uTjXfLtbi80G0AAQXvgKNKDNgQCkFBIA5NGAEAHAFEt1w04+NCC1CD2UysMFQMb+YrH2uvLmWr9Y+iw7EwB59aOa/bH68YnD/lINYDcHGgA08ArA/7NXb7FxXHUcx8/szm7szRqjJr4oRnIRpATUWLEDodCKIIoq8kB4IW9RyxPQ0MiVGqgKrZtWKjFIqJYqJAMSvCD1oY9EapAgEhIIispWlRJBZIRa1ATqC01kx5f17g5n96yPz56ZOXNmdtdnZ+b3UTSZnZvPrJP/F8xjDaABoFveANLIQJsBcPNIgtnprzFDVdi8qzj6E1/SvQD88c31ByYLYyO5UM88/eUBvu8ZAKJugFTH1gaIAaBbsQEIQLIhAD3NrwFHPtbyX72qNy0VAXC7s1p/6H1fHAix3JDT/40rd9jOZ48VOvJ1Xf79qvhxcaUS+VHtBODy1VXP43Tu8339ALx7q0y35x89wI/4BYD4NUCa/qQZAIIGpB4C0OtoA1gAqHLZ+fqpQbYvNqB7AQhl5XY1k2n3fXViIA16P3scAJ25zwUGgM19EW+AIgDE3YA+n18JGgAIQCzwBtAAsCMsA7wBOgHo9vQnjQCIHzsSA81Z72lvAhBq7jPq6X/h0pt0e/6xCc+zz54bDlxSSwP6/H8NjQbwAJDWBogBIGhAQiEA8XBxepIIAWBoBlgDeiEA0vQXOS2rDuF/t6N0iOtqACLMfc4vAGz0c54NGChkpr9xMPBHNBvQFxRhNCDdEIDYUDQAAfDUjQC0M/c5KQDS3Je4M6DbgE/1a62mtQFiAOhWbAACkDwIQJzQBkgBYJ55fDjw3rQFoJ3pT1wB6Mjc53gA1KOfkxpAA0C3gQ0o9GcGProv+OmbzX8YaEAKIQAx49mA1fXd4f7Dp0Y9b0QAQmEB4HN/4kif+xo6YSM8mU1/zdHPiQ1gASBBDWDLa78BYgAIGpAsCED8fP/xY9IRMQCcWAKD05/ELQC/+9Ma3Q4UA4Z7tOn/8i/fJm1gGeABIMoG8BXqN4AHgOw0oFYjV/+89t5/t8Vr0YDEQABiSbMBDC0BAqDAJr6kswFoc+6LNBsgLk8rAPssQr9ta7cBNAC1xr8adwAIGpAUCEBcSQ1QBKB+dq159kffGw18choC4Dn0RR0JQAfnvog2QAwA8WqAtLzgBrAANKwvNcf9rfeb36G7AQhAMiAA8SZmQLMBEncSkhqAwKEvaicAXZr7ok8f/fgjDxXFI1ID3MtTNYBOf6bxhfMAkJ0GuANA0IBEQACSgGUgWgDcaADcVVDrzQCEmviSCAHYg7kvUjfAs0/eDeDTnzQDQIQGsAAQNCChEIDkOP/YhOJsqACE+rl0vj/9rSGzAXj5V8vSkZEDNmmDOgDieN3juS9h7edYAzynv1YASLMBPABkpwEIQCIhAEmjyIBmA8IGgLSOeHcMOhgA96D30+0AmJ37IncD/ALg0QBp+pNmAIjQABYAggYkEQKQWO4SaAaAhG+A34hnMQgVgAuX/sP3+/sykV+/UwF48HiBH3z0whukJ/EG7NuXOX5//8kT+1Wvxhvgnv5MowE8AGSnATQAdCs1AAGINQQg+cQSaDYgbACIcsovrlSirbydAJBIDfjKyaL48Quf2X/vyaskDlgDWADojlYDlAEgQgNYAEijAVIACBoQZwhAitASIABu8R36Ep0GDHwkv/peub5zpE/1rEYDeADITgNoAOhWagACEF8IQBr9/KUT/761Lf03loRtQIwCkJiJ70YbQANAd/wasC9v5Ydz9b2i8ru93fzt8wawAJBGA9z/ctCAmLJNLwAM+OYP/sr3n/3OJNtR9yCQZfk2YPiAHbkBnSIO/fvv67tnMJuYoS9i05/627UN1gBp+u9+WKupGvDhLG8Ac2jEZg340ueKng2AOLIc56bpNUCv+PVPHvjHv7b4x7f/vmHblv7tfgGgIgegvy8T7cYfPz1qta596vQfOvZN9bAXnpxiOywAJ0/s56d4APLDufpfReV3uxOA9aXmrGcBoDwD8OIrb5l+dQgNAQBftAd0y5JAY6BzSzbrHYzuBYAOeulIJkMmv5qKWe/HrwFyAEjEBmxXnFd/c1u6FgGIIwQAQqBJoD3QiYFUgvYD4B701PGvpXrQK3g2gAeA8AaoA/BBlTTuEANApz/dee31O5XGjggNiB3b9AIgTs4+9RfP45d/8aDn8Z+9ukJcMaAufXdU/4cWCxkM+sgeeahIt1tlR5z+u9Zqvg2g14/Y5P2Wch8asd+92YyBbVvuBkC8WI5z0/QaAKDzXnhyiu088+0hzwvyw7n6X4oAUDsBWF9uzn0WgNdev8M+Sg148ZW3TL83hJAxvQAA6Irn50pa163VPA6y6e/vzKlBtmPbu1cuf1A1/dIQDgIAkFisAbPzS55ny4vb3reJ03/Elk6Oj+WkI2IDLk5PmX5pCAEBAEgy2gBHcfqebH27Vgt8TuFgTnGWN2BxpWL6jSEEBAAg+Wbnl9wHs1mrurDVbACXtzSfeebUoPiRNwBiBAEASLjn50oBV9AGrNXqO/m2hvjokG36XSEcBAAg+WbmSrPzS+KRbLZ11tMG+BlpjvXCwRzbGR/LKX7WubMTpl8XdCEAAGkhNUCWt8I+8MypQdPvBG1BAABSYWau5Hm8urBlemlgDAIAkCKz80t0m81a4W4bsaUD42M5zwtHh+pXnjs7YfpFQQsCAJAWM3OlNp9QOJgz/RLQSQgAQLrMzi9JR6oLW8o7LOL4njv98IdMvxBEhwAApMjMXCnM5VbjT4PjNP/sGB/LbZXrH/f3t4yR0SGbbi9OT5l+VwiGAACAJ0v/UqkB1OJKxfT6IRgCAJAuM3MljaussI91NwB6H35nAKnz0k8XpSPVha2dXUs9/QsHbL9TvAGjQ/VrLk5PmX5RCIAAAKTOzFzJ67By9I/kdJ7MG7B6t1qtOqZfFALYphcAAOY5tY4Na94A6H34VQEApBQCAJBG2cNX9uCnPPfEpOkXBRUEACDtnJrT8Wce+2S/6deCYAgAAEBKIQAAKZU9fIVunZpjeiFgDAIAAF3xzs0y3T73xKTphYAvBAAAglQcxcmHP180vT6ICAEASC+n5uhe6t+A1btV0+8BESEAABDR4XvzdPpfu7FZ6LNMrwWiQAAAoK5yY0PzSsdp/ild370FDYgjBAAgvexP/LaDT0MDYgcBAICOQQPiBQEAAKXtWn27UtG8XGyA45hePCghAABQt1nu2LRmDRg/lDf9ThAAAQCAuuLRgs5ld5cr4sdrNzY9L2MNgB6HAAAA2Sw7YW8pXd9QX7C+UaNbxzH9buAPAQAASCkEAAAgpRAAgLTbLDu+57Zr7Tx5faNm+uVABQEAgCArFdMrgK5AAABSbbPs0G3xaEHn4rvLKEGiIAAA4MchVe8TpesbdPvPd8p+dy74n4LeERSA/7NXrjFyVfcBP/exOzuzMzvrfdg4biExJiHUgMIjQCWIayjU4eEqUQpN2qCmqZpCUlEhVBSqRkKmDyHyJa3aKHGkfmgFQiC1INn5YEsbjB1jGwM2BoMN2LBr7469uzM77525t+fO/94zZ+7z3J313p2Z/4/R5dwzZ++ce8fz+yEI0ovoxqtMj8SrAeczNXociAU4pFjSor4XxBMMAIL0Lmdeu9NtWm85m68139DNF9gfCGwAsmrBbw5BEB5dcF2+oLExNqBDwa8NQXqX0WEluSlmnekt9i/bS5DP1GCwa2LBeSlsQCeC3xmC9DrJaxMt6ueZr7lO5wuacxIb0HHgF4YgvUupDB532L9sn8lnzBLsmljwuSA04MNPqmzmp796O+q7RDzBACBI7zK+Ob7s14QGIB0BflUI0qNkDt1l/C/uLYH5mut0vqD5Xzm7UI/65hAhMAAIgrRS1m0T+YxZgl0TC1FvDllOMAAI0qOMb477vT1fW9pl9x0uRH1niCgYAATpRTKH7jL+F3cYoKzbJvKZlhLkC1rUe0eWDQwAgvQi45vjYf9k18RC4Jp9hwswyC7Uo75FJBgMAIL0HJlDdxn/i3v//OdrrtP5ghbqg376q7ejvlfEDwwAgiCE1Amhbi9qRNP56XzGLMGuiYWot4gsP2rUG0AQg3d3b6HHSrVpnxsemIh6U13L+OZ4yzm1v0RIWTNP52vOPymWjHdlmWia52X3HS7wp9mFetQ3igSAAUBWAvC7D4uLxlGWqIeITv8j5OgrXxO5MvVRodh00h1/+lrU97rqqW83jnHZVL83uWmzBHv259mkfwOQzgIDgCwnH09spcdqVbfNVxd1iUiCF6EroQEiUB8NJmR2euR/W7LB2jCbrf/xD/ZH/XhWDf1yi/rpN1O2pJ5zb8JQUsnlzbfkxvPGDHQBkq5PRr0HpIPxMn6x7KIHWwMKJU+F9PdLobahKi2nPm6q1fWzU4vFkvbwEwcjemaRUt9un/Gwf266BoM9+/PmTN7eBv457ztcsL2788XjUd8tEoAa9QaQDoMaPz4gL+SNn76mNb3vanzgwpwpjsSAHHj9kx9V6HH9Wvd/mWMjLvM2+1Nk789RiXT55/ro4ODLd8AM7cG3fngggke58jjt74HT/pShpGJrAH3OPq1FVj8YACSYzKG76o3fOXgfjsagaAwUh22Z8Z2A3/3xsr9x5dmabWZkWKl6OKi/T3JOUmfFuB1XqhrtAYsB5f3TlYefOHjpH+rqgD4hVu5cfQkXgAbsO1yI+k6QpSDp+mTUe0BWKTbvM7J5uynmsu7usOk+MSALfnQqKboynVJaT4P/MNbvuabSGpOzU4vf+uEB0h3Ut7tMsgBw9s9Nm5Xdsz/v/Itc3uW7/s0b9gDsfPF41DeMBKNGvQFk1SHu/Y/OVmGwJm1a2GZ8G8WGa8QzsASyC5rrPAtDIm7/9Dp3W3wbaAwu/1zfwZfvqFR1enrsZPnRnxy6dDu/tPjbvz3+b09uuDXDSKcg6fpk1HtAVgXU+0NJJV80jDCXNaSoG97z8z5wZrIaD+l0kQakkkLXTIdUj08JgLr9dg0k7jl0ZAmcAeDtn2vec266BoM9+/NeF8tZj+LdD43enz5rHPkG7HzxeNQ3jAiBAeh1Ku/dAwNe/cCFOcMFqirBqdP7/GmnNIAFwL4ftx5ADKTWyc4rgdP+HgEQsT8LAG9/ggHoTNSoN4BECdjfS/1AraafnVpkpzbvM0plLVQDimUtEbIZl5RiybIhFwNFIf19pv/LZR0G6aRpumu/NPCb528nq7wETvtXNRKTnfYXB9SPdAGSrk9GvQckAkTUT3ntUOGKDf3E2/s24iGd7tWAXMHc0oZ1fSLXSacU8Q9Np0Q3SS8rSfZJVgJGNm/ulpaAHldXDFgAqpbxadKq1i1w9s9Nm1/9nv15/0seOFqEwemzzRIMW1/BzhePR33PiCgYgJ7DS/2k1f5U/Uu7vngDXng1+81tQz4LBO1PLlkA+CuLl6BQ1E6cqgzEpOhLQO3PvA/0NW6D7hyegRWANu0PQAMwAB2EGvUGkJUD1F8qG0ZQZKr7pv1d1V8sNQWXiEuCn0Kv79UAanw2pur3t38osgt18QZkFzTxBui6yyTEYGCg+UwgBumksYehQXMnz/34Jnp8/J8OL9dthqN0v32G2Z9C/xXkW/KP9CCSrk9GvQfk0vPJNuMok/mLpuiZ/T87v0iPAzFDDa7qZ4g3gMIawEuf4a/+l3fnYLBuXBX/xHVj6gN3ihZFPACUoWRLWiTuMUiOR0JLwJpxLmM82xOnKnC6oiXwtz9psf/s1CIM3n6vPJ/zq8KBo0UYnD5bcb47nFJ2vnh85e4RaRsMQLcD6qcG0037M/UTy/6UQ++YP2xX9TMEG0A1kbno7hGqfub3QMIGwOddZxvEG2ALAMO1BKpijBbyGnsrmgzYAiBmf3r0CYC//YGXdr+3EneHLBMYgK6G2h/c5Wv/vQfyMFDkYL/7NIAJgsIHQOH8qWkhtr+MAbDxB7cO0uPvXNYnstgrAAxq/+Ehc02h2HKHXiW4tBlYqv1JewFA+3ccGIAu5dNtbDh/oQYDf/sDS2gA733G7Ly7Ry5dAEQaAN73wqcH/g0A+0vcU4kyA23YH3BtQKD9CQagA8EAdCNLtT8jMAO0Aa7eZ3gFgIRpwPIGYD13tauvjAVeje+BSAAYrASCGSDLWIK27U/cAsB/114BQPt3IhiAroPZXyfZOdP+MxfMn/Tk9CJb6GV/hlcGzk5V6XEu56l4wKsB4gEgIRsgHgAbgT2gMfBpgC0AgEgGKMc+KMPzpDz13JukHWz2J40AMPsTlwA47Q/YGsAC4GX/Z59cv3HLXoJ0GhiA7oLZXzH0k80YP3Jmf8rJjyrJQTlQ/cCR46WvXpfgZ5iqSHcFgIfG4JpNAyG26BEAQOIa6lWCuqafOFVpNwPh7U/EAsDsf/REaSgpu65/afd7BOlA5Kg3gCwTVP1g/4RsvCz781D706O4/W0zvP07kXOZmsiy909XqPLg1f6H6rrxAgYT8mDjqwFSSZm+qP3p+JpNscs/1w/zzzx+Q+iPWVb7Ey5pvP29Fj/75Pr2HxQSCZKuT0a9B6RtqPo5s5CKzuw/c8H85YP9KW+8E+w1sP9Xr0vAqZf653J1/+vMzrss0LQQd7ZuXA2xeCxg8XqBq61f2+ecvO0rCZ8/YboMRJLMQaFoPAXZOp3Nmg/qxKkKe9pPPfem0EWX2/7AfOPLpQHg1T+UlJ0rX9r9HkE6EwxA53Px3pbTivHLhwAw+xMrAOL2J40AeKkfWFoASFADHrhriI2nZhbFn8S7H5pSu+rzMdcFSw4Aw7UE4gGgpJNyZdG083yWUzM3DpEB3v5U+vGGoGvt2h/YNbHA2x+wNeDZJ9dv3LKXIJ0JBqDDsdmfUtHB/oQLgKD9mfqBy8YCdOkTgAfvHf6P/77o9e59W4cE7y8wAEz6gdxx86DIMv8AMPgShA0ADPwzINQAsH/Z0n3cUjMLQBv2f/pn06oqOef5AKD9Ox016g0gy0rD/hIxfrfnZhZl2RiA/UPxxS/EYJBbqPssWzOk2BpAvU+PVP02+//ln4zwp9MXastyu+cztdHhln/DF+ddriyo/lAcOGrWdNvXUku7QqxPggYMp41+QAZGGmOagWs2xegLMvDM4zcQZwbm7ms5BftbUTH+CbRhf6RHkHR9Muo9IEvl4r0tpxXjx5/LmAakAYDBh59U6fGNd4r+F9N18ua7JcLZPzAAFAgAeB9g6rdJnyFu/ynrFrw4b92sD/BxW28TbcD6tX0kDGtHjQLduDkuuD6dlG0zFcva0ADGrHUKGYCxmQF/+1MKbdn/6Z9N06OqSs63hqz9P/vk+o1b9hKkk8EAdCw2+w/IpOELZwBeP1KkkvIPgKv9RQJw9+0pNk6n5MxsPXDjkQTAhk8PlhYARmAJnAEAXDPAN+DkRxUY79ixoflncetqHvaf+tj8q6np2kJBE7kjsD/xCABpNADt3x2oUW8AaY8Bd5vYOPi2YX9JClhmsz9lKKV4NeCRPxs9daYKY6p+ehSx/yph74ECG/vEYAkcOW50NDADTmJ9EjRgOK0QKwMjjTHNwDWbYvR14x2plr8JY396TA3KgQ1g9qfUarpXA5DuQNL1yaj3gISncL99puGLXKYGZ+dmFmHw+hFD/R9/VmULnRnQG/bIF93V4AwAVT8MMrM1fl4wANMXaq7zt9+cOPhWSfAB/PatouBKr4/z4jvbh0OtXzuqer3lmoF0MqDZFc7mkAHgC9cnWtaB/T3UTyz7g/oZ/gHg7Q+4BuDnOzZs3LKXIJ2PGvUGkJVGt4wBJdA5gbgylFJYA5j6icP+gvz547/1efeWb4he52+58bcf+L1lfD6/eH4WBn/10Eiblzpy3OiZawZ8iPUZXwxkYDitQANC2R/U77Q/JTUoezXAaX9X/vmJywjSLUi6Phn1HpCQnNlGxhzlbmgilzF/8OdmFmHw+pEiPX78WVXkwvmiuxogALz9iVsAMrN159/6G38FuPP3vxRqfbFkfwj+JVg7qgpeGUqQTsqC62kDVMWIQep3+5uzcevPw9sfcA2Al/1VVWLjdaPqY98bG0krG7fsJUhXoEa9ASQ8Y8HfWq1u2AH00T429QcSufR59uw/yZ+G7QHlF8/PwsC/BIEcOV6ix623Dgquj/VJiQ39LVNt25+SGpRtDfCyPw/Ynw7Q/t0EBqCbgQx8/FnVZ42iSPW6aZNkQs4XNduCH313dC5bt01mZu1++aO/eD3q2xWC70HYGLRfgvER5dgHZTq49osDgYvd7e+hfmLZ30f9rgTan6qfjUfSCkG6CEnXJ6PeAxKGM9vIWGu2Y5JxnDF+9rlM88f/6TnD+8+/mvW5GLU/PbIAUGwBcLU/4QLQKd4XAXpQLGmh/uqpR9eKL6YBYGP/BjTtX9AI/JUsedkf1C9u/4WCeY+B9t+wrg8Gj31vjB5v2j5BkC4CA9BpsACA9xkz5i+fNQACQHwbAAEgXAP4AFD706MtAKD+bvK+k3949Ct79ucFF69rfB3ff3BEZPHosKFyWW7OODMwEJNlek3L0YQ1g/8e2rA/QBuA9kfUqDeAhGRD38p8Dtif56rPx/a/Wehu9QM7/v3ojsZAvAS/fGGWCGdAa7gdMnDsgzLhMpDY0G+oH+zfVD/k2Up+2/YXwWZ/pCuRdH0y6j0gouSP3Z388oD7ezPm7z+XMQefnqvC4PlXs7a1pbIWHzD0oyiWU6hk6vq6MfX02Sqv/rms6Zobt09EffdR4lMC+tBsMz4ZGB1WbDOQAcrN1ybkuHUywi0z7d8AwmAB9l+C+v/umXP0qCqeC5z2v6m3/wF0KxiATsIvAMRsAAsAsRrgGgAYJAebDoAAfH1Lil9JA9Dj6rdx/9arL8zV+RlnABjOEjgDQLnlek79hLM/r35KsXl68lixbu2iWNJC3QLYn3gHAO3fO8hRbwAJQXJICVwzNN70UaWq09dD96Vta+IDLt+7U2Qbt+xF+9t4Ze/7B45+OLZGoS+fZX//1+P0+MsXZunL/4K33Zps2p+qH+xP1c/bn6rfw/6URDzEr5jZPxC0fy8g6fpk1HtAhMgfuzv55QG/FTM1NsxlzPGpMxV6/PVreX5hsaSVyhodDCUVzRILNdpD96ZzBQ1Oqf2jvuMO4P6tV9Ojoki2+XTK8PgPvj0Cp//688z3HzTGo8PNbNxyfaJF/Qyb+jmo+s0l9ZaPo1+oyG5t9lfdErZhXR9B+/cMGICOwS8AsiWg84vwfxYA4tEAysU5Y01y0NQADcDXt6RgjPYPhTMDEACAZYDRon7C2Z9XP2mxP1P/0gJgUz/gDADav9eQo94A0gbU+/BiXNYH/x8aV9ncpiti9HjP7Un/djx0bxoGaP+wvLL3ffqq13V40ZnsQtPQ//k/s/TFTm+7NWnaX2qoH+xP/4q3P1W/t/2dJOJ+P2RX+zsB+z/8zTVRP05k5VCj3gAiykA/J3pe+qzjWsscbUAuU+NnaAN+/VqenY6uUS/O1WyfgvZfMrQB9Hj/1qvrvMotbr4uDoNasa4OKiStECZtm/o5AtUfSFj7r0k3gkTITdsnVvwRIiuNpOuTUe8BCSZ/7G4IgHplzDjnAyBz66AB5xfZBGvAqTMVeuQDACwuGsZ55DsjuYKG9l9GHv7GZhjs/JcNbNJUPyC3qp+02N9f/fW6y2SxpNlmAu2vNvZC7U/VDzMQALR/j6BGvQEkPMz+svOtRgMu6+MbAGy6IvbWidI9tydtDejrk6ABaP/l5b9ePl774B522qJ+iq4TXuLFlhL421+QQPsDaP9eRtL1yaj3gARTO2mqRL0yZgZA9l6tNY60AZZVchdq7E2agTffLcG4VDFWTLxR2D3xftS32FUw9Rvep7Sov3W0JPXX6+7zxZLx3Quqn/KPP1rLn9IAoP17CgxAZ2APgOy7GgJQ00mm6X1bA+iRZQB4bMfhqO+y42HeJ6B+3vuEV78F9bU1Kah+wCcA4vb/8d+Mq6rETtH+PQgGoAPIH7t7oN/8oUqypFwVC/4brREACjZgRfBTv6v3Wzn5TjHUx/EBqNebH/DIT6YEr2CzP+UPv7tvZZ8ZEj0YgA6gdrIpF9EAEIlULctwDSCODGAD2qQd9WfOVGAwm62Lf2K16rwuefrfZmBwvvXrdoXa39gtFwC0f28iGoD/Z6/sY9uq7gZ8rn0dJ07CV5ukvEUvrVB4i94KNen7wpiQOhUxijSmSbD/9oEmTYBK1UigtXRdl3aIMSbEqoyPaRITE9r+KNq0Da2wQTckvkcbKGUDAoJOTXGaD5w6dmLH12fHPvbJ8bnf5177xPbvkXV77vW595573TwPoBAhAGTr2ICVv+qVBqCaDAgNIFvIgF8+H7+RjS8eiJVcL6V+iscAOKuf4hwAqn4KCwDYv22BADQHtAHU/hSbBmgWx1gGatWQml5m47++vDCZXOa/hQZYInqf0BtBGvfafaqf4iUAXuyPHANgtn/fJfrvnp/HGP3o5+ONfZHAqgAC0Bx4C4Bme36ec5BjBmbmKt/m8hgawLD2PoMGQPBzrfeRjfopzgHwqH6KXQB4+6NyAKj9Vy44Bg1oOyAAzYE5AKimAZqnq9AMGGWbzNUYxy4DhLsO/EP10yvDxfsUYn9H9Tt4n2EXAF/qp1gGQLD/pf2xf5/Nk8Fb7y5CANoZCEBzQAIg2J9SboDm40KLtaKZE70DJUCc9yvSRzbe56Gi9q9+imUAJOyPrAJgtv8FPaXHOfXhEh8AaEAbAgFoGoyJHeaDhQKOX9Xl+1qQAStkvM8g6ud07V39FCEAcuqn8AEQ1I/K9r9yQ0dypjSHBIBsoQHtDASgabALANnKNAC5Z6B0bGqZ3/3z39J08I17Xlf9PsLh05e208GGwc6Vox69T6RfS362JNb5tOF3GSwAQdTPoA2ws39pwkwlEtCANgcC0DSYA0Dtz6hfBswxaN4SWBuf0BNBZsn78T5Fuf1ROQBm+998y0Vkm63+iHwDIABtCwSgmRAaIAQASTeAQkvAyy1l7TK+BGjVx8DJ+AKavPcZcgFg6uddfPzU4pTVLVz5zm0X87uX9se2bOtFS5X1QwMABgSgmTg4Mrx/Zz/bNQcABWwAIWPjL/sYmJfx5jsrNvnKd19p8FuyNT6ykj4jqiGL1+nV+wy/AXj2WNp8kKifDvwG4Ks3XLD24ih/pGJ/SrkBlgFAte1B0ID2AALQZLAGWNqfIZsB7pqZou2slLvjzk3mzQf5MKBgbTj+h210sPX/u53mORgflaVv9wJ8ep/hPQBm9TPv83hsAFE/HfABqLE/xXMDIADtAASgyfAagP/uQN1Rn9e2v6BlDNix84aPm2ieZp3+OMfvXn5F3P0cZ9dToo63X6g+SGRlmkfvM7wEwKP6KV4CwOyPuADc/PVLrGfbN4APAIIGtAEQgOaDNsAhAEax9FViQ1Wa7iXAPm7PYlD0MJlvgxbGw3uxPE/U7a4LVr7OlV5IPluUWKBDAMzeR47qpzgHgFc/qtr/0v7Ylm29tufUBgBxDXjhlYUzyWV+LjSgtdFVLwCQ4f5Hz+29o895TvbTXKUBmbKSbDOA/d27u6pgqseMoyUv4G6Kcd3fS0xzL5O98euHnPqdEdTPuP7/uns3xp3O7IyQBiQGYnwDCEWr93Zg1xA0oIWJqF4A4Jsf/uwE2b43seQ6kzRgZYdkICO4D/u2Pw/9v0N6YPkRCMv+RPEOH8v/1MT4/IdBpM8+dYOoX7A/8T79BLmsg/3JNv1JzuX8C6Pkl0/0x0pjDa3r06n9t1/Xc9m6WP3eBrDa0DCeVL0GQIaDI8O3bO/938FO4bhRFHWW2BAXT+6OBlI/o8BdJKK5TDZwoOt7JFOsDPIYRWu/8iP6fLYo90rm05XGCN5HZfVLXHBqtsDv2qn/azfWHO/dGLe9Yrz8S6VK68xOL7PDZ6dKNzr22sKZ5LJwxqGxcQS0IrrqBQDy/PHF83RgzgDDMFD64xwZ9F7BGSFjoO5I0NsLdi7a6NU1DA7omkUDMh7UnC+fZchWJBhU/f/8aCncy9qpH5nsT0h/krNuQLzm50j0xfgGELZf12PZAKAl0TCeVL0GQJKDI8MYY+oF1gCjVsQGlWCVmgwEaYCEVfNSIs4Wg95IKgB5//f96S+nU+cNhwmLS5Ipmpot2Nn/Xx8t7b59baLL+qe0aAAfgFRptSwAZ6cKdGAZgENj4whoOSAAzc3o7iGyZQ0Q7I9MAaCsZEC6AY0JgIT9Gx4A4n02rkcANlzWMbBWt/yK2D8ej2zd3LXtmm6702sawNu/GgDkrQEQgJYkonoBQCA0rfQn/czRebJ9b2LJ41npj3PkUxplpAzbGPvLEYb9vUC8Tz/1exSifjv7f/Oe18mHDHK54vFTiy+9mZG5wUVR73MP7Bqq35MCqtAwnlS9BiAQo7tLf5n5PL7t5gvJYNMVcf5bw3A5vffqLn/3a5j9s8UQbiQbgLzV3V11nzrv9LoXlzwthkif3xUCQL3P2HfXlng8snVz6Ufcdk235QV7N5b/S8Q1qxVXFpydXqaDs1MFOjj22sKZ5DI/99DYOAJaCwhAK0AakC+7T2iAq/0J2cUV0w1c2+1+QmMCIGH/ugXA1fuMgAEQ1E/hAyDYn8IaYA5AvEPLld9J76ZO+0WX1uwlAAga0HJAAFoEYgE64BvgNwA81jFojP3lAmB5owAB8O59hnQALNWPOPtbqp9xcGSYbM0NIAHo6I+VRj0R5wAgUwNIAMhWaAAEoMXQVS8ACIeODi1fNuAzR+fJdv/d/QEvOPVGhg5WStB09vfPk7+Zo4PPpmvEFwpdnZq5AXbqZzirX+ClNzNCA/LnlksNWCjaNuCiKGsAz/bremgDeA7sGoIGtBIaxpOq1wCEw767tvC7pAGG4X5WdtGrbefTlctd+aVer2uS8LKE/R1u5BYtZnwBuQCkzru8cT4Aruon3Pvjtzze+uDIMNlu3dzFAhDv0OigFACCXQBK664sO1t96rNTBbIlATiTFN8DBKCVgAC0FEID0tniA/esc5jv3f6IC4AlFlWQsL9DAM57qBmhs1ZzVgGwkz5P/QLgxfvIj/oZQgNYAJDnBggBIPz695+b50IDWgZd9QKAMHng8beFBux7OFk67pgBLzjbn/Dh39PCkdmUEYn4u8u1WxJBX8FStR9cCbwYv668/FaWbL8wlHC1v4T3Bb58fc9fXl6gDfBLoi9GG/BfAzptgK5rhYJUyIFmQMN4UvUagPBhGUhnq0K0ykB2sejxgq4BECD253f9lgBJxeDZF8UInZst+L5xmc/KHvS9gGNp80HifTZePxCzOze4+gkHR4Y1hPbe2Scc7+iv3rfH5pfo0BAxvoay1Qc/PVkZHDk6b27AobHx4KsFlAMBaFloA/gAUPgMNCwAjIAlMCvemcYEwNX7FDv7h6J+BmnAfaYAINYA5wCUyc7UNIAEgGyFBkAAWgNd9QKAevHA42+TBvQmIkID9j2cFDLQSIpFhLG/U149np1L+ctPQDza3+x9s/SdCVf9jAefmN5r1YASC0WLBhD7u6HrmtAAoAXQMJ5UvQagjpAGCAHgSS8Uf/I9TyWYT/tT8Ky9srF/jUgH4NxsQeIs5wBIe3/9QIwO6uR9xsGR4fusAtDRX16AEABm/6nKu8rOVB7/9GRpcOToPJvLGjDzufHY0yfr+hRAA4AAtAW7vn215XESADZ2KEGI9kfNGQCz9JFn71Oo/eutfsahkeG9pgZ0bOpEc4ZtAFClAUIAkKkBxP5kAAFoAXTVCwAawdhTpb9VuwxQ9jyUZGOHGAREwv7SyNmfR/D+1USgZRJdEb+Xapj67YhGy6K/JFrTAN7+VRJrY7QBl6+PsQYwdL1yyuju4dHDJ9Q+FBAQDeNJ1WsAGoqQgfRC0Xk+icF82vB1i9mU7Xy5AMyl/C2AIh2AN97JOk/wHoBHnnwHKeLQyPDeO/vYLg1AdDBe2smXfwaz/acqb4wGgEADcOTovDAxOV3oX6NDAJodXfUCgEYz9tRJZMqAA3seSgoBIElQ/RAh88IrC/xub08k4AUVet8Sav8ViPrzVike0FkDXJHuK7B60DCeVL0GQBk0A+mFoutMoQFm+CrMpmwnYyyzzrmUy90tcTaUIH0e5wAkumy/XW3ez79/Ex2wAEQH4y7nlAOQnVmme6cnK4MjR+f5Wcnp0rT+Nfro4ROqnxKQR1e9AEAlY0+dJNvbb90c/FJ7HkqyMbH8njv6VD+ciIPxA7LavM948InpvXfK/BCJtTHagMvXx1gDgNZDw3hS9RqA1cL+nUNnktZ/7fNpw/t1SAB4+BgIX3lkLmX4PeWRX80MrNGlX0VvT8Tuq0RXZDVLXyD//k3RqMYfiQ7GnU6YKtB/aQAINABHjs4LE5PThf41+ujhE6ofEZAHAgBYc/utm4Uj3htgZ3lSghADQBTvfFY9AvCL376LmopDI8Pf39nPH3EJAKo0QAgAMjWABIBsH3v6pOpHBOSBAAAu7N85dCZZUoD3ACD7BpybLUisoaszInFWkADs2NZDB9+69w3U5BgTO/hdvwFA1QZYBqB/jT56+ITqRwQk0VUvAFjt3P/oOBvfsn2TrmtBrkZ8IdcACaZmC94b0ErGd8aYyNk0oPzLVtOdWBvjG5DL4+6uSGaxqHr5QJhAAAAf/OnY+3RASsAfN1dB05hJVinM+KjVpR8dfM6Y2OE2i/sF6S+nrRwh9qcDvgHr+vTkdKFhOQfqAQQAkIGVAJVjUChYyD4a1VQvswZm/NbWvRRWv5RNwPkGENIZQ/XiAXkgAEBQ+BhQSBLI1jBWDKIkBi+++oHSF9Ms+P5phAaM7h4ePXxC9VMAMkAAgPAxJwFVqxBiCcDv0hgTuehgZ5Ar0Aas69PTGYMvPdBcQACABmFZBaAxRAefMyZ2sF1cDEHZtAGqnwwIRET1AgAAWGUMxDxOJA2gg9Hdw6oXDcgAAQCA9gIXcejXNIzwrwk0AAgAAABAmwIBAIC2IDr4HNniIpa+wg1f7FH9EEDIQAAAALAmsUangys3dqheC1AXIAAAAABtCgQAANoFXMShX3PLVV2qHwuQBwIAAADQpkAAAADgKGC7b9IZQ/XigJCBAAAAUItVA6j9E52a3Uk/uHtI9boB30AAAKBd0P/neb+nYFz5EE59sISsGoAtegE0BxAAAAD8YW4A0KToqhcAAMAqY7ZA/83MVAYn3lsUptAGZJcw3cUYaRCFJiSiegEAAKwalou+ptMMAM0LBAAAAHmgAU0NBAAA2o6lPA79mjj8SwJ1BwIAAEAgsotF1UsAJIEAAEB7sZTHEmed+mBJ9cKB8PEbgP+wV/+wbZRhHMeT40hyUaQigYVYEAtDpTSCIQOsJEjdGDp3hJEN1gwsMFTKwFCklAWJIVUEUxQxRVh0iEVq1W2GLiVSU6Tjj13fxUfs3HGN3fPVfy72+eyned/vR5Hz+t73Ts8j654fgAtv4cq8dAl4KRAAgEa8k+CcE383mv/dv1qL3+/XEo4/fHQi3RPSIwAAnKn7qW89rvnS1SMNAgAANEUAALr449eP+m8GU6fS9WHiTOkCAMgK2steGfCn3XBcf27W8P7zE57y1bf70o1gaIZ0AQAm5PXXXql5/sKV+di159PfO1uUG+2NoPUXCTNAugNkjF8U0Ehu0Yp9C/odc+xWEmzvVuPXyQDF8HMCuqh5/vNl8ML094KEuxzXj3+NZ8DDRyfSPWEkBACgmz7jvtzouLC9W+15MJ4BuND4IQEt2HsruUVrkJOO3Tj3DBmgBn5FQCdW1yvvBQnHHdfvt0UGKICfENBCbtFK2i43Oi5s71YHf/iNW0Xp/pAGAQCoz95befbPOv99d+x2Ejiun3AyX3Ar1VPpzjASAgDQmBdIVwBJBACgOHtvJbdoJZ0oN5r/Hbu12N6tSleNSSAAAD1YXS+7FyQcd1w/YTdfcJuLSvVUujGkRwAAeis3pCuAGAIAUJm9t5JbtHrvzU3Hvzl2Kwm2d6vJz8wXXOm2kA1TugAA42cZva+/mAFNxzU//DSMKd8f6Nk3bhWl20NKBACgstkZI2n7qB4tD2PrpsEzABeUIV0AgHGx91aStrsmfjeja0LkC650W8gMAQAoa3bm7AW3zn/NH9yrRevlpfn4lpF498ZmSbpLpEcAAFo6qg9+1mBOKIofFlDT0+LH4adpTh3frw177/LSfMeVZgbkC650W8gSAQCorzMDjuopHmJ0TYuNzZJ0ZxgJAQAoyzTb63YGDDb9l5fm419/+Lkc/kk3hIwRAIAu2hkwpGj0Hz6pSzeBLBEAgEbu3P73zm/OULdE07/DxmZJuhuMypQuAMBYmP1f7igDPvhwod+Z72//E37ePfCk+8AYEQCAvqIk2NqpDHjL4ZP622+9Kl04smFIFwBgQooHXlaP2tgsSXeDDBAAgJq++c6WLgEvOwIAUNPa+v6YMmBjsyTdHLJBAAAqizKgeOCluP29y3MdV774NCfdEzJDAACKizJgdOH0X72el24ImSEAAGWtre83F8kZsLVTGeRp4fSXbggZM6ULADAJX998lgFffpZmiEejf/V6XroPZGk6CB5L1wBgjNY+fz/8vPvAi1+MJ8HWTqXfvU8d/9rVS9FXAkAxBACgvp4ZEHn3nZmps1nfczcKAKa/egzpAgCM3dr6fsJuOPqZ/noiAAAtJGdAMqa/qggAQBc//XIw1PlrVy9NMf2VNh0Ej6VrADBpn6xejtZvvmH2PHPzx3vSZWK8CABAa2ESNAOAca8hAgAANGVIFwAAkEEAAICmCAAA0BQBAACaIgAAQFMEAABoigAAAE0RAACgKQIAADRFAACApggAANAUAQAAmiIAAEBTBAAAaIoAAABNEQAAoCkCAAA0RQAAgKbSBsD/7dWBEAAAAAMhf+tx7L4kAuCcAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIgSAECUAACiBAAQJQCAKAEARAkAIEoAAFECAIga/1tHImM6yM0AAAAASUVORK5CYII="
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display spring();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This looks quite good - but we want to add a simple horizontal circle at the top and bottom:"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 55\n"
]
}
],
"source": [
"/**\n",
"* 3D Spring with identical diameter at top and bottom. The top and boton might\n",
"* start with a flat circle\n",
"*/\n",
"module spring3D(d=5,windings=3,height=10,flatStart=true,flatEnd=true, wireDiameter=1, fn=4) { \n",
" spring(d=d, windings=windings,height=height, fn=fn);\n",
" \n",
" if (flatStart)\n",
" spring(dBottom=d,dTop=d,windings=1,height=0, fn=fn);\n",
" if (flatEnd)\n",
" translate([0,0,height]) spring(dBottom=d,dTop=d, windings=1,height=0, fn=fn);\n",
"\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 180 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display spring3D();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How here is the challange: The further the 3D printing head moves up along the z axis the more springy and wobbly the whole structure gets and therfore this object can not be printed nicely. \n",
"\n",
"I tried to add some support in the slicer software - but this does not work either because it will be impossible to remove the support!\n",
"\n",
"So we need to print our own support to stabilize the printed object:"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 63\n"
]
}
],
"source": [
"/**\n",
"* Generate Support for the 3D Spring\n",
"*/\n",
"module spring3DSupport(d=5,height=10,supportDiameter=0.6, fn=4){\n",
" // generate support\n",
" dist=(d/2)*cos(0);\n",
" translate([0,-dist,0]) cylinder(h=height,d=supportDiameter, $fn=fn);\n",
" translate([0,dist,0]) cylinder(h=height,d=supportDiameter, $fn=fn);\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 182 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%%display\n",
"spring3D();\n",
"spring3DSupport();\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2D Springs\n",
"It should be very easy to print 2D shaped objects that can be used as springs because the objects can lay flat on the print bed.\n",
"\n",
"\n",
"## Torsion Springs\n",
"A 'torsion spring' or 'clock spring' is very similar to the logic that we have described above - we just do not need to move up along the z axis. \n",
"\n",
"So we can just use the same functioinality by just keeping the height=0 while we decease the diameter !\n"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 73\n"
]
}
],
"source": [
"/**\n",
"* Flat \"clock\" Spring\n",
"*/\n",
"module springSpiralTorsion(d=15,innerD=6, windings=5,wireDiameter=0.7,fn=4) {\n",
" // outer ring\n",
" spring(dBottom=d,dTop=d,windings=1,height=0,wireDiameter=wireDiameter,fn=fn);\n",
" // windings\n",
" spring(dBottom=d,dTop=innerD,windings=windings,height=0,wireDiameter=wireDiameter,fn=fn);\n",
" // inner ring\n",
" spring(dBottom=innerD,dTop=innerD,windings=1,height=0,wireDiameter=wireDiameter,fn=fn);\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 252 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display springSpiralTorsion();\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Springs shaped like a Sine Wave\n",
"\n",
"It is very easy to generate the following 2D shape using the sine function:"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 85\n"
]
}
],
"source": [
"/**\n",
"* Flat 2d Spring with a sinusoidal shape\n",
"*/ \n",
"module springSine(length=20, width=10, windings=4, steps=10, wireDiameter=0.7, fn=4){\n",
" dx = length / (360 * windings);\n",
" for(i = [steps : steps : 360 * windings]){\n",
" x0 = (i-steps) * dx;\n",
" y0 = sin(i-steps) * width/2;\n",
" x = i * dx;\n",
" y = sin(i) * width/2; \n",
" line([x0,y0,0],[x,y,0],d=wireDiameter,fn=fn); \n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 144 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display springSine();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Triangular Springs \n",
"\n",
"This is just a special case of the functionality defined above. When we generate the vertices only ever 90 degrees we get some simle triangles as a result:"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 93\n"
]
}
],
"source": [
"\n",
"/**\n",
"* Flat 2d Spring with a triangular shape\n",
"*/\n",
"module springTriangle(length=20, width=10, windings=4, wireDiameter=0.7, fn=4){\n",
" // generate poins only every 90 degrees\n",
" springSine(length=length,width=width, windings=windings, steps=90, wireDiameter=wireDiameter,fn=fn);\n",
"}\n"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 16 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display springTriangle();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Other 3D Springs\n",
"## Converting the Sine Spring to 3D\n",
"In the section above we used our line() module to draw our shapes. But we can replace this by using a cylinder in order to get a configurable z dimension: This shape is very easy to 3D print."
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of lines of OpenSCAD code: 115\n"
]
}
],
"source": [
"/**\n",
"* An edge (or line) between 2 cylinders\n",
"*/\n",
"module line3D(start, end,d=1,h=10, fn=4) {\n",
" hull() {\n",
" translate(start) cylinder(h=h, d=d, $fn = fn); \n",
" translate(end) cylinder(h=h, d=d, $fn = fn); \n",
" } \n",
"}\n",
"\n",
"/**\n",
"* 3d Spring with a sinusoidal shape\n",
"*/ \n",
"module springSine3D(length=20, heigth=10, width=10, windings=4, steps=10, wireDiameter=0.7, fn=4){\n",
" dx = length / (360 * windings);\n",
" for(i = [steps : steps : 360 * windings]){\n",
" x0 = (i-steps) * dx;\n",
" y0 = sin(i-steps) * width/2;\n",
" x = i * dx;\n",
" y = sin(i) * width/2; \n",
" line3D([x0,y0,0],[x,y,0],d=wireDiameter,h=heigth, fn=fn); \n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 144 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"%display springSine3D();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Elliptic Leaf Springs\n",
"We can use \"hollow\" ellipses as springs:"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": []
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Compiling design (CSG Products normalization)...\n",
"Normalized CSG tree has 2 elements\n"
]
},
{
"data": {
"image/png": "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"
},
"metadata": {
"image/png": {
"height": 400,
"width": 600
}
},
"output_type": "display_data",
"source": "kernel"
}
],
"source": [
"// we generate an hollow Ellipse\n",
"module springLeaf(width=3,len=10,height=5){\n",
" scale([len/10,height/10,1]) difference() {\n",
" cylinder(h=width, r=10, center=true);\n",
" cylinder(h=width+2, r=9, center=true);\n",
" }\n",
"}\n",
"\n",
"%display springLeaf();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary\n",
"It is quite easy to define different shapes that can be used as springs in OpenSCAD. \n",
"We have set the fn parameters quite small in order to increase the rendering speed. It is recommended to increase this value when you generate your final model that is printed. \n",
"\n",
"Here is the complete code:"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/**\n",
"* An edge (or line) between 2 nodes\n",
"*/\n",
"module line(start, end, d, fn=4) {\n",
" hull() {\n",
" node(start,d, fn);\n",
" node(end,d, fn);\n",
" } \n",
"}\n",
"\n",
"/**\n",
"* A single node which is connected by edges\n",
"*/\n",
"\n",
"module node(pos, d, fn=4) {\n",
" if (pos[0]!=undef && pos[1] != undef && pos[2] != undef){ \n",
" translate(pos) sphere(d=d, $fn = fn); \n",
" }\n",
"}\n",
"/**\n",
"* Basic logic for generating a 3d spring\n",
"*/ \n",
"\n",
"module spring(d, dBottom=6, dTop=6, windings=2, height=10, steps=10, wireDiameter=1,fn=10) {\n",
" // we use either d or dBottom&dTop\n",
" r0 = d != undef ? d/2 : dBottom/2;\n",
" r1 = d != undef ?d/2 : dTop/2;\n",
" \n",
" rx = (r0-r1) / (360.0*windings); \n",
" heightPerDegree = height/windings/360;\n",
" \n",
" for ( angle = [steps : steps : 360*windings] ){\n",
" r = r0 - (angle * rx); \n",
" x0=r*cos(angle-steps);\n",
" y0=r*sin(angle-steps);\n",
" z0=(angle-steps)*heightPerDegree;\n",
" x=r*cos(angle);\n",
" y=r*sin(angle);\n",
" z=angle*heightPerDegree;\n",
"\n",
" line([x0,y0,z0],[x,y,z],d=wireDiameter,fn=fn); \n",
" }\n",
"}/**\n",
"* 3D Spring with identical diameter at top and bottom. The top and boton might\n",
"* start with a flat circle\n",
"*/\n",
"module spring3D(d=5,windings=3,height=10,flatStart=true,flatEnd=true, wireDiameter=1, fn=4) { \n",
" spring(d=d, windings=windings,height=height, fn=fn);\n",
" \n",
" if (flatStart)\n",
" spring(dBottom=d,dTop=d,windings=1,height=0, fn=fn);\n",
" if (flatEnd)\n",
" translate([0,0,height]) spring(dBottom=d,dTop=d, windings=1,height=0, fn=fn);\n",
"\n",
"}/**\n",
"* Generate Support for the 3D Spring\n",
"*/\n",
"module spring3DSupport(d=5,height=10,supportDiameter=0.6, fn=4){\n",
" // generate support\n",
" dist=(d/2)*cos(0);\n",
" translate([0,-dist,0]) cylinder(h=height,d=supportDiameter, $fn=fn);\n",
" translate([0,dist,0]) cylinder(h=height,d=supportDiameter, $fn=fn);\n",
"}/**\n",
"* Flat \"clock\" Spring\n",
"*/\n",
"module springSpiralTorsion(d=15,innerD=6, windings=5,wireDiameter=0.7,fn=4) {\n",
" // outer ring\n",
" spring(dBottom=d,dTop=d,windings=1,height=0,wireDiameter=wireDiameter,fn=fn);\n",
" // windings\n",
" spring(dBottom=d,dTop=innerD,windings=windings,height=0,wireDiameter=wireDiameter,fn=fn);\n",
" // inner ring\n",
" spring(dBottom=innerD,dTop=innerD,windings=1,height=0,wireDiameter=wireDiameter,fn=fn);\n",
"}/**\n",
"* Flat 2d Spring with a sinusoidal shape\n",
"*/ \n",
"module springSine(length=20, width=10, windings=4, steps=10, wireDiameter=0.7, fn=4){\n",
" dx = length / (360 * windings);\n",
" for(i = [steps : steps : 360 * windings]){\n",
" x0 = (i-steps) * dx;\n",
" y0 = sin(i-steps) * width/2;\n",
" x = i * dx;\n",
" y = sin(i) * width/2; \n",
" line([x0,y0,0],[x,y,0],d=wireDiameter,fn=fn); \n",
" }\n",
"}\n",
"/**\n",
"* Flat 2d Spring with a triangular shape\n",
"*/\n",
"module springTriangle(length=20, width=10, windings=4, wireDiameter=0.7, fn=4){\n",
" // generate poins only every 90 degrees\n",
" springSine(length=length,width=width, windings=windings, steps=90, wireDiameter=wireDiameter,fn=fn);\n",
"}\n",
"/**\n",
"* An edge (or line) between 2 cylinders\n",
"*/\n",
"module line3D(start, end,d=1,h=10, fn=4) {\n",
" hull() {\n",
" translate(start) cylinder(h=h, d=d, $fn = fn); \n",
" translate(end) cylinder(h=h, d=d, $fn = fn); \n",
" } \n",
"}\n",
"\n",
"/**\n",
"* 3d Spring with a sinusoidal shape\n",
"*/ \n",
"module springSine3D(length=20, heigth=10, width=10, windings=4, steps=10, wireDiameter=0.7, fn=4){\n",
" dx = length / (360 * windings);\n",
" for(i = [steps : steps : 360 * windings]){\n",
" x0 = (i-steps) * dx;\n",
" y0 = sin(i-steps) * width/2;\n",
" x = i * dx;\n",
" y = sin(i) * width/2; \n",
" line3D([x0,y0,0],[x,y,0],d=wireDiameter,h=heigth, fn=fn); \n",
" }\n",
"}// we generate an hollow Ellipse\n",
"module springLeaf(width=3,len=10,height=5){\n",
" scale([len/10,height/10,1]) difference() {\n",
" cylinder(h=width, r=10, center=true);\n",
" cylinder(h=width+2, r=9, center=true);\n",
" }\n",
"}\n",
"\n",
"\n"
]
}
],
"source": [
"%displayCode"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "OpenSCAD",
"language": "application-xopenscad",
"name": "openscad"
},
"language_info": {
"extension": ".scad",
"mimetype": "application/x-openscad",
"name": "OpenSCAD"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment