我需要多次绘制由融合操作构建的自定义对象。对象组合涉及曲线类型对象,第一次插入后成功绘制。但尝试添加第二个时,空白屏幕(我使用在线 latex 编辑器)清除了整个图片。我的怀疑来自曲线对象融合,但我不确定。
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}[showgrid=false](-0.5,-3.7)(8.5,6)
\psset{viewpoint=20 0 40 rtp2xyz,lightsrc=20 45 50 rtp2xyz,Decran=30}
\psset{solidmemory}
\makeatletter
\newcommand{\dofAxis}[1]{
\def\r {2.5}
\psSolid[object = cone,
h = 0.2,
r = 0.07,
RotX = 90,
RotY = 45,
RotZ = 85,
fillcolor = black,
grid = false,
action = none,
name = A](0,\r,0)
\defFunction[algebraic]{FIII}(t){\r*cos(t)}{\r*sin(t)}{0}
\psSolid [object = courbe,
r = 0.01,
range = 1.55 6.6,
linecolor = black,
linewidth = 0.1,
ngrid= 360 8,
function = FIII,
action = none,
name = B]
\psSolid[ object = fusion,
base =A B,
action = draw**,
linewidth = 0.1, name =C](#1)%
}
\@namedef{p1}{ 0.00 0.00 0.00 }
\@namedef{p2}{ 2.00 -2.00 1.00 }
\dofAxis{\@nameuse{p1}}
%\dofAxis{\@nameuse{p2}}
\makeatother
\end{pspicture}
\end{center}
\end{document}
这是一个简化的代码,包含一个单一函数\dofAxis{}
,该函数是由尖端(实心圆锥)和主体形成的圆角箭头,主体是由 绘制的部分圆 object=courbe
。之后,执行融合操作以简化并创建一个可以移动的单一对象,提供 3d 坐标点作为函数的参数。为了调用它,我在列表中通过宏\@nameuse{p1}
中的变量名提供了一个 3d 坐标点\dofAxis{\@nameuse{p1}}
。此对象的实际用途是为包含在更大图表中的多个轴(它们之间不相关)提供可自定义的信息。因此,为了简化对象构造,考虑了使用融合操作的方法。
一如往常,欢迎任何建议。
PS:主要目标是保持抽象方法,使用可自定义的参数绘制参数化的融合对象。PS2:添加第二张图像以阐明融合对象。
答案1
我找到了一个替代解决方案。有问题的对象courbe
被替换为不同的对象object=surfaceparametree
,修改了 7.11.3。示例 2pst-solides3d 手册(第 103 页)。
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}[showgrid=false](-5.5,-3.7)(8.5,6)
\psset{viewpoint=20 45 45 rtp2xyz,lightsrc=20 45 50 rtp2xyz,Decran=30}
\psset{solidmemory}
\makeatletter
\newcommand{\dofAxis}[2]{
\defFunction{helix}(u,v)
{2 .02 v Cos mul sub u Cos mul 0.3 mul}
{2 .02 v Cos mul sub u Sin mul 0.3 mul}
{.01 v Sin mul}
\psSolid[ object = surfaceparametree,
linewidth = 0.5,
base = -4.725 0 0 6.28,
fillcolor = gray!80,
incolor = gray!50,
function = helix,
action = none,
ngrid = 60 0.4,
name = A]%
\psSolid[object = cone,
h = 0.25,
r = 0.08,
RotX = 90,
RotY = 45,
RotZ = 85,
fillcolor = black!70,
linecolor = black!70,
linewidth = 0.01,
grid = false,
action = draw,
name = B](0,0.6,0)
\psSolid[ object = fusion,
base = A B ,
action = draw**,
grid = false,
name = C, #2](#1)%
}
\@namedef{p1}{ 0.00 0.00 0.00 }
\@namedef{p2}{ 2.00 -2.00 1.00 }
\@namedef{p3}{ 2.00 -4.00 2.00 }
\dofAxis{\@nameuse{p1}}{}
\dofAxis{\@nameuse{p2}}{RotX = 90}
\dofAxis{\@nameuse{p3}}{RotY=90}
\makeatother
\end{pspicture}
\end{center}
\end{document}