Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

My code:

Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}]

Output:

enter image description here

And now I can export this to STL by using the export STL command, however, when I try to print this on the MakerBot 3D printer there is a problem because the width of the graph is too thin. I need to increase the thickness of the width of the graph, can I do this in Mathematica?

share|improve this question
1  
Try with RegionPlot3D[] –  belisarius Nov 24 '13 at 1:49
    
I'm confused by your terminology. What do mean by "width" and "thickness"? I have no idea what dimension "width" refers to, and as for "thickness", a surface it infinitesimally thin by definition. –  m_goldberg Nov 24 '13 at 3:49
    
Here's an article about 3D printing from Mathematica... there are some tricks to take note of. segerman.org/3d_printing_notes.html –  bill s Nov 24 '13 at 4:20

3 Answers 3

up vote 8 down vote accepted

Try this:

Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}, 
 PlotStyle -> Thickness[1]]

thick

And remember to watch your units - if you print in millimetres, 1 is a bit small...

For Version 10

The above no longer works in Mathematica version 10. Instead of Plot3D, use ParametricPlot3D:

ParametricPlot3D[{x, y, (2 x y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2},
 PlotStyle -> Thickness[1]]

still thick

share|improve this answer
    
This may be version 9 and later, not sure... –  cormullion Nov 24 '13 at 8:31
    
What about AbsoluteThickness? edit: it seems it's not supported. –  shrx Nov 24 '13 at 11:54
    
@shrx AbsoluteThickness doesn't appear to work for this application... –  cormullion Nov 24 '13 at 12:01
    
+1. Well, wasn't that easy? :) –  Michael E2 Nov 24 '13 at 12:53
    
@MichaelE2 :) our answers reflect our contrasting math skills... –  cormullion Nov 24 '13 at 12:55

You can take advantage of the VertexNormals that Plot computes to translate the surface a little to each side. I'm not sure just what is required for good STL output. I put a polygonal side all around the two surfaces. The VertexNormals are wrong for the sides, so I commented them out for the image presented.

The thickness is controlled by the parameter thickness.

With[{plot = Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}, Mesh -> None]}, 
 With[{n0 = VertexNormals /. Cases[plot, HoldPattern[VertexNormals -> _], Infinity],
       thickness = 0.1}, 
  With[{pts = First @
         Cases[plot, 
               GraphicsComplex[p_, e__] :> Flatten[{p - thickness n0, p + thickness n0}, 1],
               Infinity],
        vn = First @ Cases[plot, HoldPattern[VertexNormals -> v_] :> Join[v, v], Infinity]},
   Graphics3D[
    GraphicsComplex[
     pts,
     {EdgeForm[],
      Cases[plot, Polygon[p_] :> Polygon@Join[p, p + Length[pts]/2], Infinity],
      Cases[plot, 
       Line[p_] :> Polygon[Join[#, Reverse@# + Length[pts]/2] & /@ Partition[p, 2, 1]],
       Infinity]}
     (*, VertexNormals -> vn *)
     ],
    PlotRange -> All,
    Options[plot]
    ]
   ]]]

Graphics

share|improve this answer
1  
This was a very detailed answer, and I appreciate you taking the time to write it. I chose the other only out of simplicity but I am sure your answer may have future benefits, thanks. –  Ratman2050 Nov 24 '13 at 23:22
    
Hey, no problem. The other way is definitely superior based on simplicity. Also, the other answer does what this one does and more. –  Michael E2 Nov 24 '13 at 23:26

In version 10.0.0 the PlotStyle -> Thickness method shown by cormullion does not appear to work. Instead we can use the undocumented Extrusion option:

ContourPlot3D[x y z == 0.05, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Extrusion -> 0.1]

enter image description here

share|improve this answer
1  
Aaaaaaagh. They're supposed to add new features for new releases, not remove ones.. –  cormullion Jul 16 at 16:36

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.