我需要制作一些以复杂的方式相交的 3D 盒子(即平行六面体)的图片,因此我尝试了 pst-solides3d。
这是最小的工作示例:一个细长的蓝色框应在其中心刺穿一个扁平的黄色框。
\documentclass{standalone}
\usepackage{pstricks,pst-solides3d}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psset{viewpoint=20 25 15,Decran=50,solidmemory}
\axesIIID(0,0,0)(2,2,2)
\psSolid[name=longbox,
object=parallelepiped,
a=3,b=.2,c=.2,
fillcolor=blue](.5,.5,.5)
\psSolid[
name=flatbox,
object=parallelepiped,
a=.25,b=2,c=2,
fillcolor=yellow](.5,.5,.5)
\psSolid[object=fusion,
action=draw,
base=flatbox longbox]
(0,0,0)
\composeSolid
\end{pspicture}
\end{document}
输出结果很奇怪:薄盒子的一块变成了黄色。似乎包装无法确定哪块表面在前面。
使用选项action=draw**
,结果甚至更糟:
难道我做错了什么?
答案1
绘制隐藏表面需要蓝色立方体的六个以上的多边形形状。当然,action=none
除最后一个之外,所有对象都必须计算:
\documentclass{standalone}
\usepackage{pst-solides3d}
\begin{document}
\begin{pspicture}(-3,-2)(3,3)
\psset{viewpoint=20 25 15,Decran=50,solidmemory,action=none}
\axesIIID(0,0,0)(2,2,2)
\multido{\rA=0.0+0.3,\iA=0+1}{11}{%
\psSolid[name=l\iA, object=parallelepiped,a=0.3,b=.2,c=.2,
fillcolor=blue](-0.75 \rA\space add .5 .5)}
\psSolid[
name=flatbox,
object=parallelepiped, a=.25,b=2,c=2,fillcolor=yellow](.5,.5,.5)
\def\List{l0 }
\psforeach{\iA}{1,2,..,10}{\xdef\List{\List\space l\iA\space }}
\psSolid[object=fusion,action=draw**,base=flatbox \List]
\end{pspicture}
\end{document}