{"id":173,"date":"2011-01-08T17:58:45","date_gmt":"2011-01-08T16:58:45","guid":{"rendered":"http:\/\/ikmaak.nl\/eenblog\/?p=173"},"modified":"2014-07-01T13:09:00","modified_gmt":"2014-07-01T12:09:00","slug":"creating-curvy-3d-designs-with-openscad-and-qcad","status":"publish","type":"post","link":"https:\/\/ikmaak.nl\/eenblog\/2011\/01\/08\/creating-curvy-3d-designs-with-openscad-and-qcad\/","title":{"rendered":"Creating curvy 3d designs with OpenSCAD and QCad"},"content":{"rendered":"<p>Recently, I put together a demonstration object in OpenSCAD and QCad for a friend to impress people with.<br \/>\nHis response, after I demonstrated how it was done, was &#8220;if this was a screencast, I would watch it&#8221;.<br \/>\nI don&#8217;t like screencasts, so I thought I&#8217;d write a tutorial.<br \/>\nThe object itself is fairly useless, but looks cool and is easy to make. Hopefully this will make OpenSCAD a bit less scary.<br \/>\nYou will need QCad and OpenSCAD installed, so do that first.<br \/>\nTo get QCad for Windows, download it from <a href=\"http:\/\/qcadbin-win.sourceforge.net\/\"> sourceforge<\/a>. OpenSCAD is at <a href=\"http:\/\/openscad.org\/\">openscad.org<\/a>.<br \/>\nHere is what the finished object looks like printed:<br \/>\n<a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/IMG_4565.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/IMG_4565.jpg\" alt=\"Finished Object\" width=\"1600\" height=\"1200\" class=\"aligncenter size-full wp-image-968\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/IMG_4565.jpg 1600w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/IMG_4565-300x225.jpg 300w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/IMG_4565-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/a><br \/>\n<!--more--> So let&#8217;s walk through the process of building it.<br \/>\nOpen up QCad.<br \/>\n<a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/00qcadempty.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-174 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/00qcadempty.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/00qcadempty.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/00qcadempty-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><br \/>\nClick the &#8220;Line&#8221; button. This changes the toolbar to the line menu. The arrow at the top takes you back to the previous menu.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/01qcadline.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-175 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/01qcadline.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/01qcadline.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/01qcadline-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the first button, &#8220;Line with two points&#8221;. This changes the toolbar to the &#8220;snap to&#8221; menu.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/02linewith2p.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-176 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/02linewith2p.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/02linewith2p.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/02linewith2p-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click &#8220;Snap to grid&#8221;. This makes sure that you can only select points that are on the grid.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/03snaptogrid.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-177 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/03snaptogrid.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/03snaptogrid.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/03snaptogrid-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><br \/>\nTry it out by moving the mouse pointer around in the empty drawing field. It will jump from grid point to grid point.<\/p>\n<p>Now, position your cursor near the first grid point to the right of the red crosshair.<br \/>\nThe display at the bottom of the window should read 10,0. This shows you the coordinates you are currently at.<br \/>\nBecause you are in snap to grid mode, it will snap to the nearest grid point.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/04coords010.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-178 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/04coords010.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/04coords010.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/04coords010-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click, then move the cursor until it snaps to 0,0 (the red crosshair). Click on that. This creates a line segment from 10,0 to 0,0.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/05lineto00.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-179 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/05lineto00.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/05lineto00.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/05lineto00-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Move the cursor until it snaps to 0,70. Click on that to add a line segment.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/06lineto070.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-180 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/06lineto070.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/06lineto070.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/06lineto070-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Move the cursor until it snaps to 20,70. Click to add the final line segment, then right-click to finish the line.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/07lineto2070.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-181 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/07lineto2070.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/07lineto2070.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/07lineto2070-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click on the arrow at the top of the toolbar twice to go back to the main menu.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/08arrowback1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-183 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/08arrowback1.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/08arrowback1.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/08arrowback1-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the &#8220;Arc&#8221; button.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/09arcmenu.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-184 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/09arcmenu.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/09arcmenu.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/09arcmenu-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the &#8220;Arc with three points&#8221; button.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/10arcthreepoints.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-185 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/10arcthreepoints.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/10arcthreepoints.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/10arcthreepoints-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click on the following points: 20,70; 10,50; 20,40. You now have an arc.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/11firstarc.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-186 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/11firstarc.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/11firstarc.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/11firstarc-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Make a second arc with points 20,40; 30,20; 20,10.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/12secondarc.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-187 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/12secondarc.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/12secondarc.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/12secondarc-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Make a third arc with points 20,10; 10,0; 20,-10. It will extend past the bottom line. Let&#8217;s fix that.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/13thirdard.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-188 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/13thirdard.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/13thirdard.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/13thirdard-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Go back to the main menu (click the arrow twice) and click the &#8220;Edit&#8221; button.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/14edit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-189 alignnone\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/14edit.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/14edit.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/14edit-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the &#8220;Trim\/Extend two&#8221; button. This will make sure two lines do not extend beyond the point they meet at.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/15trimextend2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-190\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/15trimextend2.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/15trimextend2.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/15trimextend2-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the first line.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/16firstline.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-191\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/16firstline.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/16firstline.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/16firstline-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Click the last arc.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/17secondline.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-192\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/17secondline.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/17secondline.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/17secondline-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>And we&#8217;re done.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/18done.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-193\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/18done.png\" alt=\"\" width=\"950\" height=\"580\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/18done.png 950w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/18done-300x183.png 300w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>Save the shape in any directory you like, and name the file &#8220;outline.dxf&#8221;. You can close QCad now.<br \/>\nNow, start up OpenSCAD<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/19openscad.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-194\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/19openscad.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/19openscad.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/19openscad-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Save the empty file it start with as &#8220;object.scad&#8221; in the same directory as outline.dxf.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/20savefile.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-195\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/20savefile.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/20savefile.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/20savefile-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Okay, let&#8217;s load our outline and extrude it. We&#8217;ll use the OpenSCAD rotate_extrude function, which takes an outline and rotates it in a circle around the X=0 line, forming a solid object.<br \/>\nThis requires that the outline is closed, which is why we had to trim the last arc in QCad.<br \/>\nType in the following line:<br \/>\n<code> <\/code><\/p>\n<pre>rotate_extrude(file=\"outline.dxf\");<\/pre>\n<p>note the quotes and the semicolon. These are important. Press F5 to see your work.<br \/>\nYou can right-drag the window on the right to pan, and left-drag to rotate the camera.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/21rotextrude.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-196\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/21rotextrude.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/21rotextrude.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/21rotextrude-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Impressive, no? Okay, let&#8217;s try something different. Change the text so it looks like this:<br \/>\n<code> <\/code><\/p>\n<pre>cube([30,4,70]);\r\n%rotate_extrude(file=\"outline.dxf\");<\/pre>\n<p>The % makes an object translucent, and removes that object when the model is rendered. Right now, we are just using it to<br \/>\nbe able to see inside the object. Press F5 to see what happens.<br \/>\nThe cube we added is inside the extruded object.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/22cube.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-197\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/22cube.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/22cube.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/22cube-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Now change the code to:<br \/>\n<code> <\/code><\/p>\n<pre>rotate([0,0,360\/5])cube([30,4,70]);\r\n%rotate_extrude(file=\"outline.dxf\");<\/pre>\n<p>Again, press F5 to see the result. The cube has rotated around the Z (vertical) axis by 360\/5=72 degrees.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/23rotation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-198\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/23rotation.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/23rotation.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/23rotation-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Now, change it to say:<br \/>\n<code> <\/code><\/p>\n<pre>for(i=[1:5]){\r\nrotate([0,0,i*360\/5])cube([30,4,70]);\r\n}\r\n%rotate_extrude(file=\"outline.dxf\");<\/pre>\n<p>This is a for-loop. It sets the value of i to 1, then 2, then 3 and so on up to 5, and executes the rotate-cube command once for each value.<br \/>\nSo you have one cube rotated by 72*=72 degrees, one by 72*2=144 degrees, one by 72*3=216 degrees, and so on.<br \/>\nNote how the cubes are off center. That&#8217;s because the cube command makes a cube with one corner at 0,0,0 and the other corner at 30,4,70, so it is not centered on the Y axis.<br \/>\nTo make the center of the cube be at 0,0,0, you can use <code>cube([30,4,70],center=true);<\/code><\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/24for.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-199\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/24for.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/24for.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/24for-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Now, change the code to the following:<br \/>\n<code> <\/code><\/p>\n<pre>intersection(){\r\nunion(){\r\nfor(i=[1:5]){\r\nrotate([0,0,i*360\/5])cube([30,4,70]);\r\n}\r\n}\r\nrotate_extrude(file=\"outline.dxf\");\r\n}<\/pre>\n<p>This time, press F6 to see the result. It will take a bit longer than before.<br \/>\nThe union command combines everything within the curly brackets after it into one object.<br \/>\nThe intersection command looks at two or more objects and generates a new object out of only the parts where the objects overlap.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/25intersection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-200\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/25intersection.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/25intersection.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/25intersection-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Interesting result, isn&#8217;t it? Note how the outer curve is cut off a little bit. Let&#8217;s fix that. Change the cube&#8217;s width to 32:<br \/>\n<code> <\/code><\/p>\n<pre>intersection(){\r\nunion(){\r\nfor(i=[1:5]){\r\nrotate([0,0,i*360\/5])cube([32,4,70]);\r\n}\r\n}\r\nrotate_extrude(file=\"outline.dxf\");\r\n}<\/pre>\n<p>Again, hit F6 to see the result.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/26size.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-201\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/26size.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/26size.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/26size-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Nice and curvy this time.<br \/>\nLet&#8217;s add some more curves. You can indent the file to make it more readable:<br \/>\n<code> <\/code><\/p>\n<pre>union(){\r\n    intersection(){\r\n        union(){\r\n            for(i=[1:5]){\r\n                rotate([0,0,i*360\/5])cube([32,4,70]);\r\n            }\r\n        }\r\n        rotate_extrude(file=\"outline.dxf\");\r\n    }\r\n    scale([0.5,0.5,1]) rotate_extrude(file=\"outline.dxf\");\r\n}<\/pre>\n<p>Note how the new union command wraps everything we had so far. The scale command changes the size of an object.<br \/>\nHere, we scale the extruded shape by 0.5 in the X and Y dimensions, and by 1 in the Z dimension.<br \/>\nHit F6 to see the result.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/27scale.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-202\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/27scale.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/27scale.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/27scale-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Let&#8217;s add a hollow cylinder. To do this, we subtract a smaller cylinder from a bigger one.<br \/>\nThe difference command subtracts the second and following objects\u00a0 from the first object it is given:<br \/>\n<code> <\/code><\/p>\n<pre>union(){\r\n    intersection(){\r\n        union(){\r\n            for(i=[1:5]){\r\n                rotate([0,0,i*360\/5])cube([32,4,70]);\r\n            }\r\n        }\r\n        rotate_extrude(file=\"outline.dxf\");\r\n    }\r\n    scale([0.5,0.5,1]) rotate_extrude(file=\"outline.dxf\");\r\n    difference(){\r\n        cylinder(r=25,h=70);\r\n        cylinder(r=24,h=70);\r\n    }\r\n}<\/pre>\n<p>Again, press F6 to see the result. Use the mouse to rotate the object and look at it from different angles.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/28difference.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-203\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/28difference.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/28difference.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/28difference-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Save the object by pressing F2. Then, click on the &#8220;Design&#8221; menu and select &#8220;Export as STL&#8230;&#8221;. Name it &#8220;object.stl&#8221; or anything you like.<br \/>\nYou now have an STL file you can use with Skeinforge, Repsnapper, or Reprap Host to print.<\/p>\n<p><a href=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/29export.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-204\" src=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/29export.png\" alt=\"\" width=\"480\" height=\"348\" srcset=\"https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/29export.png 800w, https:\/\/ikmaak.nl\/eenblog\/wp-content\/uploads\/2011\/01\/29export-300x217.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>For more information on OpenSCAD, read through the <a href=\"http:\/\/en.wikibooks.org\/wiki\/OpenSCAD_User_Manual\">OpenSCAD manual<\/a> (it&#8217;s not very long).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently, I put together a demonstration object in OpenSCAD and QCad for a friend to impress people with. His response, after I demonstrated how it was done, was &#8220;if this was a screencast, I would watch it&#8221;. I don&#8217;t like screencasts, so I thought I&#8217;d write a tutorial. The object itself is fairly useless, but &hellip; <a href=\"https:\/\/ikmaak.nl\/eenblog\/2011\/01\/08\/creating-curvy-3d-designs-with-openscad-and-qcad\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Creating curvy 3d designs with OpenSCAD and QCad<\/span><\/a><\/p>\n","protected":false},"author":505,"featured_media":968,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[9,26],"class_list":["post-173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-reprap","tag-english","tag-reprap"],"_links":{"self":[{"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/posts\/173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/users\/505"}],"replies":[{"embeddable":true,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/comments?post=173"}],"version-history":[{"count":11,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/posts\/173\/revisions"}],"predecessor-version":[{"id":969,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/posts\/173\/revisions\/969"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/media\/968"}],"wp:attachment":[{"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/media?parent=173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/categories?post=173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ikmaak.nl\/eenblog\/wp-json\/wp\/v2\/tags?post=173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}