Here's a way using SphericalPlot3D
.
The segment of the surface is closed by two polygons that are formed from vertices of the boundary of the surface plot. You have to repeat the PlotStyle
explicitly for the Polygon
s. A similar approach works for ParametricPlot3D
, too, provided the wedge of the surface is cut by planes (i.e. can be represented by planar polygons).
The idea is to sow the sample theta
, phi
values, recover them, and extract the boundaries. These can be remapped onto the surface and become the vertices of the polygons that form the angle of the wedge. The order of the vertices of the first polygon is reversed to get the right orientation (in case FaceForm
is used, for example).
sph[r_, theta_, phi_] := r {Sin[theta] Cos[phi], Sin[theta] Sin[phi], Cos[theta]};
wedge = With[{r = 1 + Sin[5 phi]/5},
Module[{plot, pts},
{plot, {pts}} = Reap @ SphericalPlot3D[r, {theta, 0, Pi}, {phi, 0.5, 1.8},
Mesh -> None, PlotStyle -> Yellow, EvaluationMonitor :> Sow[{theta, phi}]];
Show[
plot,
Graphics3D[{Yellow, Polygon[
Apply[Function @@ {{theta, phi}, sph[r, theta, phi]},
{Reverse @ Sort @ Cases[pts, {_, Min[Last /@ pts]}],
Sort @ Cases[pts, {_, Max[Last /@ pts]}]},
{2}]
]}]
]
]
]

To get an isometric projection of the graphics, you can play with ViewMatrix
. The key is to rotate a vector of the form $(\pm 1, \pm 1, \pm 1)$ to $(0,0,1)$ and project onto the first two coordinates. Translating and scaling will depend on the particular graphics, but perhaps the example below is sufficiently generalizable.
Show[wedge,
ViewMatrix ->
{TransformationMatrix[
RescalingTransform[
1.02 EuclideanDistance @@ Transpose[PlotRange /.
AbsoluteOptions[wedge, PlotRange]] {{-1/2, 1/2}, {-1/2, 1/2}, {-1/2, 1/2}}] .
RotationTransform[{{1, 1, 1}, {0, 0, 1}}] .
TranslationTransform[-Mean /@ (PlotRange /. AbsoluteOptions[wedge, PlotRange])]
],
IdentityMatrix[4]}]

RegionPlot3D
. – Jens Jul 3 '13 at 4:02