# “Show” with Manipulate runs fine normally, but gives errors as a CDF

I've simplified my code to what can reproduce my error. Basically, I have two lines:

 spherePoint[x_] := Graphics3D[Sphere[{x, 0, 0}, 1]];
Manipulate[Show[spherePoint[m]], {{m, 1}, -Pi/2, Pi/2}]


This runs perfectly fine when I evaluate it in a mathematica notebook, but when I do a CDF preview (or export), it gives me the error

Show::gtype: spherePoint is not a type of graphics. >>


What gives?! Show should accept Graphics3D, and spherePoint is a graphics 3D object! (I'm not sure about the last part of that sentence, because it's a function that gives a graphics 3d object, but I don't know what that implies for the program)

What am I doing wrong?

-
Add the option SaveDefinitions -> True to your Manipulate command. –  Mark McClure Dec 12 '12 at 20:27
Of course you want to include an option such as PlotRange->3 in the Show expression; otherwise, the sphere doesn't appear to move as you change the slider. –  murray Dec 13 '12 at 16:48

The problem is that CDF player cannot execute any code outside the Manipulate scope (or some type of dynamic scope). Specifically, it doesn't know your definition of spherePoint. You can get around this using the SaveDefinitions or Initialization option. My experience is that Initialization is usually a bit more cross-platform independent. Here's how to use it:
spherePoint[x_] := Graphics3D[Sphere[{x, 0, 0}, 1]];

@NeuroFuzzy Note how the value of the Initialization is wrapped in parentheses. You can wrap an arbitrary block of code in those parentheses - i.e. (f1[x_] := def1; f2[x_] := def2) –  Mark McClure Dec 13 '12 at 1:21