4

How can the opacity of a pst-3dplot object be set to be transparent? I have an example where using opacity or strokeopacity options do not work. I am trying to make an image similar to the following:

sphere in oil

With the hopes of showing more detail inside the sphere such as this:

drawing

However, I cannot get the top portion of the sphere to appear different than the bottom through the opaque surface, or get the sphere to be transparent to see the inner lines/tagging.

Here is what I have tried (compiled with XeLatex+MakeIndex+BibTex in TeXWorks):

\documentclass{article}
\usepackage{pst-3dplot}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp

\def \planeLocRatio {.7}
\def \radius {1}
\def \cylLength {5}
\def \planeLen {5}
\FPeval{\theta}{pi/4}
\FPeval{\b}{radius*cos(theta)}
\FPeval{\a}{radius*sin(theta)}
\FPeval{\h}{radius-radius*cos(theta)}


\begin{document}

\begin{figure}[H]
    \begin{center}
        \begin{subfigure}[b]{0.3\textwidth}
            \begin{pspicture}(-4,-2.25)(2,4.25)
                %\psset{Alpha=45, Beta=0}
                \pstThreeDCoor
                \pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,0,\b)
                \pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,\a,\b)
                \pstThreeDLine[linewidth=2pt,linecolor=green] (0,0,\b)(0,\a,\b)
                \pstThreeDLine[linewidth=2pt,linecolor=black] (0,\a,\b)(0,\radius,\radius)
                \pstThreeDSphere[strokeopacity=0.1](0,0,0){\radius}
                \pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.9](-5,-5,\planeLocRatio)(0,10,0)(10,0,0)
                %\pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.5](- \planeLen /2,- \planeLen /2,\planeLocRatio)(0,\planeLen,0)(\planeLen,0,0)
            \end{pspicture}
            \caption{Sphere model}
        \end{subfigure}%
        \begin{subfigure}[b]{0.3\textwidth}
            \begin{pspicture}(-4,-2.25)(2,4.25)
                \psCylinder[RotX=-15,RotY=45](0,0,0){\radius}{\cylLength}       
                %\pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.5](- \planeLen /2,- \planeLen /2,\planeLocRatio)(0,\planeLen,0)(\planeLen,0,0)
            \end{pspicture}
        \caption{Cylinder Model}
        \end{subfigure}
    \caption{Sphere and cylinder particle models at the interface.}
    \end{center}
\end{figure}
\end{document}

Which outputs this at the moment:

output

--

Update: Herbert's answer was good and got many of the main points in for this figure, but I am looking to switch gears due to his answer pointing out that the package does not do hidden lines. Also, I would like to have the top surface in a different coloring than the bottom surface and a different color for the intersection area as well.

So here is what I have at the moment, which now has different issues which I will be making other questions about or updating here for future interests in this problem.

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{pst-solides3d}
\usepackage{fp}

\pagestyle{empty}


\def \planeLocRatio {.7}            % ratio of z location of plane and radius
\def \radius {0.5}
\def \planeLen {1}              % half of one side of the plane
\FPeval{\contAng}{pi/4}         % angle from z axis to intersection of plane at sphere edge
\FPeval{\a}{radius*cos(contAng)}    % z location at plane intersection
\FPeval{\a2}{a/2}
\FPeval{\b}{radius*sin(contAng)}    % radius of circle at plane intersection
\FPeval{\b2}{b/2}
\FPeval{\h}{radius-radius*cos(contAng)} % z distance from top of sphere to plane
\FPeval{\h2}{h/2}
\FPeval{\imgsize}{planeLen+1}  % maybe increasing this helps /hbox errors?

\begin{document}
\begin{center}
    \begin{pspicture}[solidmemory](-\imgsize,-\imgsize)(\imgsize,\imgsize)

        % ==================  VIEW ===================
        \psset{
            viewpoint=10 45 20 rtp2xyz,
            lightsrc=viewpoint,
            %lightintensity=1.25
            }


        % ================== POINTS ==================
        % origin
        \psSolid[object=point,args=0 0 0, name=O, text=O, pos=br]
        \psSolid[object=point,args=0 0 \a, name=A, text=A, pos=uc]

%%%%%%% Causes hbox problems
        %\psSolid[object=point,args=0 \b \a, name=B, text=B, pos=uc]

        % ================== LINES ==================

        % origin to center of circle at plane intersection
        \psSolid[object=line,linecolor=black!50,linewidth=2pt,args=O A, name=OA]
        % label the equation to the side of the line midway through the line
        %\psProjection[object=point,definition=milieu,args=O A,text=$Rcos \theta$,pos=uc]

        % line from origin to side of sphere intersected with plane
        %\psSolid[object=line,linecolor=black!50,linewidth=2pt,args=O B, name=OB]
        %\psProjection[object=point,definition=milieu,args=O B,text=$Rsin \theta$,pos=uc]

        % line from A to B
        %\psSolid[object=line,linecolor=black!50,linewidth=2pt,args=A B, name=AB]



        % ================== SPHERE ==================
        \psSolid[
            object=sphere,
            name=mySphere,
            r=\radius,
            ngrid=30 30,            % number of grid lines across 2 dimensions r
            grid=false,         % remove line edges
            hue=0 0.5,
            opacity=0.4,
            hollow=true,
            intersectiontype=0,
            intersectionplan=0 0 1 \a,
            intersectioncolor=(bleu)
            ](0,0,0)

        % ================== PLANE ==================
        \psSolid[
            object=plan,
            name=myPlane,
            definition=solidface,
            args=mySphere 1,
            base=-1 1 -1 1,
            action=draw,
            ](A,,)

    \end{pspicture}
\end{center}
\end{document}

which at the moment outputs:

img

1 Answer 1

3

The current version of http://texnik.dante.de/tex/generic/pst-3dplot/pst-3dplot.tex takes the values of opacity and strokeopacity into account:

\begin{pspicture}(-4,-2.25)(2,4.25)
 \psset{Alpha=45, Beta=10}
 \pstThreeDCoor
 \pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,0,\b)
 \pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,\a,\b)
 \pstThreeDLine[linewidth=2pt,linecolor=green] (0,0,\b)(0,\a,\b)
 \pstThreeDLine[linewidth=2pt,linecolor=black] (0,\a,\b)(0,\radius,\radius)
 \pstThreeDSquare[fillcolor=blue!40,fillstyle=solid,opacity=0.4](-5,-5,\planeLocRatio)(0,10,0)(10,0,0)
 \pstThreeDSphere[opacity=0.3,strokeopacity=0.3,linewidth=0.1pt](0,0,0){\radius}
\end{pspicture}

However, if you want hidden lines and surfaces then use `pst-solides3d? instead.

enter image description here

2
  • Thanks @Herbert, that works well! However, I think you are right about looking into hidden lines and surfaces with pst-solides3d. I have been working on making the figure with that package but keep gettin "hbox overfull" errors. They happen all of the time with several things: planseparation, adding points or lines, etc. Do you know what would cause this?
    – chase
    Mar 27, 2014 at 1:54
  • Overfull hboxes canhappen if your pspicture coordinates are wider than the current \textwidth
    – user2478
    Mar 27, 2014 at 7:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .