Skip to content

Instantly share code, notes, and snippets.

@pschatzmann
Created February 19, 2020 20:18
Show Gist options
  • Save pschatzmann/35903794a889cb40470f28c35d2e65a1 to your computer and use it in GitHub Desktop.
Save pschatzmann/35903794a889cb40470f28c35d2e65a1 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Scad4j Modules \n\nHere is an example how we can use the Scad4J library to build a first DRAFT of a simple RC airplane.\nWe demonstrate how to use modules to structure the generated scad source code.\n## Setup"},{"metadata":{"trusted":true},"cell_type":"code","source":"%classpath config resolver maven-public https://software.pschatzmann.ch/repository/maven-public/\n%classpath add mvn ch.pschatzmann:scad4j:0.0.1-SNAPSHOT","execution_count":40,"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"","version_major":2,"version_minor":0},"method":"display_data"},"metadata":{},"output_type":"display_data"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import ch.pschatzmann.scad4j._\nimport ch.pschatzmann.scad4j.d1._\n\nimport java.io.File\nimport java.net.URL","execution_count":41,"outputs":[{"data":{"text/plain":"import ch.pschatzmann.scad4j._\nimport ch.pschatzmann.scad4j.d1._\nimport java.io.File\nimport java.net.URL\n"},"execution_count":41,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"Because we want to publish this worspace, we display the result as (2D) pictures."},{"metadata":{"trusted":true},"cell_type":"code","source":"SCAD.setFormatter(new ch.pschatzmann.scad4j.format.OpenSCADFormatter())\nSCAD.setDisplay3D(false)\n\nvar model = new SCAD()\n","execution_count":42,"outputs":[{"data":{"text/plain":"scad4j V0.1"},"execution_count":42,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"## Building the Fuselage\nWe construct the fuselage with the help of a hollow cylinders. To demonstrate the logic - this is one example cylinder:"},{"metadata":{"trusted":true},"cell_type":"code","source":"var segment1 = model.cylinder().radius(1).numberOfFragments(40)\n .scale().values(6,8,1)\n .translate().values(0,-8/2,0)\nvar segment2 = model.cylinder().radius(1).numberOfFragments(40)\n .scale().values(6-0.1,8-0.1,1)\n .translate().values(0,-8/2,0)\n\nmodel.difference(segment1,segment2).display","execution_count":43,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 2 elements\n"},{"data":{"image/png":"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"},"execution_count":43,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"Now we are ready to build the complete body using a hull between cylinder segments:"},{"metadata":{"trusted":true},"cell_type":"code","source":"var len = 200.0\nvar raw = List((0.0, 7.0, 7.0),(5.0,7.5,7.5),(30.0,6.0,8.0),(50.0,6.0,11.0),(130.0,5.0,5.0),(len,4.0,4.0))\nvar group = model.group()\nfor (t <- raw){\n var x = t._1.asInstanceOf[Double]\n var y = t._2.asInstanceOf[Double]\n var z = t._3.asInstanceOf[Double]\n var obj1 = model.cylinder().radius(1).numberOfFragments(40)\n .scale().values(y,z,1)\n .translate().values(0,-z/2,x)\n var obj2 = model.cylinder().radius(1).numberOfFragments(40)\n .scale().values(y-0.1,z-0.1,1)\n .translate().values(0,-z/2,x)\n group.add(model.difference(obj1,obj2))\n}\n\nvar fuselage = model.hull(group)\n .rotate().values(270,0,0)\n .translate().values(0,-len/2,0)\n .toModule(\"fuselage\")\n\n\nfuselage.display","execution_count":44,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 5 elements\n"},{"data":{"image/png":"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"},"execution_count":44,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"In order to reduce the weight, we will cut out some structure from the body and just keep a frame"},{"metadata":{"trusted":true},"cell_type":"code","source":"var cutoutGroup = model.group();\n\nfor (pos <- -70 to 70 by 10) {\n var max = 10\n for (j <- 1 to 360 by 40) {\n var c1 = model.cube().size(9,30, 1).center\n .rotate().values(j,0,0)\n .translate().values(pos,0,0)\n .obj\n cutoutGroup.add(c1)\n }\n}\n\nvar cutout = cutoutGroup.rotate.values(0,0,90)\n .translate.values(0,0,3)\n .toModule(\"cutout\")\n\ncutout.display","execution_count":45,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 135 elements\n"},{"data":{"image/png":"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"},"execution_count":45,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"After having the cutout shape we can subtract it from the fuselage"},{"metadata":{"trusted":true},"cell_type":"code","source":"var fuselage1 = model.difference(fuselage, cutout)\n .toModule(\"fuselage1\")\n\nfuselage1.display","execution_count":46,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 167 elements\n"},{"data":{"image/png":"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"},"execution_count":46,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"## Construction of the Wings\nThe wing should consist of an airfoil. Like on the main body, we cut off some parts to keep just some ribbs which will be covered by some plastic foil. We start with the design of the airfoil.\n\nFrom the site http://chaaawa.com/airfoils/ we select an airfoil. e.g AG17 and copy the generated scad code.\n\n(Points from ag17.dat in the archive: http://m-selig.ae.illinois.edu/ads/archives/coord_seligFmt.tar.gz\nNot necessarily in the same order as in: http://m-selig.ae.illinois.edu/ads/coord/ag17.dat)\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"var airfoil = model.scad(\"\"\"\n ag17_points = [[999.985,0.254],[994.06,0.877],[982.067,2.158],[968.523,3.57],[954.679,4.997],[940.794,6.406],[926.907,7.801],[913.017,9.183],[899.126,10.558],[885.237,11.924],[871.348,13.28],[857.464,14.625],[843.579,15.9599],[829.697,17.281],[815.815,18.589],[801.93,19.883],[788.05,21.162],[774.167,22.424],[760.282,23.672],[746.399,24.905],[732.513,26.123],[718.624,27.325],[704.739,28.513],[690.854,29.685],[676.966,30.839],[663.0819,31.975],[649.2019,33.09],[635.318,34.18],[621.435,35.246],[607.557,36.286],[593.678,37.3],[579.7989,38.286],[565.925,39.244],[552.052,40.17],[538.178,41.065],[524.307,41.927],[510.4419,42.754],[496.577,43.544],[482.711,44.298],[468.851,45.013],[454.997,45.687],[441.142,46.32],[427.293,46.91],[413.451,47.453],[399.61,47.949],[385.774,48.396],[371.948,48.79],[358.1269,49.13],[344.31,49.414],[330.505,49.638],[316.712,49.797],[302.923,49.888],[289.15,49.9109],[275.394,49.856],[261.644,49.721],[247.916,49.5],[234.209,49.186],[220.519,48.772],[206.8599,48.25],[193.2329,47.61],[179.639,46.842],[166.099,45.9349],[152.607,44.871],[139.184,43.639],[125.846,42.218],[112.599,40.587],[99.4879,38.723],[86.527,36.593],[73.782,34.165],[61.297,31.395],[49.192,28.241],[37.643,24.669],[27.028,20.699],[18.0449,16.557],[11.377,12.72],[6.944,9.528],[4.076,6.955],[2.198,4.819],[0.966,2.984],[0.232,1.348],[0,-0.158],[0.353,-1.632],[1.387,-3.053],[3.064,-4.384],[5.465,-5.74],[8.937,-7.231],[14.154,-8.951],[21.949,-10.873],[32.2459,-12.732],[44.105,-14.262],[56.736,-15.45],[69.736,-16.335],[82.955,-16.967],[96.323,-17.399],[109.792,-17.665],[123.336,-17.797],[136.936,-17.812],[150.585,-17.728],[164.266,-17.555],[177.981,-17.301],[191.719,-16.977],[205.476,-16.593],[219.253,-16.155],[233.046,-15.669],[246.85,-15.141],[260.671,-14.578],[274.503,-13.983],[288.347,-13.366],[302.207,-12.732],[316.079,-12.08],[329.962,-11.417],[343.862,-10.744],[357.774,-10.065],[371.6979,-9.382],[385.636,-8.701],[399.584,-8.019],[413.536,-7.342],[427.477,-6.673],[441.406,-6.013],[455.325,-5.363],[469.238,-4.729],[483.14,-4.112],[497.034,-3.513],[510.923,-2.931],[524.811,-2.372],[538.693,-1.834],[552.571,-1.319],[566.445,-0.828],[580.319,-0.364],[594.185,0.0749],[608.0489,0.486],[621.908,0.87],[635.763,1.224],[649.612,1.549],[663.46,1.844],[677.307,2.109],[691.153,2.342],[704.999,2.543],[718.847,2.714],[732.698,2.8509],[746.549,2.956],[760.403,3.032],[774.259,3.071],[788.116,3.08],[801.978,3.057],[815.846,2.999],[829.713,2.909],[843.583,2.787],[857.456,2.6319],[871.329,2.447],[885.203,2.232],[899.081,1.983],[912.957,1.702],[926.835,1.395],[940.713,1.061],[954.593,0.693],[968.446,0.298],[982.051,-0.118],[994.064,-0.501]];\n rotate([90,0,90])\n linear_extrude(height=100)\n scale([20, 20])\n scale(0.001)\n polygon(points=ag17_points);\n \"\"\").toModule(\"airfoil\")\n\nairfoil.display","execution_count":61,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 1 elements\n"},{"data":{"image/png":"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"},"execution_count":61,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"If we would use the solid airfoil the plane would get too heavy. \nNext we collect the cut out cubes in a group and calcualte the difference:"},{"metadata":{"trusted":true},"cell_type":"code","source":"var cutoutWing = model.group()\nfor (w <- 0 to 8) {\n var cut1 = model.cube().size(9,7.5,20).translate().values(w*10+5,2,-10).obj\n var cut2 = model.cube().size(9,7.5,20).translate().values(w*10+5,11,-10).obj\n cutoutWing.add(cut1, cut2)\n}\nvar wing = model.difference(airfoil, cutoutWing)\n .toModule(\"wing\")\n\nwing.display","execution_count":60,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 19 elements\n"},{"data":{"image/png":"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"},"execution_count":60,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"In order to inclrease the flight stability we would like to have V schaped wings. We raise them a bit..."},{"metadata":{"trusted":true},"cell_type":"code","source":"var wing1 = wing.rotate().values(0,-4,0)\n .toModule(\"wing1\")\n\nwing1.display","execution_count":59,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 19 elements\n"},{"data":{"image/png":"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ACD0YVG5j/8CABD6sKjc9BcAgNCHRQIAcI6HRUWnvwAAnC8BABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABABAAvwIAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAAAfBbABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABABAAvwUAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAAEAAAAQBAAAAQAAAEAAABAEAAABAAAAQAAAEAQAAACOT//6upu2vAKj8AAAAASUVORK5CYII="},"execution_count":59,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"Finally we create the second wing as a copy of the first wing and apply a mirror and we combine the 2 wing parts."},{"metadata":{"trusted":true},"cell_type":"code","source":"var wing2 = wing1.mirror().values(1,0,0)\n .toModule(\"wing2\")\n\nvar wings = model.union(wing1, wing2)\n .toModule(\"wings\")\n\nwings.display","execution_count":58,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 38 elements\n"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAATaElEQVR42u3dy44cVxnAcd4AskaCXdBcTbY8QyQkxAIhpIhHQGLHjkcAIR4Csc+KLQFyJ7ZjhxB7HGPn4klIHNvJYDfdfWbOVFdXV5+qOtW3+km/BRvak0lUf3d9X5361mh0F4AB+pZfAYAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAIAA+C0ACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAACIDfAoAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAMKwA3PvrXuBfGMCAAnDvlb1LSgAwhADcf2UvuDdPCQB2NQDx6l+kBAA7HoCP/rZ3P3hlTwkABhGA8aW/JKUEM6MCJQDYugB8/Pe9j/6+N9+AmhL86nc/Wjg0VgKArQjA+OpflFKC+au/EgBsUwA++cf+hb1SBmpKUH/1ry+BGACsPwCfvro/cdmA5SVIv/QrAcCGBuDBa/sPQgCiZSVoffUv+vmvj5UAEIC1/dmnr++fjgMQJZQgy9W/4guBEgACsBqfv7H/2evnToOEEmS8+s8vEflOAAhA7/775sHnb+5PvLHfrgTZr/7uDgEC0Lsv3joIxhlILMH4Mj2+KI9lKUHcIjUnAARgdX/Yw38ePHx74su3DxJLML76xwBErUvQbolICQAB6OTR1cNH7xyMfTXOQFoJwtW/eCFuXYK4RdplkKAEgAA09vX1wyfXDh9fnUgpQbj0L7pYNy1B3hVSJQAEINXTm0dnNw6/eXcipQT1V/+mJYhbpD2ukCoBIAAV3j8ae/be0TgDKSVIv/p3+U6QfYnIdwJAAGbdPh59MPXvo5QStLv6V5agpy3SeBxpze0pJQAE4O7ozvHoZCqhBN2v/lHcIi1uEHUvQTyLNPH2lBIAAw3A1Zeff/avo9GtaQCWlSDj1T9ukVaukLYuQYtTSJUAGPoQOL0E3f+suEU6n5PWJYhnkXa/PaUEwBCfA1hBCUpbpFkmxsUV0vxbpF5WAwwkAL2WoLRFmmt3KJ5Dl/counD1VwJgcAHIXoKwQhq3SFvvDq1yi9R3AmDQASjeaSmX4HZqCUpbpB1vzqxmi9TdIUAAupYgbJF+ff0w412aPrZImy4RKQEwuAAklWCcgaot0ix/bnGFNNcWaesVUiUAhhiAcglOlpcgzxbpG/uVDyVk2SLt+OM5eggYVgAalWCcgXYliGeRLn0krfUWacZfhRIAwwpAfyWIZ5E2eiC50RZpxn/8uEWqBMDgAlBRgjvtSxDOIm19EOlatkjnf0glAIYVgCwlCFukWQ4jKm2Rjj8tYwnCq4xrDiJVAmCIAWhdgrBFmvkg0ukWaWmJaMVbpCNHDwFDC0CLEmS8+sc32scPTJwT9LdFqgTA4AIQ/OzFbz965+DyYYLcu0NF52+0f6P64KDWJci4RaoEwIACsLISlLZIu+8O2SIFBCCzl37yXPYShC3SL7dwi9R3AhCAIcpVgtVskeZaJK08i1QJQACUoHEJ4hvtV7ZF2roEiVukSgACoATr2SIdXZxFunSLtFEJbJECApDkT7//XnoJ+juL1BYpIADbUYIMjxHYIgUEYNNLcJK/BMXX2Xc8i9QWKSAAKyzBB51KsF1bpPdtkYIAKEGWEtgiBQRgiCUIW6SPVvVG+67Hkda+0X7kBZYgAMN09eXnm5agvzfany57o33r40gbT4yVAARgUCUov86+VIL3+90ijYukue4Oeak9CAA9liDXFmnlImmXEoQt0u6LpEoAAqAEvZQgbJHGRdJcE+M+FkmVAARACepK8PRm4y3SuEiad4v0k3/s9XQcaWUJxAAEQAlSSxC2SOMi6SZvkS5aJFUCEAAlaFyCPrZIJ4ukPWyRJi6SKgEIgBIsLEHx/5V9i3SySDrdIn3w2n7e7wRhj+h+8iKpEoAADM756+zTvhPELdK8i6Snr+9n3CJt8RiBEoAAKEFSCXJd/cMW6fwiaccSnC+S/q3rMFkJQACUIOnuUFNhi7R+kbS+BJ9WlaCPRVIlAAFQgmwlCFukX7yVukqUWIKwRZp9kfTe/CKpEoAAKEGLEnz1z4OHUy1mCS2+E/S7SKoEIADDKsFJ+xKELdLui6QLM5C1BIvOo1YCEAAlKJTgduoW6ZNrORdJx5fgsEUaF0lzlSBskSYukioBCIAS1JXg6c2jsxuZHyMIW6SVi6RdStB6kVQJQACUYGEJMgYgbJHG86hzzQnCFmnHRVIlAAEYlp+9+O3LEtxpcHeo9SLp52/uLypKuxJkXyRVAhCAwZXg0TsH/ZUgbJEmLpKmlyBskeZ9jGDmSQIlQAAYjpd+8tzMqytLJbh4dWWjEoQt0odvN14kTSxB9vOog3vzlAABQAnSSxC2SMcf1WWWsLLnCeLVv2hRCR5fPQz814IAoATVR1JnXCQ9P486LJK+up+3BHGRtDIDpRI8vnb4+NphbECR/2YQAJTg7tmNw2/enci4ShS2SE9fKy+SdixBXCSNB1PXlCBU7UloQJEeIADstj/9/nvpJYhHUudaJA1HUsfPzHJ3qHT1ry9BvPrP0wMEACVoPzGuXyT9/M2K86g7zgniIml8nqCmBDVX/6KXfvNC8afSAwSAoZdgnIEuJfjirSXnUbcrQQzA0hJ8ff0weHI96eq/6GfTAwQAJWjwyQ+nR1J/2WSXtOmp1PUliFf/kiezPai5+usBAoASNC7B+KO+anskdcMS7FeWYNHVv6TR1V8PEACUYEkJwrWv+5HUpRI8eHWySJpSgrDIVLQoALl+aXGMrAcIALvg6svPtyhBvODmPZT09LX9eCp1fQnObhyezQWgsgcd//pfenJibL5eNTHQAwSALSzBSV0JejqSOp5KXV+C/42v/iXvVveg76t/5bcZPUAA2OISVL+6sqoEeY+kjs8T1JfgfzePLt04XNSDbFf/i3lyu7tbeoAAsOMl6PgkQTyVemkJno6/f0y/gkQ1Pej+S8g1SdYDBAAlqH6SIFhagvBHnN+GKlrcg7MOPch79Z+/laQHCADbX4IP2pcgnkodX06wqASj8R994VlQ1YPxxTruFD2tvVlU/4NlHyTEACz6QD1AABhQCcKR1PF5gpoShLMrZlT1YHxtLQagqP5m0XwPVnz11wMEgAGV4OvpZDU+T1BTgplPK5xlVOpBuPrXPGjWqAdjpQ/sPkt40uGhBD1AANidEoRTqc+vjLUlmHzsrYuPWhyD+ut1lx5s1CS5+EiaHggAbJDz19mnlSA8T1BfgvNpc3CrYLYHTf+2XlOCvMtF2a/+lXeTfD8QANi1EozuXLl8PvnkeCYGhR50v1cTrv7PqibJXb4f9DdJrnkuYenhRXogALDpJRjdvXLuw6k7Vyp7kO1O/cUwuWaS3Gi56GwdV389EADYhRKM7l8Z3Zv6z1QxBoUeZAvA4kFCl2Fy9klyx+PtHG4qALDZJRhfiz/+4cRHU+MSxBjM9iDb5XWan5RP67hctDmT5PIwWQ8EADaiBA9+eO6TqWIMCj3IdvW/GCa3+MD6SXKuHvQ3SS7dTfL9QABg3SX47IVzp1PFGJR6MC5Bxz/9drZJcriAxieT5wcJHYfJfVz96z9TDwQAVlqCye2d8VU+XPo/e6Ecg1IPPp7tQYs/9CTzJHmUNklO78HZyg+lWP4wmh4IAPTnFz/+zpdvHUxuzYcLfSkGpS8HrXswnSSHi3Xfk+SO84OMV/9c70qzXCQAsAp//sP3Jz1Y9OWgvgcfLejBxTA57yQ5/am0+hg87XmYnPHfTsowWQ8EAPJ47y8/mFxqG90smh8eTG3CJLkyBvGY64zLRSsbJvt+IACw2ptFKx4elCbJt7NNkovD5MpBQrse9PpYcsr6rB4IAKzwZlF/w4P5SfLJccZnvorD5FwPH+R9U2aXYbIeCABswM2idsODkovHkvNOkoczTNYDAYDe/fKnz+UZHvQ6SR7dbTRJHq3ppOuexgkhA3ogALANw4PCMDnPD1YYJrf+23R5mPze+TA5Vw/ioa2ruaGkBwIAuzg82MJh8qiHJ5NHTQ46HXgPBAA2bHjwSavhQfmptOMtGiZn3ia63viY6+LXnUH1QABgG24WNT22qDBMzvOT9zlM7v6mzD7GCUPogQDANtwsavTkwZYPk7vPk/PeUHq8u/NkAYBd2TSdHSbnvPrnHiY3ejh57dtEix5O3oEeCAAYHiwbJt/qZZjcbp5cP0xe1zx5S3sgAGB4UKvPYXLKMdfzPah5bfK6tom2tAcCADZNk4bJeefJPQ2T+3g4Ocs8eTPPNxUAMDxY9TA5zJM3eZg8Ws1h1+t+GY4AwK7Jc0zF7AuTsw+T231mzW2ivD3oY548Wvzy5HV9ORAAGMbNouIL0dr1oPsPc+tynpzlH6342uTsDyevcZ68sh4IAAx4eJDrZlHyMDnnO5Nn58n1N4saLRfFNyf3cfVv//LkHnogAGB4cLSKHmQfJtfOk1ssF/U3Tx5t6suTBQDIumla2YPpMDnMk7P9wGGe/P5Rx3cmr+Ckip4mCt1fniwAQLdN0ybD5A2ZJ9d/M8jbg77nyUHKctF8DwQA2LCbRSufJ4erfxgmP517PrljD77pYaIwH4C6GFxb+G1AAIAeNk177cF0mJx9nvwsbZ7cqAd9LxSliBkQAKDPTdPsw4OF8+Tj/PPk6U5R6TM7Lhf1MU8Ot5WeBMkZMAMAtmp4UPn502Hy6MPc8+TaAypy9SDvQlFRfQ/++NvvCgCw5cOD6TA58zw5jJSbHFCR0oOUeXKuq//SHtgCArZh0zStBzmv/vnmyeUXHsw+opxluShMFBIzECz6678AABt2s2j1x1RknyeP7k7myYtfeNC6B3GkXFIfAM8BADt0syhjD+4cT5wcZ57TXsyTix/bfblo8j/ePTxbkIHKHtT89V8AgAFvmk6HyWGenP2AivpHlLMsF6X0oP5HFQBgJ4YHp817cO9KeOdB/gMq/n3UKCo99aD+r/8CAAx70/R+7r/+37o8oyLLMPlypHxzxtIeLL36CwAw4E3T7O88mM6Tw0JRzpHye0fxtQeXFsXgogcCALhZtJ53HmQfKYeTKmIM6nuQcvUXAMCmae3NovQefHilv3cexJMqovoeCABA7c2ivMdU9PHOg9Hlaw/KFscg8eovAIBN0xzDgz7eeTC6fO1BXC6qjsFsDwQAYHuGBzU7RcEHsxb3IP3qLwAA6x4e1O8URbeOU3ogAABr2jTNfkzF9KSK+A6c+h40uvoLAMAKbxal9+DimIq4XDQTg5PqGAgAwDpuFuUdHlwcUxGXi2ZjUNGDpld/AQDIf7Oo0zEVH89uFl28A2cmBlU9EACA7dw0TTi26DIGcz1ocfUXAIAt3DSd64EAAOz0pumCHrS7+gsAwNZvmgoAwE7dLErsQeurvwAAbPemqQAADHXTtMPnCADAQAkAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAgAD4FQAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAIgN8CgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAgAD4LQAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAIAAACAIAAACAAAAgAAAIAgAAAIAAACAAAAgCAAAAgAAAIAAACAIAAACAAAAgAAN38Hxrif0qLwrhKAAAAAElFTkSuQmCC"},"execution_count":58,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"## Horizontal Stabilizer\nWe can construct the back wing from the initial wing that we have defined above. We just need to reposition it to the back and scale it:"},{"metadata":{"trusted":true},"cell_type":"code","source":"var horizontalStabilizer = wing.translate().values(-50, +180, +3)\n .scale().values(0.4)\n .toModule(\"horizontalStabilizer\")\n\nhorizontalStabilizer.display","execution_count":57,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 19 elements\n"},{"data":{"image/png":"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"},"execution_count":57,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"## Vertical Stabilizer\n\nFor the vertical stabilizer we select a symetrical NACA format.\n\n(Points from naca0006.dat in the archive: http://m-selig.ae.illinois.edu/ads/archives/coord_seligFmt.tar.gz\nNot necessarily in the same order as in: http://m-selig.ae.illinois.edu/ads/coord/naca0006.dat)\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"var verticalStabilizer = model.scad(\"\"\"\n naca0006_points = [[1000,0.63],[950,4.03],[900,7.24],[800,13.12],[700,18.32],[600,22.82],[500,26.47],[400,29.02],[300,30.01],[250,29.71],[200,28.69],[150,26.73],[100,23.41],[75,21],[50,17.77],[25,13.07],[12.5,9.4699],[0,0],[12.5,-9.47],[25,-13.07],[50,-17.77],[75,-21],[100,-23.41],[150,-26.73],[200,-28.69],[250,-29.71],[300,-30.01],[400,-29.02],[500,-26.47],[600,-22.82],[700,-18.32],[800,-13.12],[900,-7.24],[950,-4.03]];\n translate([0,70,0])\n scale([0.01,0.01,1])\n linear_extrude(height=20)\n rotate([0,0,90])\n polygon(points=naca0006_points);\n \"\"\").toModule(\"verticalStabilizer\")\n\nverticalStabilizer.display","execution_count":53,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 1 elements\n"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAANpklEQVR42u3dUYocRQDG8dzAVzHZFclrTpIDeBNffRJFJBGTID4IEkSNLl7AA+QMuYCX8CUODDSVrZ7e6Zntnur6fvA7QVXz/d242/3g/ft/AQj0wBEACAAAAgCAAAAgAMCy/nv3xCEgAJC4/n//+KlzQAAgcf0FAAGArOkf1l8AEAAIXX8BQAAgaP0FAAGA0PW/eXUtAAgAZE3/fv0FAAGA0PUXAAQAQtdfABAACFr/v15eCwACAInrLwAIAGRN/7D+AoAAQNb6CwACAOnrLwAIAISuvwAgABAx/fX6CwACAKHrLwAIAISuvwAgABC6/gKAAEDo+gsAAgB9Tv+d6y8ACACErr8AIADQ4fqfEwCnigBA5+svAAgAdDX9x6+/ACAAELr+AoAAQOj6CwACAJ2s/58vrgUAAYDE9RcABABC118AEAAImv5y/QUAAQDrLwAIAMSsvwAgAJCy/gKAAID1FwAEADKmf3T9BQABgND1FwAEAELXXwAQAOh5/d/8cC0ACAAkrr8AIAAQuv4CgABA0PSX6y8ACACErr8AIAAQuv4CgABA6PoLAAIAoesvAAgAhK7/cgEY1l8AEAC42Pr/cXj9BQABgD6nf7/+AoAAQOj6CwACAKHrLwAIAAStvwAgAGD9BQABgNT1FwAEAELXXwAQAAhd/9UCMPpnwAKAAMCy0z+x/gKAAEDo+gsAAgDdrv/v318JAAgAiesvACAAhK6/AIAAELr+AgACQOj6CwAIAKHrLwAgAISuf8sBcMUIACy4/gIAAkDo+gsACACh6y8AIACErr8AgADQ4fT/9vxqRwBAAEhcfwEAASB0/QUABIDQ9RcAEABS1v/XZ1cCAAJA4voLAAgAoesvACAAhK6/AIAAELr+AgACQOj6CwAIABEBeP3dlQCAAJC1/rvp3xMAEAAS118AQAAIXX8BAAEgdP0FAASA0PUXABAA+l//X759JAAgAGSt/2769wQABIDE9T/UAAEAAaD/9RcAEAAiAlCvvwCAAND5+v/89aMdAfC0IAAkrr8ACAACQOj6xwZgWH8BQABICcBPXz3cEQABQABIXH8BEAAEgKz1f/HlJwIgAAgAWQHYTf+eAAgAAkBKAIbpFwABQADo1tubx+X0f/PFxzsCIAAIACk/AXz+9KM9ARAABIAgw/oLgAAgAAiAAAgAAkBkAG41QAAEAAEgPQBlA+4rAHc2QABAABAAAUAAQABWDMDoq0AFAAFAAAQABAABSAqAxwYBQAAEAAQAARAAEAC25e3NYwEQAAQAARAAAUAAEAABEAAEAAEQAAFAABAAARAABAAB2GYATn4PhAAgAAiAAAgAAoAACAAIAH0EYPSbMAIgAAgAAiAAAoAAIAACAAKAAAgACAACIAAgAAiAAIAAIAACAAJAPwEYbYAAgAAgAAIAAoAACAAIAAIgACAACIAAgAAgAAIAAoAACAAIAAIgACAALOyf158JgAAgAIQSAAFAABAAARAABAABEAABQAAID0DZAAEQAAQAAYgLwLD+AoAAIAACAAKAAAgACAACIAAgAGw4AId+EWhuAOoGCAAIAAIgACAACIAAgABwEeX74ARAABAABEAABAABQAAEQAAQAARAAAQAAUAATvlTAAEAAWCTASgbEBsADwwCgAAIAAgAAiAAIAAIgACAACAAAgACwHYCcPxXIQUABAAB6DYAvgeJACAAAiAACAACIACeGQQAARAAEAAEQABAABAAAQABQAAEAAQAATjYAAEAAUAABAAEAAEQABAABEAAQAAQAAFAAOC+CYAAIAAIgAAIAAKAAGw2AIfWXwAQABAAAUAAQAAEAAFAAARAABAABEAABAABQAAEQAAQAASgDMBoAwQABAABEAAQAARAAEAAEAABAAGgLeX74OoAlA0QAE8LAkDnATj0Q4AAeFoQAARAAEAAEIDeAzCsvwAgAAiAAIAAIAACAAKAAAgACAACIAAgAAiAAIAAIAACAAKAAAgACAACIAAgAAhA4wHwqCAA9ByA6ReCCgAIAAIgACAACIAAgADQfQCmvwsvACAACIAAgAAgAAIAAoAAXDYAs9ZfABAABEAABAABQAAEwNOCACAAAgACQCcEQAAQAARAAAQAAUAABEAAEAAEIC0Aw/oLAAKAAAiAACAACIAAgAAgAAIAAoAAjDRAAEAAEAABAAFAAAQABAABEAAQAARAAEAAuITyfXACIAAIAALQbgDeCAACAAIgAAgANBeAugECAAKAAAgACABNBqBsgAAIAAKAAAgACAACIAAgAHQfgLIBAgACgAAIAAgAAiAAIAAIgACAANB5AE77KJgAgAAgAAIAAoAANByAYf0FAAGg/wBMvw1CAEAAEAABAAFAAAQABAABEAAQAARAAEAAEIDtB8BDggAgAAIAAkBfBEAAEAAEQAAEAAFAABYOwHQDBAAEAAEQAAQABEAAEAAQAAFAAGC9AEx/E0YAQAAQAAEAAUAABAAEAAEQABAABEAAQAAQAAEAAUAABAAEgLXV34UXAAFAABAAARAABAABEAAQAARAAEAAEAABAAFAAAQABAAB2GgAhvUXAAQAARAAAUAAEAABAAFAAAQABIA+A1A2QAA8IQgAAiAAIAAIwPwA1A0QABAABEAAQAAQAAEAAUAABAAEgEsGoGyAAIAAIAACAAJAXwGY/lswAQABQAAEAAQAARAAEAAEQABAANiY8wNQN0AAQAAQAAEAAUAABAAEAAFoOQDD+gsAAoAACAAIAAKQFADPBgKAAHwQgGN+E1QAQAAQAAEAAUAABAAEAAEQABAABEAAQAAQgPsOwPHrLwAIAAIgAAKAABCj/iiYAAgAAoAACAAIAAIgACAACIAAgAAgAAIAAkDvAZj1VUgBAAFAAAQABAABEAAQAARAAEAA6DMAdQMEAAQAARAAEAAEQABAABAAAQABQAAEAASACwWgbIAAgAAgAAIAAoAACAAIAALQQgDO/yCwACAACIAACAACgAAIgMcDASAnAPVvggoACAA9E4Bh/QUAAUAABEAAEAAEQABAAAgMwOhngQUABAABEAAQAARAAEAAEAABAAFAAAQABAABEAAQAARAAEAAEAABAAFAAAQABAABEAAQAARAABAAWEz9SQAB8FQgAAhAVgD85z8CgAAIgAcDAUAABAAEAAEQABAABEAAQAAQAAEAAUAABAAEAAEQABAAugtA3QABAAFAAAQABAABEAAQAATg+ABMNEAAEABoLgB1AwQABAABEAAQAARAAEAA2GIAZv0pgACAACAAAgACwHYCUDZAAEAAEAABAAFAAAQABIA+CIAAIAAIgAAIAAJAZADqXwQSABAABEAAQAAQAAEAAUAABAAEAAEQABAABEAAQAAQAAEAAUAABAAEAAEQABAAGg/A6DdhBAAEAAEQABAABEAAQADYnLmfBRYAEAAEYPMBGNZfABAABEAABAABQAAiA+B5QAAQAAEAAUAAYgLgYUAAEID7DMCtBggACAAC0FYAPAkIAAIgACAACEBMADwGCAACIAAgAAhATAA8AwgAAtBJAGa9CMgDgAAgAAIAAoAAxATA7SMACIAAgAAgAGcHYPptEO0EwNUjAAiAAIAAIAAxAXDvCAAkBsClIwAgACAAZFszANMNWCEArhsBAAEAAUAAPgxA2YDOAuCuEQBIDICLRgDgYADqfwWqA1A3QABAABCAdgPglhEAEAAQAJgTgIn/DdB+AFwxAgACAAIAMQFwvwgAJAbA5SIAIAAgABATADeLAIAAgADAmIk3Qm83AK4VAYDEALhTBAAEAAQAYgLgQhEAEAAQADg1AKd9EuCCAXCbCAAkBsBVIgAgACAAEBMA94gAgACAAEBMAFwiAgCJAXCDCAAIAAgAxATA9SEAIAAgABATAHeHAEBiAFwcAgACAAIAMQFwawgACAAIAJxhWwFwXwgAJAbAZSEAIAAgABATADeFAIAAgABATABcEwIAiQFwRwgArBGAsgECAAJARADqHwJaCIALQgAgMQBuBwEAAQABgJgAuBoEAAQABABiAuBeEABIDIBLQQBgDROfBBAAEAAEYL0AuBEEABID4DoQAKeAAIAAQEwA3AUIAM0FYGjAcgFwESAANB2AugECAAKAAJweALcAAkBiAFwBCAACAALgFIgJgPMHASAxAA4fBIBGA3DMnwIIAAgAAjAvAE4eBIDEADh2EAAEABAAYgLgzEEAEABAAIgJgAMHASAxAE4bBIC2CAAIAAKwYACcMwgAPQfgVgOsPwgA0QFwwiAACAAgAMQEwPGCAJAYAGcLAoAAAAJATAAcLAgAiQFwqiAAbCkA+wacHwBHCgLAJgMw+llgAQABQADuaIDzBAEgMQAOEwQAAQAEgOZNfBJgVgCcJAgAiQFwjCAAJAbAGYIAIACAABATAAcIAkBiAJweCACJAXB0IAAkBsC5gQAgAIAAEBMAhwYCQGIAnBgIAIkBcFwgACQGwFmBACAAgAAQEwAHBQJAYgCcEggAiQFwRCAAJAbA+YAAkBgAhwMCQOdGA+BYQABIDIAzAQEgMQAOBASAxAA4DRAAsgLgEEAAABAAAAQAAAEAQAAAEAAABAAAAQBAAAAQAAAEAAABABAApwAgAAAIAAACAIAAACAAAAgAAAIAgAAAIAAANOd/+V3il0ltdP8AAAAASUVORK5CYII="},"execution_count":53,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"## Combining Wings and Fusellage\nThe fuselage seems to be too big. So we scale it down and we combine all components:"},{"metadata":{"trusted":true},"cell_type":"code","source":"var fuselage2 = fuselage1\n .translate().values(0,60,0)\n .scale().values(0.5)\n .toModule(\"fuselage2\")\n\nvar airplane = model.union(\n fuselage2, \n wings, \n horizontalStabilizer,\n verticalStabilizer\n).toModule(\"airplane\")\n\nairplane.display","execution_count":54,"outputs":[{"name":"stderr","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 225 elements\n"},{"data":{"image/png":"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"},"execution_count":54,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"Finally we save the result in a STL file"},{"metadata":{"trusted":true},"cell_type":"code","source":"airplane.save(new File(\"airplane.stl\"))","execution_count":55,"outputs":[{"data":{"text/plain":"airplane.stl"},"execution_count":55,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"Because we defined our model with the help of modules the related scad code is quite readable:"},{"metadata":{"trusted":true},"cell_type":"code","source":"model.modules.list","execution_count":63,"outputs":[{"data":{"text/plain":"[airfoil, airplane, cutout, fuselage, fuselage1, fuselage2, horizontalStabilizer, verticalStabilizer, wing, wing1, wing2, wings]"},"execution_count":63,"metadata":{},"output_type":"execute_result"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"airplane","execution_count":56,"outputs":[{"data":{"text/plain":"\n\nmodule airfoil() {\n \n ag17_points = [[999.985,0.254],[994.06,0.877],[982.067,2.158],[968.523,3.57],[954.679,4.997],[940.794,6.406],[926.907,7.801],[913.017,9.183],[899.126,10.558],[885.237,11.924],[871.348,13.28],[857.464,14.625],[843.579,15.9599],[829.697,17.281],[815.815,18.589],[801.93,19.883],[788.05,21.162],[774.167,22.424],[760.282,23.672],[746.399,24.905],[732.513,26.123],[718.624,27.325],[704.739,28.513],[690.854,29.685],[676.966,30.839],[663.0819,31.975],[649.2019,33.09],[635.318,34.18],[621.435,35.246],[607.557,36.286],[593.678,37.3],[579.7989,38.286],[565.925,39.244],[552.052,40.17],[538.178,41.065],[524.307,41.927],[510.4419,42.754],[496.577,43.544],[482.711,44.298],[468.851,45.013],[454.997,45.687],[441.142,46.32],[427.293,46.91],[413.451,47.453],[399.61,47.949],[385.774,48.396],[371.948,48.79],[358.1269,49.13],[344.31,49.414],[330.505,49.638],[316.712,49.797],[302.923,49.888],[289.15,49.9109],[275.394,49.856],[261.644,49.721],[247.916,49.5],[234.209,49.186],[220.519,48.772],[206.8599,48.25],[193.2329,47.61],[179.639,46.842],[166.099,45.9349],[152.607,44.871],[139.184,43.639],[125.846,42.218],[112.599,40.587],[99.4879,38.723],[86.527,36.593],[73.782,34.165],[61.297,31.395],[49.192,28.241],[37.643,24.669],[27.028,20.699],[18.0449,16.557],[11.377,12.72],[6.944,9.528],[4.076,6.955],[2.198,4.819],[0.966,2.984],[0.232,1.348],[0,-0.158],[0.353,-1.632],[1.387,-3.053],[3.064,-4.384],[5.465,-5.74],[8.937,-7.231],[14.154,-8.951],[21.949,-10.873],[32.2459,-12.732],[44.105,-14.262],[56.736,-15.45],[69.736,-16.335],[82.955,-16.967],[96.323,-17.399],[109.792,-17.665],[123.336,-17.797],[136.936,-17.812],[150.585,-17.728],[164.266,-17.555],[177.981,-17.301],[191.719,-16.977],[205.476,-16.593],[219.253,-16.155],[233.046,-15.669],[246.85,-15.141],[260.671,-14.578],[274.503,-13.983],[288.347,-13.366],[302.207,-12.732],[316.079,-12.08],[329.962,-11.417],[343.862,-10.744],[357.774,-10.065],[371.6979,-9.382],[385.636,-8.701],[399.584,-8.019],[413.536,-7.342],[427.477,-6.673],[441.406,-6.013],[455.325,-5.363],[469.238,-4.729],[483.14,-4.112],[497.034,-3.513],[510.923,-2.931],[524.811,-2.372],[538.693,-1.834],[552.571,-1.319],[566.445,-0.828],[580.319,-0.364],[594.185,0.0749],[608.0489,0.486],[621.908,0.87],[635.763,1.224],[649.612,1.549],[663.46,1.844],[677.307,2.109],[691.153,2.342],[704.999,2.543],[718.847,2.714],[732.698,2.8509],[746.549,2.956],[760.403,3.032],[774.259,3.071],[788.116,3.08],[801.978,3.057],[815.846,2.999],[829.713,2.909],[843.583,2.787],[857.456,2.6319],[871.329,2.447],[885.203,2.232],[899.081,1.983],[912.957,1.702],[926.835,1.395],[940.713,1.061],[954.593,0.693],[968.446,0.298],[982.051,-0.118],[994.064,-0.501]];\n rotate([90,0,90])\n linear_extrude(height=100)\n scale([20, 20])\n scale(0.001)\n polygon(points=ag17_points);\n \n}\n\nmodule airplane() {\n \n union() {\n fuselage2();\n wings();\n horizontalStabilizer();\n verticalStabilizer();\n } \n}\n\nmodule cutout() {\n translate([0.0,0.0,3.0]) rotate(a=[0.0,0.0,90.0]) {\n translate([-70.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-70.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-60.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-50.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-40.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-30.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-20.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([-10.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([0.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([10.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([20.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([30.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([40.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([50.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([60.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[1.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[41.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[81.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[121.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[161.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[201.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[241.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[281.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n translate([70.0,0.0,0.0]) rotate(a=[321.0,0.0,0.0]) cube([9.0,30.0,1.0],center=true); \n } \n}\n\nmodule fuselage() {\n translate([0.0,-100.0,0.0]) rotate(a=[270.0,0.0,0.0]) {\n \n hull() {\n \n difference() {\n translate([0.0,-3.5,0.0]) scale([7.0,7.0,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-3.5,0.0]) scale([6.9,6.9,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n \n difference() {\n translate([0.0,-3.75,5.0]) scale([7.5,7.5,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-3.75,5.0]) scale([7.4,7.4,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n } \n \n hull() {\n \n difference() {\n translate([0.0,-3.75,5.0]) scale([7.5,7.5,1.0]) cylinder(,r=1.0,$fn=40.0); \n translate([0.0,-3.75,5.0]) scale([7.4,7.4,1.0]) cylinder(,r=1.0,$fn=40.0); \n } \n \n difference() {\n translate([0.0,-4.0,30.0]) scale([6.0,8.0,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-4.0,30.0]) scale([5.9,7.9,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n } \n \n hull() {\n \n difference() {\n translate([0.0,-4.0,30.0]) scale([6.0,8.0,1.0]) cylinder(,r=1.0,$fn=40.0); \n translate([0.0,-4.0,30.0]) scale([5.9,7.9,1.0]) cylinder(,r=1.0,$fn=40.0); \n } \n \n difference() {\n translate([0.0,-5.5,50.0]) scale([6.0,11.0,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-5.5,50.0]) scale([5.9,10.9,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n } \n \n hull() {\n \n difference() {\n translate([0.0,-5.5,50.0]) scale([6.0,11.0,1.0]) cylinder(,r=1.0,$fn=40.0); \n translate([0.0,-5.5,50.0]) scale([5.9,10.9,1.0]) cylinder(,r=1.0,$fn=40.0); \n } \n \n difference() {\n translate([0.0,-2.5,130.0]) scale([5.0,5.0,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-2.5,130.0]) scale([4.9,4.9,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n } \n \n hull() {\n \n difference() {\n translate([0.0,-2.5,130.0]) scale([5.0,5.0,1.0]) cylinder(,r=1.0,$fn=40.0); \n translate([0.0,-2.5,130.0]) scale([4.9,4.9,1.0]) cylinder(,r=1.0,$fn=40.0); \n } \n \n difference() {\n translate([0.0,-2.0,200.0]) scale([4.0,4.0,1.0]) cylinder(r=1.0,$fn=40.0); \n translate([0.0,-2.0,200.0]) scale([3.9,3.9,1.0]) cylinder(r=1.0,$fn=40.0); \n } \n } \n } \n}\n\nmodule fuselage1() {\n \n difference() {\n fuselage();\n cutout();\n } \n}\n\nmodule fuselage2() {\n scale([0.5,0.5,0.5]) translate([0.0,60.0,0.0]) fuselage1();\n}\n\nmodule horizontalStabilizer() {\n scale([0.4,0.4,0.4]) translate([-50.0,180.0,3.0]) wing();\n}\n\nmodule verticalStabilizer() {\n \n naca0006_points = [[1000,0.63],[950,4.03],[900,7.24],[800,13.12],[700,18.32],[600,22.82],[500,26.47],[400,29.02],[300,30.01],[250,29.71],[200,28.69],[150,26.73],[100,23.41],[75,21],[50,17.77],[25,13.07],[12.5,9.4699],[0,0],[12.5,-9.47],[25,-13.07],[50,-17.77],[75,-21],[100,-23.41],[150,-26.73],[200,-28.69],[250,-29.71],[300,-30.01],[400,-29.02],[500,-26.47],[600,-22.82],[700,-18.32],[800,-13.12],[900,-7.24],[950,-4.03]];\n translate([0,70,0])\n scale([0.01,0.01,1])\n linear_extrude(height=20)\n rotate([0,0,90])\n polygon(points=naca0006_points);\n \n}\n\nmodule wing() {\n \n difference() {\n airfoil();\n {\n translate([5.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([5.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([15.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([15.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([25.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([25.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([35.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([35.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([45.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([45.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([55.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([55.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([65.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([65.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([75.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([75.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([85.0,2.0,-10.0]) cube([9.0,7.5,20.0]); \n translate([85.0,11.0,-10.0]) cube([9.0,7.5,20.0]); \n } \n } \n}\n\nmodule wing1() {\n rotate(a=[0.0,-4.0,0.0]) wing();\n}\n\nmodule wing2() {\n mirror(v=[1.0,0.0,0.0]) wing1();\n}\n\nmodule wings() {\n \n union() {\n wing1();\n wing2();\n } \n}\n\nairplane();"},"execution_count":56,"metadata":{},"output_type":"execute_result"}]}],"metadata":{"kernelspec":{"name":"scala","display_name":"Scala","language":"scala"},"language_info":{"nbconverter_exporter":"","codemirror_mode":"text/x-scala","name":"Scala","mimetype":"","file_extension":".scala","version":"2.11.12"},"widgets":{"application/vnd.jupyter.widget-state+json":{"state":{"3266ec43-4e01-4b00-bae4-0cf681993634":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"580b07db-4421-4fe3-8222-e5843aceced0":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"60f807a1-d887-4af1-b066-9ee8843b4a7f":{"model_module":"beakerx","model_module_version":"*","model_name":"FoldoutModel","state":{"background_color":null,"children":["IPY_MODEL_f6d6a559-f36a-4204-bcb8-e330d83b7c6e"],"color":null,"description":"","disabled":false,"font_family":"","font_size":"","font_style":"","font_weight":"","headerLabel":"Added jar: ","hidePreview":false,"layout":"IPY_MODEL_cdbd3650-1d28-4b8d-af31-f5c1338e32af","msg_throttle":3,"visible":true}},"cdbd3650-1d28-4b8d-af31-f5c1338e32af":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"df7bd68f-f9aa-4548-b130-29fcf29615e5":{"model_module":"@jupyter-widgets/base","model_module_version":"*","model_name":"LayoutModel","state":{"_model_module_version":"*","_view_module_version":"*","align_content":"","align_self":"","border":"","bottom":"","flex":"","height":"","justify_content":"","left":"","margin":"","max_height":"","max_width":"","min_height":"","min_width":"","msg_throttle":3,"overflow":"","overflow_x":"","overflow_y":"","padding":"","right":"","top":""}},"f6d6a559-f36a-4204-bcb8-e330d83b7c6e":{"model_module":"beakerx","model_module_version":"*","model_name":"BxHTMLModel","state":{"background_color":null,"color":null,"font_family":"","font_size":"","font_style":"","font_weight":"","layout":"IPY_MODEL_df7bd68f-f9aa-4548-b130-29fcf29615e5","msg_throttle":3,"placeholder":"","value":"scad4j-0.0.1-SNAPSHOT.jar","visible":true}}},"version_major":2,"version_minor":0}},"toc":{"nav_menu":{},"number_sections":false,"sideBar":false,"skip_h1_title":false,"base_numbering":1,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":false,"toc_position":{},"toc_section_display":false,"toc_window_display":false}},"nbformat":4,"nbformat_minor":4}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment