diff options
author | Karl Berry <karl@freefriends.org> | 2010-02-16 00:35:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-02-16 00:35:50 +0000 |
commit | 2ab1a7155c3306e7445bf3a2c76dfe07186ccb87 (patch) | |
tree | 2c20d8fcfcf5763a8cbd5f8c39701ac02efce6a9 /Master/texmf-dist/tex/generic | |
parent | 6ba76788b9f7516e9f9e0e7b507a42a2c7a2305a (diff) |
pst-3dplot 1.89 (14feb10)
git-svn-id: svn://tug.org/texlive/trunk@17046 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-3dplot/pst-3dplot.tex | 663 |
1 files changed, 345 insertions, 318 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-3dplot/pst-3dplot.tex b/Master/texmf-dist/tex/generic/pst-3dplot/pst-3dplot.tex index 395d95988b8..146b6fbf4ba 100644 --- a/Master/texmf-dist/tex/generic/pst-3dplot/pst-3dplot.tex +++ b/Master/texmf-dist/tex/generic/pst-3dplot/pst-3dplot.tex @@ -1,4 +1,4 @@ -%% $Id: pst-3dplot.tex 136 2009-10-06 21:37:53Z herbert $ +%% $Id: pst-3dplot.tex 293 2010-02-14 17:11:57Z herbert $ %% %% This is file `pst-3dplot.tex', %% @@ -20,58 +20,34 @@ \csname PSTThreeDplotLoaded\endcsname \let\PSTThreeDplotLoaded\endinput % Requires PSTricks, pst-node, pst-plot, multido packages -\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi -\ifx\PSTnodesLoaded\endinput\else\input pst-3d.tex\fi +\ifx\PSTricksLoaded\endinput\else \input pstricks.tex\fi +\ifx\PSTnodesLoaded\endinput\else \input pst-3d.tex\fi \ifx\PSTricksAddLoaded\endinput\else\input pstricks-add.tex\fi% loads node and plot -\ifx\PSTMultidoLoaded\endinput\else\input multido.tex\fi +\ifx\PSTMultidoLoaded\endinput\else \input multido.tex\fi +\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi % -\def\fileversion{1.86} -\def\filedate{2009/10/06} +\def\fileversion{1.89} +\def\filedate{2010/01/28} \message{`PST-3dplot' v\fileversion, \filedate\space (HV,DL)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax -\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi + \pst@addfams{pst-3dplot} \SpecialCoor -% -%%%%%%%%%%%%%%%%%% Macrolist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% \def\pstThreeDPut -% \def\pstThreeDLine -% \def\pstThreeDDot -% \def\pstThreeDNode -% \def\pstUThreeDPut -% \def\pstThreeDSquare -% \def\pstThreeDBox -% \def\pstThreeDSphere -% \def\pstThreeDEllipse -% \def\pstThreeDPlotFunc -% \def\psplotThreeD -% \def\parametricplotThreeD -% \def\psThreeDPlot -% \def\pstThreeDCoor -% \def\fileplotThreeD -% \def\dataplotThreeD -% \def\listplotThreeD -% -% + \newdimen\pst@dimf -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% ---------------- the if's ----------------- % \define@boolkey[psset]{pst-3dplot}[Pst@]{Debug}[true]{}% \define@boolkey[psset]{pst-3dplot}[Pst@]{drawing}[true]{}% draw the coordinates? \define@boolkey[psset]{pst-3dplot}[Pst@]{drawCoor}[true]{}% draw the coordinates of a dot? \define@boolkey[psset]{pst-3dplot}[Pst@]{hiddenLine}[true]{}% emulate hidden line surface? \define@boolkey[psset]{pst-3dplot}[Pst@]{SphericalCoor}[true]{}% (r,phi,theta) -\define@boolkey[psset]{pst-3dplot}[Pst@]{showgrid}[true]{}% draw the coordinates of a dot? -% \Pst@CylindricalCoorfalse}% +\define@boolkey[psset]{pst-3dplot}[Pst@]{IIIDshowgrid}[true]{}% draw the coordinates of a dot? +\define@boolkey[psset]{pst-3dplot}[Pst@]{CoorCheck}[true]{}% check the coordinates \define@boolkey[psset]{pst-3dplot}[Pst@]{CylindricalCoor}[true]{}% (r,phi,z) -% \Pst@SphericalCoorfalse}% \define@boolkey[psset]{pst-3dplot}[Pst@]{leftHanded}[true]{}% left-Handed coor \define@boolkey[psset]{pst-3dplot}[Pst@]{eulerRotation}[true]{}% Use Euler rotation definition -\define@key[psset]{pst-3dplot}{coorType}{% +\define@key[psset]{pst-3dplot}{coorType}[0]{% \pst@getint{#1}\psk@ThreeDplot@coorType \ifcase\psk@ThreeDplot@coorType % 0 is the default @@ -90,53 +66,53 @@ % 0 default % 1 z y are orthogonal and angle x|y is Alpha, Beta has no meaning % 1 z y are orthogonal and angle Alpha is always 135, x-axis shortened by 1/sqrt(2), Beta has no meaning -\define@key[psset]{pst-3dplot}{SphericalCoorType}[0]{\pst@checknum{#1}\psk@ThreeDplot@SphericalCoorType} +\define@key[psset]{pst-3dplot}{SphericalCoorType}[0]{\pst@getint{#1}{\psk@ThreeDplot@SphericalCoorType}} \psset[pst-3dplot]{drawing,drawCoor,hiddenLine=false,SphericalCoor=false,SphericalCoorType=0, - leftHanded=false,eulerRotation=false,coorType=0,showgrid} + leftHanded=false,eulerRotation=false,coorType=0,IIIDshowgrid} % % ------- the global definitions for the pspicture frame ------ % -\define@key[psset]{pst-3dplot}{xMin}{\pst@checknum{#1}\psk@ThreeDplot@xMin } -\define@key[psset]{pst-3dplot}{xMax}{\pst@checknum{#1}\psk@ThreeDplot@xMax } -\define@key[psset]{pst-3dplot}{yMin}{\pst@checknum{#1}\psk@ThreeDplot@yMin } -\define@key[psset]{pst-3dplot}{yMax}{\pst@checknum{#1}\psk@ThreeDplot@yMax } -\define@key[psset]{pst-3dplot}{zMin}{\pst@checknum{#1}\psk@ThreeDplot@zMin } -\define@key[psset]{pst-3dplot}{zMax}{\pst@checknum{#1}\psk@ThreeDplot@zMax } -\define@key[psset]{pst-3dplot}{xThreeDunit}{\pst@checknum{#1}\psk@ThreeDplot@xThreeDunit } -\define@key[psset]{pst-3dplot}{yThreeDunit}{\pst@checknum{#1}\psk@ThreeDplot@yThreeDunit } -\define@key[psset]{pst-3dplot}{zThreeDunit}{\pst@checknum{#1}\psk@ThreeDplot@zThreeDunit } -\define@key[psset]{pst-3dplot}{xRotVec}{\pst@checknum{#1}\psk@ThreeDplot@xRotVec } % Rotation vector x -\define@key[psset]{pst-3dplot}{yRotVec}{\pst@checknum{#1}\psk@ThreeDplot@yRotVec } % Rotation vector y -\define@key[psset]{pst-3dplot}{zRotVec}{\pst@checknum{#1}\psk@ThreeDplot@zRotVec } % Rotation vector z -\define@key[psset]{pst-3dplot}{deltax}{\pst@checknum{#1}\psk@ThreeDplot@deltax } -\define@key[psset]{pst-3dplot}{deltay}{\pst@checknum{#1}\psk@ThreeDplot@deltay } -\define@key[psset]{pst-3dplot}{deltaz}{\pst@checknum{#1}\psk@ThreeDplot@deltaz } -\define@key[psset]{pst-3dplot}{Deltax}{\pst@checknum{#1}\psk@ThreeDplot@Deltax } -\define@key[psset]{pst-3dplot}{Deltay}{\pst@checknum{#1}\psk@ThreeDplot@Deltay } -\define@key[psset]{pst-3dplot}{Deltaz}{\pst@checknum{#1}\psk@ThreeDplot@Deltaz } +\define@key[psset]{pst-3dplot}{xMin}[-1]{\def\psk@ThreeDplot@xMin{#1}} +\define@key[psset]{pst-3dplot}{xMax}[4]{\def\psk@ThreeDplot@xMax{#1}} +\define@key[psset]{pst-3dplot}{yMin}[-1]{\def\psk@ThreeDplot@yMin{#1}} +\define@key[psset]{pst-3dplot}{yMax}[4]{\def\psk@ThreeDplot@yMax{#1}} +\define@key[psset]{pst-3dplot}{zMin}[-1]{\def\psk@ThreeDplot@zMin{#1}} +\define@key[psset]{pst-3dplot}{zMax}[4]{\def\psk@ThreeDplot@zMax{#1}} +\define@key[psset]{pst-3dplot}{xThreeDunit}[1.0]{\def\psk@ThreeDplot@xThreeDunit{#1}} +%\define@key[psset]{pst-3dplot}{xThreeDunit}{\pst@checknum{#1}\psk@ThreeDplot@xThreeDunit } +\define@key[psset]{pst-3dplot}{yThreeDunit}[1.0]{\def\psk@ThreeDplot@yThreeDunit{#1}} +\define@key[psset]{pst-3dplot}{zThreeDunit}[1.0]{\def\psk@ThreeDplot@zThreeDunit{#1}} +\define@key[psset]{pst-3dplot}{xRotVec}[0]{\pst@checknum{#1}\psk@ThreeDplot@xRotVec } % Rotation vector x +\define@key[psset]{pst-3dplot}{yRotVec}[0]{\pst@checknum{#1}\psk@ThreeDplot@yRotVec } % Rotation vector y +\define@key[psset]{pst-3dplot}{zRotVec}[0]{\pst@checknum{#1}\psk@ThreeDplot@zRotVec } % Rotation vector z +\define@key[psset]{pst-3dplot}{deltax}[1.0]{\def\psk@ThreeDplot@deltax{#1}} +%\define@key[psset]{pst-3dplot}{deltax}{\pst@checknum{#1}\psk@ThreeDplot@deltax} +\define@key[psset]{pst-3dplot}{deltay}[1.0]{\def\psk@ThreeDplot@deltay{#1}} +\define@key[psset]{pst-3dplot}{deltaz}[1.0]{\def\psk@ThreeDplot@deltaz{#1}} +\define@key[psset]{pst-3dplot}{Deltax}[1.0]{\def\psk@ThreeDplot@Deltax{#1}} +\define@key[psset]{pst-3dplot}{Deltay}[1.0]{\def\psk@ThreeDplot@Deltay{#1}} +\define@key[psset]{pst-3dplot}{Deltaz}[1.0]{\def\psk@ThreeDplot@Deltaz{#1}} % % -------------- the angles and the plotpoints ------------- % -\define@key[psset]{pst-3dplot}{Alpha}{\pst@getangle{#1}\psk@ThreeDplot@Alpha } % Horizontal turn -\define@key[psset]{pst-3dplot}{Beta}{\pst@getangle{#1}\psk@ThreeDplot@Beta }% Vertical turn -\define@key[psset]{pst-3dplot}{RotX}{\pst@getangle{#1}\psk@ThreeD@RotX }% x rotation -\define@key[psset]{pst-3dplot}{RotY}{\pst@getangle{#1}\psk@ThreeD@RotY }% y rotation -\define@key[psset]{pst-3dplot}{RotZ}{\pst@getangle{#1}\psk@ThreeD@RotZ }% z rotation -\define@key[psset]{pst-3dplot}{RotAngle}{\pst@getangle{#1}\psk@ThreeD@RotAngle }% General rotation angle -\define@key[psset]{pst-3dplot}{RotSequence}{\def\psk@ThreeD@RotS{#1 }}% +\define@key[psset]{pst-3dplot}{Alpha}[45]{\pst@getangle{#1}\psk@ThreeDplot@Alpha } % Horizontal turn +\define@key[psset]{pst-3dplot}{Beta}[30]{\pst@getangle{#1}\psk@ThreeDplot@Beta }% Vertical turn +\define@key[psset]{pst-3dplot}{RotX}[0]{\pst@getangle{#1}\psk@ThreeD@RotX }% x rotation +\define@key[psset]{pst-3dplot}{RotY}[0]{\pst@getangle{#1}\psk@ThreeD@RotY }% y rotation +\define@key[psset]{pst-3dplot}{RotZ}[0]{\pst@getangle{#1}\psk@ThreeD@RotZ }% z rotation +\define@key[psset]{pst-3dplot}{RotAngle}[0]{\pst@getangle{#1}\psk@ThreeD@RotAngle }% General rotation angle +\define@key[psset]{pst-3dplot}{RotSequence}[xyz]{\def\psk@ThreeD@RotS{#1 }}% % Set or Concat -\define@key[psset]{pst-3dplot}{RotSet}{\def\psk@ThreeD@RotSet{#1 }}% -\define@key[psset]{pst-3dplot}{PlaneSequence}{\def\psk@ThreeD@PlaneSequence{#1 }}% -\define@key[psset]{pst-3dplot}{zCoor}{\pst@checknum{#1}\psk@ThreeDplot@zCoor } +\define@key[psset]{pst-3dplot}{RotSet}[set]{\def\psk@ThreeD@RotSet{#1 }}% +\define@key[psset]{pst-3dplot}{PlaneSequence}[{}]{\def\psk@ThreeD@PlaneSequence{#1 }}% +\define@key[psset]{pst-3dplot}{zCoor}[0]{\pst@checknum{#1}\psk@ThreeDplot@zCoor } \psset[pst-3dplot]{zCoor=0} % -%\define@boolkey[psset]{pst-3dplot}[Pst@]{algebraic}[true]{}% same as in pstricks-add -%\psset[pst-3dplot]{algebraic=false} \def\drawStyle@xLines{xLines}% 0 \def\drawStyle@yLines{yLines}% 1 \def\drawStyle@xyLines{xyLines}% 2 \def\drawStyle@yxLines{yxLines}% 3 -\define@key[psset]{pst-3dplot}{drawStyle}{% how to draw 3D functions +\define@key[psset]{pst-3dplot}{drawStyle}[xLines]{% how to draw 3D functions \def\pst@tempa{#1}% \ifx\pst@tempa\drawStyle@xLines\let\psk@ThreeDplot@drawStyle\z@\else% \ifx\pst@tempa\drawStyle@yLines\let\psk@ThreeDplot@drawStyle\@ne\else% @@ -148,55 +124,49 @@ } \psset[pst-3dplot]{drawStyle=xLines} % -\define@key[psset]{pst-3dplot}{xPlotpoints}{\def\psk@ThreeDplot@xPlotpoints{#1}} -\define@key[psset]{pst-3dplot}{yPlotpoints}{\def\psk@ThreeDplot@yPlotpoints{#1}} -\define@key[psset]{pst-3dplot}{beginAngle}{\def\psk@ThreeDplot@beginAngle{#1}}% for ellipse/circle arc -\define@key[psset]{pst-3dplot}{endAngle}{\def\psk@ThreeDplot@endAngle{#1}}% for ellipse/circle arc -\define@key[psset]{pst-3dplot}{linejoin}{\def\psk@ThreeDplot@linejoin{#1 }}% how lines come together 0,1,2 -\define@key[psset]{pst-3dplot}{plane}{\edef\psk@ThreeDplot@plane{#1}}% xy,xz,yz +\define@key[psset]{pst-3dplot}{xPlotpoints}[25]{\def\psk@ThreeDplot@xPlotpoints{#1}} +\define@key[psset]{pst-3dplot}{yPlotpoints}[25]{\def\psk@ThreeDplot@yPlotpoints{#1}} +\define@key[psset]{pst-3dplot}{beginAngle}[0]{\def\psk@ThreeDplot@beginAngle{#1}}% for ellipse/circle arc +\define@key[psset]{pst-3dplot}{endAngle}[360]{\def\psk@ThreeDplot@endAngle{#1}}% for ellipse/circle arc +%\define@key[psset]{pst-3dplot}{linejoin}{\def\psk@ThreeDplot@linejoin{#1 }}% how lines come together 0,1,2 +\define@key[psset]{pst-3dplot}{plane}[xy]{\def\psk@ThreeDplot@plane{#1}}% xy,xz,yz % must be expanded -\define@key[psset]{pst-3dplot}{pOrigin}{\def\psk@ThreeDplot@pOrigin{#1}}% combination of (lr)(tBb) -\define@key[psset]{pst-3dplot}{IIIDdAlpha}{\def\psk@IIIDdAlpha{#1 }} +\define@key[psset]{pst-3dplot}{pOrigin}[c]{\def\psk@ThreeDplot@pOrigin{#1}}% combination of (lr)(tBb) +\define@key[psset]{pst-3dplot}{IIIDdAlpha}[0]{\def\psk@IIIDdAlpha{#1 }} \def\ThreeDplot@planeXY{xy} \def\ThreeDplot@planeXZ{xz} \def\ThreeDplot@planeYZ{yz} % % -------------- the length and node definitions ------------- % -\define@key[psset]{pst-3dplot}{XO}{\def\psk@ThreeDplot@XO{#1}}% the X-offset -\define@key[psset]{pst-3dplot}{YO}{\def\psk@ThreeDplot@YO{#1}}% the y-offset -\define@key[psset]{pst-3dplot}{angleStep}{% for circles - \def\psk@ThreeDplot@angleStep{#1}} -\define@key[psset]{pst-3dplot}{posStart}{% where the arrows start - \def\psk@ThreeDplot@posStart{#1}} -\define@key[psset]{pst-3dplot}{length}{% the length of the before|outlines - \def\psk@ThreeDplot@length{#1}} -\define@key[psset]{pst-3dplot}{arrowOffset}{% offset for \arrowLine - \def\psk@ThreeDplot@arrowOffset{#1}} -\define@key[psset]{pst-3dplot}{visibleLineStyle}{% offset for \arrowLine - \edef\psk@ThreeDplot@visibleLineStyle{#1}} -\define@key[psset]{pst-3dplot}{invisibleLineStyle}{% offset for \arrowLine - \edef\psk@ThreeDplot@invisibleLineStyle{#1}} +\define@key[psset]{pst-3dplot}{XO}[0]{\def\psk@ThreeDplot@XO{#1}}% the X-offset +\define@key[psset]{pst-3dplot}{YO}[0]{\def\psk@ThreeDplot@YO{#1}}% the y-offset +\define@key[psset]{pst-3dplot}{angleStep}[1]{\def\psk@ThreeDplot@angleStep{#1}}% for circles +\define@key[psset]{pst-3dplot}{posStart}[0]{\def\psk@ThreeDplot@posStart{#1}}% where the arrows start +\define@key[psset]{pst-3dplot}{length}[2]{\def\psk@ThreeDplot@length{#1}}% the length of the before|outlines +\define@key[psset]{pst-3dplot}{arrowOffset}[0]{\def\psk@ThreeDplot@arrowOffset{#1}}%offset for \arrowLine +\define@key[psset]{pst-3dplot}{visibleLineStyle}[solid]{\def\psk@ThreeDplot@visibleLineStyle{#1}}% offset for \arrowLine +\define@key[psset]{pst-3dplot}{invisibleLineStyle}[dashed]{\def\psk@ThreeDplot@invisibleLineStyle{#1}}%offset for \arrowLine % \define@boolkey[psset]{pst-3dplot}[Pst@]{IIIDticks}[true]{} \define@boolkey[psset]{pst-3dplot}[Pst@]{IIIDlabels}[true]{} -\define@key[psset]{pst-3dplot}{Dz}{\def\psk@Dz{#1}} -\define@key[psset]{pst-3dplot}{IIIDxTicksPlane}{\def\psk@IIIDxTicksPlane{#1}} -\define@key[psset]{pst-3dplot}{IIIDyTicksPlane}{\def\psk@IIIDyTicksPlane{#1}} -\define@key[psset]{pst-3dplot}{IIIDzTicksPlane}{\def\psk@IIIDzTicksPlane{#1}} -\define@key[psset]{pst-3dplot}{IIIDticksize}{\def\psk@IIIDticksize{#1}} -\define@key[psset]{pst-3dplot}{IIIDxticksep}{\def\psk@IIIDxticksep{#1}} -\define@key[psset]{pst-3dplot}{IIIDyticksep}{\def\psk@IIIDyticksep{#1}} -\define@key[psset]{pst-3dplot}{IIIDzticksep}{\def\psk@IIIDzticksep{#1}} -\define@key[psset]{pst-3dplot}{nameX}{\def\psk@ThreeDplot@nameX{#1}}% start of the object arrow -\define@key[psset]{pst-3dplot}{spotX}{\def\psk@ThreeDplot@spotX{#1}}% where to draw the label -\define@key[psset]{pst-3dplot}{nameY}{\def\psk@ThreeDplot@nameY{#1}} -\define@key[psset]{pst-3dplot}{spotY}{\def\psk@ThreeDplot@spotY{#1}} -\define@key[psset]{pst-3dplot}{nameZ}{\def\psk@ThreeDplot@nameZ{#1}} -\define@key[psset]{pst-3dplot}{spotZ}{\def\psk@ThreeDplot@spotZ{#1}} +\define@key[psset]{pst-3dplot}{Dz}[1]{\def\psk@Dz{#1}} +\define@key[psset]{pst-3dplot}{IIIDxTicksPlane}[xy]{\def\psk@IIIDxTicksPlane{#1}} +\define@key[psset]{pst-3dplot}{IIIDyTicksPlane}[yz]{\def\psk@IIIDyTicksPlane{#1}} +\define@key[psset]{pst-3dplot}{IIIDzTicksPlane}[yz]{\def\psk@IIIDzTicksPlane{#1}} +\define@key[psset]{pst-3dplot}{IIIDticksize}[0.1]{\def\psk@IIIDticksize{#1}} +\define@key[psset]{pst-3dplot}{IIIDxticksep}[-0.2]{\def\psk@IIIDxticksep{#1}} +\define@key[psset]{pst-3dplot}{IIIDyticksep}[-0.2]{\def\psk@IIIDyticksep{#1}} +\define@key[psset]{pst-3dplot}{IIIDzticksep}[0.2]{\def\psk@IIIDzticksep{#1}} +\define@key[psset]{pst-3dplot}{nameX}[$x$]{\def\psk@ThreeDplot@nameX{#1}}% start of the object arrow +\define@key[psset]{pst-3dplot}{spotX}[180]{\def\psk@ThreeDplot@spotX{#1}}% where to draw the label +\define@key[psset]{pst-3dplot}{nameY}[$y$]{\def\psk@ThreeDplot@nameY{#1}} +\define@key[psset]{pst-3dplot}{spotY}[0]{\def\psk@ThreeDplot@spotY{#1}} +\define@key[psset]{pst-3dplot}{nameZ}[$z$]{\def\psk@ThreeDplot@nameZ{#1}} +\define@key[psset]{pst-3dplot}{spotZ}[90]{\def\psk@ThreeDplot@spotZ{#1}} % % ### begin Torsten Suhling -\define@key[psset]{pst-3dplot}{planecorr}{\def\psk@ThreeDplot@planecorr{#1}}% make plane tags readable +\define@key[psset]{pst-3dplot}{planecorr}[none]{\def\psk@ThreeDplot@planecorr{#1}}% make plane tags readable \def\ThreeDplot@planecorrNone{none} % default \def\ThreeDplot@planecorrNormal{normal} % make planes readable \def\ThreeDplot@planecorrXYrot{xyrot} % and put tag for xy-plane @@ -210,18 +180,14 @@ \newcount\pst@cntx \newcount\pst@cnty \newcount\pst@cntz \newdimen\pst@dimx \newdimen\pst@dimy \newdimen\pst@dimz % -\define@key[psset]{pst-3dplot}{planeGrid}{\def\psk@planeGrid{#1}} -\define@key[psset]{pst-3dplot}{planeGridOffset}{\def\psk@planeGridOffset{#1}} -%\define@key[psset]{pst-3dplot}{subticks}{\def\psk@xsubticks{#1}\def\psk@ysubticks{#1}} -%\define@key[psset]{pst-3dplot}{xsubticks}{\def\psk@xsubticks{#1}} -%\define@key[psset]{pst-3dplot}{ysubticks}{\def\psk@ysubticks{#1}} +\define@key[psset]{pst-3dplot}{planeGrid}[xy]{\def\psk@planeGrid{#1}} +\define@key[psset]{pst-3dplot}{planeGridOffset}[0]{\def\psk@planeGridOffset{#1}} % \define@boolkey[psset]{pst-3dplot}[PstThreeDplot@]{showInside}[true]{} \define@key[psset]{pst-3dplot}{SegmentColor}{\pst@getcolor{#1}\psk@ThreeDplot@SegmentColor} -\define@key[psset]{pst-3dplot}{increment}{\pst@checknum{#1}\psk@ThreeDplot@increment} -\define@key[psset]{pst-3dplot}{Hincrement}{\pst@checknum{#1}\psk@ThreeDplot@Hincrement} -%\define@key[psset]{pst-3dplot}{CMYK}{\def\psk@ThreeDplot@CMYK{#1}} -\define@key[psset]{pst-3dplot}{xyzLight}{\def\psk@ThreeDplot@xyzLight{#1 }} +\define@key[psset]{pst-3dplot}{increment}[10]{\pst@checknum{#1}\psk@ThreeDplot@increment} +\define@key[psset]{pst-3dplot}{Hincrement}[0.5]{\pst@checknum{#1}\psk@ThreeDplot@Hincrement} +\define@key[psset]{pst-3dplot}{xyzLight}[1 1 2]{\def\psk@ThreeDplot@xyzLight{#1 }} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -246,17 +212,18 @@ % % \def\setIIIDplotDefaults{% + \psset[pstricks]{linejoin=1}% \psset[pst-3dplot]{ - Debug=false, + Debug=false,CoorCheck=true, drawing=true,hiddenLine=false,eulerRotation=false, xMin=-1,xMax=4,yMin=-1,yMax=4,zMin=-1,zMax=4, - xThreeDunit=1.0,yThreeDunit=1.0,zThreeDunit=1.0,Alpha=45,Beta=30, - deltax=1,deltay=1,deltaz=1,Deltax=1,Deltay=1,Deltaz=1, + xThreeDunit=1,yThreeDunit=1.0,zThreeDunit=1.0,Alpha=45,Beta=30, + deltax=1,deltay=1.0,deltaz=1.0,Deltax=1.0,Deltay=1.0,Deltaz=1.0, RotX=0,RotY=0,RotZ=0,RotSequence=xyz,RotSet=set, xRotVec=1,yRotVec=0,zRotVec=0,RotAngle=0, PlaneSequence={}, drawStyle=xLines,xPlotpoints=25,yPlotpoints=25,beginAngle=0,endAngle=360, - linejoin=1,XO=0,YO=0,angleStep=1,posStart=0,length=2,arrowOffset=0, + XO=0,YO=0,angleStep=1,posStart=0,length=2,arrowOffset=0, visibleLineStyle=solid,invisibleLineStyle=dashed,nameX=$x$,spotX=180, nameY=$y$,spotY=0,nameZ=$z$,spotZ=90,plane=xy,pOrigin=c, drawCoor=false,SphericalCoor=false, CylindricalCoor=false, @@ -295,7 +262,7 @@ /Sin1Sin2 Sin1 Sin2 mul def /Cos1Cos2 Cos1 Cos2 mul def /Sin1Cos2 Sin1 Cos2 mul def - /showgrid \ifPst@showgrid true \else false \fi def + /showgrid \ifPst@IIIDshowgrid true \else false \fi def currentdict tx@3DPlotDict ne dup {tx@3DPlotDict begin} if % Begin the correct dict if necessary /eulerRotation \ifPst@eulerRotation true \else false \fi def @@ -326,12 +293,22 @@ \let#4\pst@getValueY% \let#5\pst@getValueZ% } +\def\pst@addThreeDVecPS(#1,#2,#3)(#4,#5,#6)#7#8#9{% (#1)+(#2)=(#7,#8,#9) + \def#7{ #1 #4 add }% + \def#8{ #2 #5 add }% + \def#9{ #3 #6 add }% +} \def\pst@subThreeDVec(#1)(#2,#3,#4)#5#6#7{% (#1)-(#2,#3,#4)=(#5,#6,#7) \pst@calcThreeDVec(#1)(-#2,-#3,-#4)% \let#5\pst@getValueX% \let#6\pst@getValueY% \let#7\pst@getValueZ% } +\def\pst@subThreeDVecPS(#1,#2,#3)(#4,#5,#6)#7#8#9{% (#1)-(#2)=(#7,#8,#9) + \def#7{ #1 #4 sub }% + \def#8{ #2 #5 sub }% + \def#9{ #3 #6 sub }% +} % \def\pst@calcThreeDVec(#1,#2,#3)(#4,#5,#6){{% #1+#4; #2+#5; #3+#6 \pst@dima=#1 pt% @@ -352,19 +329,26 @@ % \def\psxyzlabel#1{\bgroup\footnotesize\textsf{#1}\egroup} % -\def\pstThreeDCoor{\pst@object{pstThreeDCoor}} +\define@key[psset]{pst-3dplot}{IIIDOffset}{\def\psk@ThreeDplot@Offset{#1}} +\define@key[psset]{pst-3dplot}{zlabelFactor}[\relax]{\def\psk@zlabelFactor{#1}} +\psset[pst-3dplot]{IIIDOffset={(0,0,0)},zlabelFactor={}}% for coor axes +% +\def\pst@getIIIDValues(#1,#2,#3)#4#5#6\@nil{\def#4{#1}\def#5{#2}\def#6{#3}} +% +\def\pstThreeDCoor{\def\pst@par{}\pst@object{pstThreeDCoor}} \def\pstThreeDCoor@i{% \pst@killglue% \begingroup% \addbefore@par{linewidth=0.5pt,linecolor=red,arrows=->,dotstyle=|}% \use@par% - \pstThreeDNode(\psk@ThreeDplot@xMin,0,0){xMin}% + \expandafter\pst@getIIIDValues\psk@ThreeDplot@Offset{\pst@OffsetX}{\pst@OffsetY}{\pst@OffsetZ}\@nil + \pstThreeDNode(\psk@ThreeDplot@xMin,\pst@OffsetY,\pst@OffsetZ){xMin}% \psset[pst-3dplot]{RotSet=keep}% Keep the current rotation matrix - \pstThreeDNode(\psk@ThreeDplot@xMax,0,0){xMax}% - \pstThreeDNode(0,\psk@ThreeDplot@yMin,0){yMin}% - \pstThreeDNode(0,\psk@ThreeDplot@yMax,0){yMax}% - \pstThreeDNode(0,0,\psk@ThreeDplot@zMin){zMin}% - \pstThreeDNode(0,0,\psk@ThreeDplot@zMax){zMax}% + \pstThreeDNode(\psk@ThreeDplot@xMax,\pst@OffsetY,\pst@OffsetZ){xMax}% + \pstThreeDNode(\pst@OffsetX,\psk@ThreeDplot@yMin,\pst@OffsetZ){yMin}% + \pstThreeDNode(\pst@OffsetX,\psk@ThreeDplot@yMax,\pst@OffsetZ){yMax}% + \pstThreeDNode(\pst@OffsetX,\pst@OffsetY,\psk@ThreeDplot@zMin){zMin}% + \pstThreeDNode(\pst@OffsetX,\pst@OffsetY,\psk@ThreeDplot@zMax){zMax}% \ifPst@drawing% ThreeDplot axes \psline(xMin)(xMax)% \psline(yMin)(yMax)% @@ -374,85 +358,145 @@ \uput[\psk@ThreeDplot@spotZ](zMax){\psk@ThreeDplot@nameZ}% \ifPst@IIIDticks% %------------ x ticks and labels -------------------------- - \pst@dimx=\psk@ThreeDplot@xMax\p@ - \pst@dima=\psk@ThreeDplot@xThreeDunit\p@ - \pst@dima=\psk@ThreeDplot@deltax\pst@dima - \divide\pst@dimx by \pst@dima - \pst@cntx=\number\pst@dimx\advance\pst@cntx by -1% - \multido{\rA=\psk@Dx+\psk@Dx, - \rB=\psk@ThreeDplot@deltax+\psk@ThreeDplot@deltax} - {\pst@cntx}{% the coor increment - \pstThreeDLine[arrows=-](\rB,-\psk@IIIDticksize,0)(\rB,\psk@IIIDticksize,0)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDxTicksPlane](\rB,\psk@IIIDxticksep,0){\psxyzlabel{\rA}}% - \fi% - }% end of multido - \pst@dimx=\psk@ThreeDplot@xMin\p@ - \pst@dima=\psk@ThreeDplot@xThreeDunit\p@ - \divide\pst@dimx by \pst@dima - \ifdim\psk@ThreeDplot@xMin pt<\p@ \pst@cntx=-\number\pst@dimx - \else\pst@cntx=\number\pst@dimx - \fi% - \multido{\rA=-\psk@Dx+-\psk@Dx, - \rB=-\psk@ThreeDplot@xThreeDunit+-\psk@ThreeDplot@xThreeDunit} - {\pst@cntx}{% - \pstThreeDLine[arrows=-](\rB,-\psk@IIIDticksize,0)(\rB,\psk@IIIDticksize,0)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDxTicksPlane](\rB,\psk@IIIDxticksep,0){\psxyzlabel{\rA}}% - \fi% - }% end of multido and the x ticks and labels + \ifdim\psk@ThreeDplot@xMax pt>0pt % only for positive parts of the axes + \ifdim\psk@ThreeDplot@xMin pt>\z@ + \pstFPadd\pst@tempC\psk@ThreeDplot@xMax{-\psk@ThreeDplot@xMin} + \else\let\pst@tempC\psk@ThreeDplot@xMax\fi + \pstFPadd\pst@tempC\pst@tempC{-\pst@OffsetX} + \pstFPDiv\pst@tempB\pst@tempC{\psk@ThreeDplot@deltax} + \pst@cntx=\pst@tempB \advance\pst@cntx by -1% + \pstFPdiv\pst@tempB\psk@IIIDticksize{\psk@ThreeDplot@yThreeDunit} + \pstFPadd\pst@tempA{-\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempB{\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempC\pst@OffsetX{\psk@ThreeDplot@deltax} + \pstFPadd\pst@tempD\pst@OffsetX{\psk@Dx} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDxticksep}{\pst@OffsetY} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@yThreeDunit + \multido{\nA=\pst@tempD+\psk@Dx, + \rB=\pst@tempC+\psk@ThreeDplot@deltax} + {\the\pst@cntx}{% + \pstThreeDLine[arrows=-](\rB,\pst@tempA,\pst@OffsetZ)(\rB,\pst@tempB,\pst@OffsetZ)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDxTicksPlane](\rB,\pst@tempE,\pst@OffsetZ){\psxyzlabel{\nA\psk@xlabelFactor}}% + \fi% + }% end of multido + \fi% + \ifdim\psk@ThreeDplot@xMin pt<\z@\relax % only for negative parts of the axes + \pstFPadd\pst@tempB\psk@ThreeDplot@xMin{-\pst@OffsetX} + \pstFPDiv\pst@tempB\pst@tempB{\psk@ThreeDplot@deltax}% + \pst@cntx=-\pst@int{\pst@tempB}% + \pstFPdiv{\pst@tempB}{\psk@IIIDticksize}{\psk@ThreeDplot@yThreeDunit} + \pstFPadd{\pst@tempA}{-\pst@tempB}{\pst@OffsetY} + \pstFPadd{\pst@tempB}{\pst@tempB}{\pst@OffsetY} + \pstFPadd{\pst@tempC}{\pst@OffsetX}{-\psk@ThreeDplot@deltax} + \pstFPadd{\pst@tempD}{\pst@OffsetX}{-\psk@Dx} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDxticksep}{\pst@OffsetY} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@yThreeDunit + \multido{\nA=\pst@tempD+-\psk@Dx, + \rB=\pst@tempC+-\psk@ThreeDplot@deltax} + {\the\pst@cntx}{% + \pstThreeDLine[arrows=-](\rB,\pst@tempA,\pst@OffsetZ)(\rB,\pst@tempB,\pst@OffsetZ)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDxTicksPlane](\rB,\pst@tempE,\pst@OffsetZ){\psxyzlabel{\nA\psk@xlabelFactor}}% + \fi% + }% end of multido and the x ticks and labels + \fi %------------ y ticks and labels -------------------------- - \pst@dimy=\psk@ThreeDplot@yMax\p@ - \pst@dima=\psk@ThreeDplot@yThreeDunit\p@ - \pst@dima=\psk@ThreeDplot@deltay\pst@dima - \divide\pst@dimy by \pst@dima - \pst@cnty=\number\pst@dimy\advance\pst@cnty by -1 - \multido{\rA=\psk@Dy+\psk@Dy,\rB=\psk@ThreeDplot@deltay+\psk@ThreeDplot@deltay}{\pst@cnty}{% 0.0+\psk@ThreeDplot@yThreeDunit}{\pst@cnty}{% - \pstThreeDLine[arrows=-](-\psk@IIIDticksize,\rB,0)(\psk@IIIDticksize,\rB,0)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDyTicksPlane](\psk@IIIDyticksep,\rB,0){\psxyzlabel{\rA}}% - \fi% - }% end of multido - \pst@dimy=\psk@ThreeDplot@yMin\p@% - \pst@dima=\psk@ThreeDplot@yThreeDunit\p@% - \divide\pst@dimy by \pst@dima% - \ifdim\psk@ThreeDplot@yMin pt<\p@ \pst@cnty=-\number\pst@dimy% - \else\pst@cnty=\number\pst@dimy - \fi% - \multido{\rA=-\psk@Dy+-\psk@Dy,% - \rB=-\psk@ThreeDplot@yThreeDunit+-\psk@ThreeDplot@yThreeDunit}{\pst@cnty}{% - \pstThreeDLine[arrows=-](-\psk@IIIDticksize,\rB,0)(\psk@IIIDticksize,\rB,0)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDyTicksPlane](\psk@IIIDyticksep,\rB,0){\psxyzlabel{\rA}}% - \fi - }% end of multido and y ticks and labels + \ifdim\psk@ThreeDplot@yMax pt>0pt % only for positive parts of the axes + \ifdim\psk@ThreeDplot@yMin pt>\z@ + \pstFPadd\pst@tempC\psk@ThreeDplot@yMax{-\psk@ThreeDplot@yMin} + \else\let\pst@tempC\psk@ThreeDplot@yMax\fi + \pstFPadd\pst@tempC\pst@tempC{-\pst@OffsetY} + \pstFPDiv\pst@tempB\pst@tempC{\psk@ThreeDplot@deltay} + \pst@cnty=\pst@tempB \advance\pst@cnty by -1% + \pstFPdiv\pst@tempB\psk@IIIDticksize{\psk@ThreeDplot@xThreeDunit} + \pstFPadd\pst@tempA{-\pst@tempB}{\pst@OffsetX} + \pstFPadd\pst@tempB{\pst@tempB}{\pst@OffsetX} + \pstFPadd\pst@tempC{\pst@OffsetY}{\psk@ThreeDplot@deltay} + \pstFPadd\pst@tempD{\pst@OffsetY}{\psk@Dy} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDyticksep}{\pst@OffsetX} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@xThreeDunit + \multido{\nA=\pst@tempD+\psk@Dy, + \rB=\pst@tempC+\psk@ThreeDplot@deltay} + {\the\pst@cnty}{% + \pstThreeDLine[arrows=-](\pst@tempA,\rB,\pst@OffsetZ)(\pst@tempB,\rB,\pst@OffsetZ)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDyTicksPlane](\pst@tempE,\rB,\pst@OffsetZ){\psxyzlabel{\nA\psk@ylabelFactor}}% + \fi% + }% end of multido + \fi% + \ifdim\psk@ThreeDplot@yMin pt<\z@ % only for negative parts of the axes + \pstFPadd\pst@tempB\psk@ThreeDplot@yMin{-\pst@OffsetY} + \pstFPDiv\pst@tempB{\pst@tempB}{\psk@ThreeDplot@deltay} + \pst@cnty=-\pst@tempB + \pstFPdiv\pst@tempB{\psk@IIIDticksize}{\psk@ThreeDplot@yThreeDunit} + \pstFPadd\pst@tempA{-\pst@tempB}{\pst@OffsetX} + \pstFPadd\pst@tempB{\pst@tempB}{\pst@OffsetX} + \pstFPadd\pst@tempC{\pst@OffsetY}{-\psk@ThreeDplot@deltay} + \pstFPadd\pst@tempD{\pst@OffsetY}{-\psk@Dy} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDyticksep}{\pst@OffsetX} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@xThreeDunit + \multido{\nA=\pst@tempD+-\psk@Dy,% + \rB=\pst@tempC+-\psk@ThreeDplot@deltay} + {\the\pst@cnty}{% + \pstThreeDLine[arrows=-](\pst@tempA,\rB,\pst@OffsetZ)(\pst@tempB,\rB,\pst@OffsetZ)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDyTicksPlane](\pst@tempE,\rB,\pst@OffsetZ){\psxyzlabel{\nA\psk@ylabelFactor}}% + \fi + }% end of multido and y ticks and labels + \fi %------------ z ticks and labels -------------------------- - \pst@dimz=\psk@ThreeDplot@zMax\p@% - \pst@dima=\psk@ThreeDplot@zThreeDunit\p@% - \divide\pst@dimz by \pst@dima% - \pst@cntz=\number\pst@dimz\advance\pst@cntz by -1% - \multido{\rA=0.0+\psk@Dz,\rB=0.0+\psk@ThreeDplot@zThreeDunit}{\pst@cntz}{% - \pstThreeDLine[arrows=-](0,-\psk@IIIDticksize,\rB)(0,\psk@IIIDticksize,\rB)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDzTicksPlane](0,\psk@IIIDzticksep,\rB){\psxyzlabel{\rA}}% - \fi% - }% - \pst@dimz=\psk@ThreeDplot@zMin\p@% - \pst@dima=\psk@ThreeDplot@zThreeDunit\p@% - \pst@dima=\psk@ThreeDplot@deltaz\pst@dima% - \divide\pst@dimz by \pst@dima% - \ifdim\psk@ThreeDplot@zMin pt<\p@ \pst@cntz=-\number\pst@dimz - \else\pst@cntz=\number\pst@dimz - \fi% - \multido{\rA=-\psk@Dz+-\psk@Dz,% - \rB=-\psk@ThreeDplot@zThreeDunit+-\psk@ThreeDplot@zThreeDunit}{\pst@cntz}{% - \pstThreeDLine[arrows=-](0,-\psk@IIIDticksize,\rB)(0,\psk@IIIDticksize,\rB)% - \ifPst@IIIDlabels% - \pstPlanePut[plane=\psk@IIIDzTicksPlane](0,\psk@IIIDzticksep,\rB){\psxyzlabel{\rA}}% + \ifdim\psk@ThreeDplot@zMax pt>\z@ % only for positive parts of the axes + \ifdim\psk@ThreeDplot@zMin pt>\z@ + \pstFPadd\pst@tempC\psk@ThreeDplot@zMax{-\psk@ThreeDplot@zMin} + \else\let\pst@tempC\psk@ThreeDplot@zMax \fi% - }% - \fi - \fi% + \pstFPadd\pst@tempC\pst@tempC{-\pst@OffsetZ} + \pstFPDiv\pst@tempB\pst@tempC{\psk@ThreeDplot@deltaz} + \pst@cntz=\pst@int{\pst@tempB} \advance\pst@cntz by -1% + \pstFPdiv\pst@tempB\psk@IIIDticksize{\psk@ThreeDplot@yThreeDunit} + \pstFPadd\pst@tempA{-\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempB{\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempC\pst@OffsetZ{\psk@ThreeDplot@deltaz} + \pstFPadd\pst@tempD\pst@OffsetZ{\psk@Dz} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDzticksep}{\pst@OffsetY} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@yThreeDunit + \multido{\nA=\pst@tempD+\psk@Dz, + \rB=\pst@tempC+\psk@ThreeDplot@deltaz}% + {\the\pst@cntz}{% + \pstThreeDLine[arrows=-](\pst@OffsetX,\pst@tempA,\rB)(\pst@OffsetX,\pst@tempB,\rB)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDzTicksPlane](\pst@OffsetX,\pst@tempE,\rB){\psxyzlabel{\nA\psk@zlabelFactor}}% + \fi% + }% + \fi + \ifdim\psk@ThreeDplot@zMin pt<\z@ % only for negative parts of the axes + \pstFPadd\pst@tempB\psk@ThreeDplot@zMin{-\pst@OffsetZ} + \pstFPDiv\pst@tempB\pst@tempB{\psk@ThreeDplot@deltaz} + \pst@cntz=-\pst@tempB% + \pstFPdiv\pst@tempB\psk@IIIDticksize{\psk@ThreeDplot@yThreeDunit} + \pstFPadd\pst@tempA{-\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempB{\pst@tempB}{\pst@OffsetY} + \pstFPadd\pst@tempC\pst@OffsetZ{-\psk@ThreeDplot@deltaz} + \pstFPadd\pst@tempD\pst@OffsetZ{-\psk@Dz} + \pst@dimm=\pst@tempD pt\edef\pst@tempD{\strip@pt\pst@dimm}% strip the 00... from fp + \pstFPadd\pst@tempE{\psk@IIIDzticksep}{\pst@OffsetY} + \pstFPdiv\pst@tempE\pst@tempE\psk@ThreeDplot@yThreeDunit + \multido{\nA=\pst@tempD+-\psk@Dz,% + \rB=\pst@tempC+-\psk@ThreeDplot@deltaz}{\the\pst@cntz}{% + \pstThreeDLine[arrows=-](\pst@OffsetX,\pst@tempA,\rB)(\pst@OffsetX,\pst@tempB,\rB)% + \ifPst@IIIDlabels% + \pstPlanePut[plane=\psk@IIIDzTicksPlane](\pst@OffsetX,\pst@tempE,\rB){\psxyzlabel{\nA\psk@zlabelFactor}}% + \fi% + }% end \multido + \fi% end \ifdim\psk@ThreeDplot@zMin + \fi% end \ifPst@IIIDticks% + \fi% end \ifPst@drawing \endgroup% \ignorespaces% } @@ -460,7 +504,7 @@ % planeGrids % \newdimen\pst@dx\newdimen\pst@dy -\def\pstThreeDPlaneGrid{\pst@object{pstThreeDPlaneGrid}} +\def\pstThreeDPlaneGrid{\def\pst@par{}\pst@object{pstThreeDPlaneGrid}} \def\pstThreeDPlaneGrid@i(#1,#2)(#3,#4){{% \pst@killglue \use@par @@ -514,7 +558,7 @@ % transform the 3d coordinates of the point (#1,#2,#3) % into a 2d and moveto % -\def\pstThreeDmoveto{\pst@object{pstThreeDmoveto}} +\def\pstThreeDmoveto{\def\pst@par{}\pst@object{pstThreeDmoveto}} \def\pstThreeDmoveto@i(#1,#2,#3){% \pst@killglue \begingroup @@ -563,7 +607,7 @@ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% }% -\def\pstThreeDLine{\NormalIIIDCoor\pst@object{lineIIID}} +\def\pstThreeDLine{\NormalIIIDCoor\def\pst@par{}\pst@object{lineIIID}} \def\lineIIID@i{% \pst@killglue% \pst@getarrows{% @@ -575,7 +619,7 @@ \addto@pscode{% \pst@3ddict \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /dxUnit \psk@ThreeDplot@xThreeDunit\space def /dyUnit \psk@ThreeDplot@yThreeDunit\space def /dzUnit \psk@ThreeDplot@zThreeDunit\space def @@ -595,9 +639,8 @@ % % set a 3d dot % -\def\pstThreeDDot{\pst@object{pstThreeDDot}} +\def\pstThreeDDot{\def\pst@par{}\pst@object{pstThreeDDot}} \def\pstThreeDDot@i(#1,#2,#3){% - \def\pst@tempThreeDDot{#1 #2 #3 } \begin@SpecialObj \pstThreeDNode(#1,#2,#3){pst@A} % we need the parameters \ifx\psk@dotstyle\@none\else\psdots(pst@A)\fi @@ -606,8 +649,8 @@ \addto@pscode{ \pst@3ddict \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin - \pst@tempThreeDDot +% \psk@ThreeDplot@linejoin setlinejoin + #1 #2 #3 \ifPst@SphericalCoor ConvertToCartesian \else @@ -653,14 +696,15 @@ % transform the 3d coordinates of the node (#1,#2,#3) % into a 2d node with the name #4 % -\def\pstThreeDNode{\pst@object{pstThreeDNode}} +\def\pstThreeDNode{\def\pst@par{}\pst@object{pstThreeDNode}} \def\pstThreeDNode@i(#1,#2,#3)#4{% \begin@SpecialObj% - \def\pst@tempThreeDNode{#1 #2 #3 }% +% \def\pst@tempThreeDNode{#1 #2 #3 }% \pnode(! \pst@3ddict \IIIDplot@variables - \pst@tempThreeDNode + #1 #2 #3 +% \pst@tempThreeDNode \ifPst@SphericalCoor ConvertToCartesian \else @@ -674,8 +718,7 @@ % %\define@key[psset]{pst-3dplot}{nodeType}{\pst@getint{#1}\pst@IIIDNodeType} %\psset{nodeType=0} -% -\def\pstIIIDNode{\pst@object{pstIIIDNode}} +\def\pstIIIDNode{\def\pst@par{}\pst@object{pstIIIDNode}} \def\pstIIIDNode@i(#1)(#2)(#3)(#4)(#5){% \@ifnextchar({\pstIIIDNode@iii(#1)(#2)(#3)(#4)(#5)}{\pstIIIDNode@ii(#1)(#2)(#3)(#4)(#5)}} @@ -731,30 +774,25 @@ }\ignorespaces} % % Trangle [options](Point1)(Point2)(Point3) -% -%\def\pstThreeDTriangle{\@ifnextchar[{\do@ThreeDTriangle}{\do@ThreeDTriangle[]}} -\def\pstThreeDTriangle{\pst@object{pst@ThreeDTriangle}} -\def\pst@ThreeDTriangle@i(#1)(#2)(#3){% +\def\pstThreeDTriangle{\def\pst@par{}\pst@object{pst@ThreeDTriangle}} +\def\pst@ThreeDTriangle@i(#1,#2,#3)(#4,#5,#6)(#7,#8,#9){% \begingroup \use@par \ifPst@drawCoor% \bgroup - \pstThreeDDot[style=showCoorStyle](#1) - \pstThreeDDot[style=showCoorStyle](#2) - \pstThreeDDot[style=showCoorStyle](#3) + \pstThreeDDot[style=showCoorStyle](#1,#2,#3) + \pstThreeDDot[style=showCoorStyle](#4,#5,#6) + \pstThreeDDot[style=showCoorStyle](#7,#8,#9) \egroup \fi% - \getThreeDCoor{#1}\pst@tempAA - \getThreeDCoor{#2}\pst@tempBB - \getThreeDCoor{#3}\pst@tempCC \begin@ClosedObj \addto@pscode{% \pst@3ddict \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin - /P1 { \pst@tempAA } def % x y z or Radius longitude lattitude - /P2 { \pst@tempBB } def % - /P3 { \pst@tempCC } def % +% \psk@ThreeDplot@linejoin setlinejoin + /P1 { #1 #2 #3 } def % x y z or Radius longitude lattitude + /P2 { #4 #5 #6 } def % + /P3 { #7 #8 #9 } def % /SphericalCoor \ifPst@SphericalCoor true \else false \fi def % /xUnit { \pst@number\psxunit\space mul } def /yUnit { \pst@number\psyunit\space mul } def @@ -775,16 +813,6 @@ end }% \end@ClosedObj% -\iffalse - \pstThreeDNode(#1){A} - \pstThreeDNode(#2){B} - \pstThreeDNode(#3){C} - \ifx\psk@fillstyle\@none% - \else\pscustom{\code{\psk@ThreeDplot@linejoin\space setlinejoin}\fi% - \psline(A)(B)(C)(A)(B)% - \ifx\psk@fillstyle\@none\else}\fi% - \end@SpecialObj -\fi \endgroup \ignorespaces} % @@ -795,30 +823,25 @@ % (#3) first direction vector ux,uy,uz % (#4) second direction vector wx,wy,wz % -\def\pstThreeDSquare{\pst@object{pstThreeDSquare}} -\def\pstThreeDSquare@i(#1)(#2)(#3){% - \ifPst@drawCoor {% - \pstThreeDDot[style=showCoorStyle](#1)% - \pst@addThreeDVec(#1)(#2)\pst@tempAA\pst@tempBB\pst@tempCC - \pstThreeDDot[style=showCoorStyle](\pst@tempAA,\pst@tempBB,\pst@tempCC)% - \pst@addThreeDVec(#1)(#3)\pst@tempAA\pst@tempBB\pst@tempCC - \pstThreeDDot[style=showCoorStyle](\pst@tempAA,\pst@tempBB,\pst@tempCC)% - \pst@addThreeDVec(\pst@tempAA,\pst@tempBB,\pst@tempCC)% - (#2)\pst@tempAA\pst@tempBB\pst@tempCC - \pstThreeDDot[style=showCoorStyle](\pst@tempAA,\pst@tempBB,\pst@tempCC)% - }% - \fi - \getThreeDCoor{#1}\pst@tempAA - \getThreeDCoor{#2}\pst@tempBB - \getThreeDCoor{#3}\pst@tempCC +\def\pstThreeDSquare{\def\pst@par{}\pst@object{pstThreeDSquare}} +\def\pstThreeDSquare@i(#1,#2,#3)(#4,#5,#6)(#7,#8,#9){% + \ifPst@drawCoor % + \pstThreeDDot[style=showCoorStyle](#1,#2,#3)% +% \pst@addThreeDVecPS(#1,#2,#3)(#4,#5,#6)\pst@tempAA\pst@tempBB\pst@tempCC + \pstThreeDDot[style=showCoorStyle](#1 #4 add, #2 #5 add, #3 #6 add)% +% \pst@addThreeDVecPS(#1,#2,#3)(#7,#8,#9)\pst@tempAA\pst@tempBB\pst@tempCC + \pstThreeDDot[style=showCoorStyle](#1 #7 add, #2 #8 add, #3 #9 add)% +% \pst@addThreeDVecPS(\pst@tempAA,\pst@tempBB,\pst@tempCC)(#4,#5,#6)\pst@tempA\pst@tempB\pst@tempC + \pstThreeDDot[style=showCoorStyle](#1 #4 add #7 add, #2 #5 add #8 add, #3 #6 add #9 add)% + \fi% \begin@ClosedObj \addto@pscode{ \pst@3ddict \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin - /P1 { \pst@tempAA } def % x y z or Radius longitude lattitude - /P2 { \pst@tempBB } def % - /P3 { \pst@tempCC } def % +% \psk@ThreeDplot@linejoin setlinejoin + /P1 { #1 #2 #3 } def % x y z or Radius longitude lattitude + /P2 { #4 #5 #6 } def % + /P3 { #7 #8 #9 } def % /SphericalCoor \ifPst@SphericalCoor true \else false \fi def % /xUnit { \pst@number\psxunit\space mul } def /yUnit { \pst@number\psyunit\space mul } def @@ -844,7 +867,6 @@ }% \end@ClosedObj% } - % % draws a threeD Box % [#1] options @@ -852,48 +874,48 @@ % (#3) second direction vector vx,vy,vz % (#4) third direction vector wx,wy,wz % -\def\pstThreeDBox{\@ifnextchar[{\pstThreeDBox@i}{\pstThreeDBox@i[]}} -\def\pstThreeDBox@i[#1](#2)(#3)(#4)(#5){% +\def\pstThreeDBox{\pst@object{pstThreeDBox}} +\def\pstThreeDBox@i(#1,#2,#3){% \pst@killglue% \begingroup% - \psset{linestyle=\psk@ThreeDplot@invisibleLineStyle}% - \psset{#1}% -% \pstVerb{ \pst@3ddict \IIIDplot@variables\space end }% + \addbefore@par{linestyle=\psk@ThreeDplot@invisibleLineStyle}% + \use@par% + \def\pst@tempX{#1 }% + \def\pst@tempY{#2 }% + \def\pst@tempZ{#3 }% + \pstThreeDBox@ii% +} +\def\pstThreeDBox@ii(#1,#2,#3)(#4,#5,#6)(#7,#8,#9){%%\def\pstThreeDBox@i[#1](#2)(#3)(#4)(#5) \iftrue - \pstThreeDSquare[#1](#2)(#4)(#5) % lower square - \pstThreeDSquare(#2)(#3)(#4)% back square -% + \pstThreeDSquare(\pst@tempX,\pst@tempY,\pst@tempZ)(#4,#5,#6)(#7,#8,#9)% lower square + \pstThreeDSquare(\pst@tempX,\pst@tempY,\pst@tempZ)(#1,#2,#3)(#4,#5,#6)% back square \psset{linestyle=\psk@ThreeDplot@visibleLineStyle}% - \pst@addThreeDVec(#2)(#4)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#3)(#5)% left square - \pst@addThreeDVec(#2)(#3)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#4)(#5)% top square - \pst@addThreeDVec(#2)(#5)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#3)(#4)% front square + \pstThreeDSquare(\pst@tempX #4 add,\pst@tempY #5 add,\pst@tempZ #6 add)(#1,#2,#3)(#7,#8,#9)% left square + \pstThreeDSquare(\pst@tempX #1 add,\pst@tempY #2 add,\pst@tempZ #3 add)(#4,#5,#6)(#7,#8,#9)% top square + \pstThreeDSquare(\pst@tempX #7 add,\pst@tempY #8 add,\pst@tempZ #9 add)(#1,#2,#3)(#4,#5,#6)% front square \else% better support for hidden lines - \pstThreeDSquare[#1](#2)(#4)(#5) % lower square + \pstThreeDSquare(\pst@tempX,\pst@tempY,\pst@tempZ)(#4,#5,#6)(#7,#8,#9) % lower square \pst@absdim{\psk@ThreeDplot@Alpha pt}\pst@dimo - \ifdim\pst@dimo<90pt \ifdim\pst@dimo>270pt - \pstThreeDSquare(#2)(#3)(#4)% back square - \else - \pst@addThreeDVec(#2)(#5)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#3)(#4)% front square - \fi\fi -% + \ifdim\pst@dimo<90pt + \ifdim\pst@dimo>270pt + \pstThreeDSquare(\pst@tempX,\pst@tempY,\pst@tempZ)(#1,#2,#3)(#4,#5,#6)% back square + \else + \pstThreeDSquare(\pst@tempX #7 add,\pst@tempY #8 add,\pst@tempZ #9 add)(#1,#2,#3)(#4,#5,#6)% front square + \fi% + \fi% \psset{linestyle=\psk@ThreeDplot@visibleLineStyle}% - \pst@addThreeDVec(#2)(#4)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#3)(#5)% left square - \pst@addThreeDVec(#2)(#3)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#4)(#5)% top square - \ifdim\pst@dimo<90pt \ifdim\pst@dimo>270pt - \pst@addThreeDVec(#2)(#5)\pst@tempA\pst@tempB\pst@tempC - \pstThreeDSquare[#1](\pst@tempA,\pst@tempB,\pst@tempC)(#3)(#4)% front square - \else - \pstThreeDSquare(#2)(#3)(#4)% back square - \fi\fi -\fi - \endgroup% - \ignorespaces% + \pstThreeDSquare(\pst@tempX #4 add,\pst@tempY #5 add,\pst@tempZ #6 add)(#1,#2,#3)(#7,#8,#9)% left square + \pstThreeDSquare(\pst@tempX #1 add,\pst@tempY #2 add,\pst@tempZ #3 add)(#4,#5,#6)(#7,#8,#9)% top square + \ifdim\pst@dimo<90pt + \ifdim\pst@dimo>270pt + \pstThreeDSquare(\pst@tempX #7 add,\pst@tempY #8 add,\pst@tempZ #9 add)(#1,#2,#3)(#4,#5,#6)% front square + \else + \pstThreeDSquare(\pst@tempX,\pst@tempY,\pst@tempZ)(#1,#2,#3)(#4,#5,#6)% back square + \fi% + \fi% +\fi% + \endgroup% + \ignorespaces% } % % set a 3d ellipse/circle @@ -903,7 +925,7 @@ % #3 radius ax,ay,az % #4 radius bx,by,bz % -\def\pstThreeDEllipse{\pst@object{pstThreeDEllipse}} +\def\pstThreeDEllipse{\def\pst@par{}\pst@object{pstThreeDEllipse}} \def\pstThreeDEllipse@i(#1)(#2)(#3){% \addbefore@par{plotstyle=curve}% \@nameuse{beginplot@\psplotstyle}% @@ -912,7 +934,7 @@ \getThreeDCoor{#3}\pst@tempB% b \addto@pscode{% \pst@3ddict \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin \ifPst@SphericalCoor \pst@tempC\space \tx@ConvertToCartesian /zM \tx@Z def /yM \tx@Y def /xM \tx@X def % center @@ -984,7 +1006,7 @@ }% \@nameuse{endplot@\psplotstyle}} % -\def\pstThreeDCircle{\pst@object{pstThreeDCircle}} +\def\pstThreeDCircle{\def\pst@par{}\pst@object{pstThreeDCircle}} \def\pstThreeDCircle@i(#1)(#2)(#3){% (vec O)(vec a)(vec b) \addbefore@par{plotstyle=curve}% \@nameuse{beginplot@\psplotstyle}% @@ -993,7 +1015,7 @@ \getThreeDCoor{#3}\pst@tempB% b \addto@pscode{% \pst@3ddict \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin \ifPst@SphericalCoor \pst@tempC\space \tx@ConvertToCartesian /zM \tx@Z def /yM \tx@Y def /xM \tx@X def % center @@ -1048,7 +1070,7 @@ % % cone[options](center)(radiusA vec)(radiusB vec){height} % -\def\pstThreeDCone{\pst@object{pstThreeDCone}} +\def\pstThreeDCone{\def\pst@par{}\pst@object{pstThreeDCone}} \def\pstThreeDCone@i(#1)(#2)(#3)#4{{% \use@par \pstThreeDEllipse(#1)(#2)(#3)% @@ -1059,7 +1081,7 @@ \addto@pscode{ \pst@3ddict \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /xUnit { \pst@number\psxunit\space mul } def /yUnit { \pst@number\psyunit\space mul } def /SphericalCoor \ifPst@SphericalCoor true \else false \fi def % @@ -1076,7 +1098,7 @@ \end@OpenObj% }\ignorespaces} % -\def\pstRotNodeIIID{\pst@object{RotNodeIIID}} +\def\pstRotNodeIIID{\def\pst@par{}\pst@object{RotNodeIIID}} \def\RotNodeIIID@i(#1,#2,#3)(#4,#5,#6)#7{% \pst@killglue \begingroup% @@ -1102,7 +1124,9 @@ % % Paraboloid (Idea is from Manuel ... ) % -\def\pstParaboloid{\pst@object{pstParaboloid}} +\def\tx@SetMatrixThreeD{tx@3Ddict begin SetMatrixThreeD end } + +\def\pstParaboloid{\def\pst@par{}\pst@object{pstParaboloid}} \def\pstParaboloid@i{\@ifnextchar(\pstParaboloid@ii{\pstParaboloid@ii(0,0,0)}} \def\pstParaboloid@ii(#1,#2,#3)#4#5{% #1:height #2:radius \addto@par{viewpoint=0 0 0}% @@ -1129,7 +1153,7 @@ viewpoint \pst@3ddict /vZ ED /vY ED /vX ED \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /pas 0.5 def /pas10 pas 10 div def /cmyk {} def % we need only the values @@ -1165,13 +1189,13 @@ \ignorespaces} % % Sphere, the new one -\def\pstThreeDSphere{\pst@object{pstSphereIIID}} +\def\pstThreeDSphere{\def\pst@par{}\pst@object{pstSphereIIID}} \def\pstSphereIIID@i(#1,#2,#3)#4{% #1:origin (x,y,z) #2:radius \addto@par{viewpoint=0 0 0}% to make it compatible with pst-3dplot \begin@SpecialObj% \use@par \addto@pscode{% - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /viewpoint {% to make it compatible with parallel projection \psk@viewpoint \ifcase\psk@ThreeDplot@coorType @@ -1201,14 +1225,14 @@ \end@SpecialObj% \ignorespaces} % -\def\pstIIIDCylinder{\pst@object{pstIIIDCylinder}} +\def\pstIIIDCylinder{\def\pst@par{}\pst@object{pstIIIDCylinder}} \def\pstIIIDCylinder@i{\@ifnextchar({\pstIIIDCylinder@ii}{\pstIIIDCylinder@ii(0,0,0)}} \def\pstIIIDCylinder@ii(#1,#2,#3)#4#5{{% \let\pst@parOrig\pst@par \begin@ClosedObj \addto@pscode{% \pst@3ddict \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /POrig { #1 #2 #3 \ifPst@CylindricalCoor \tx@ConvCylToCartesian \fi \pst@number\psunit mul 3 1 roll @@ -1226,7 +1250,7 @@ \begin@SpecialObj \addto@pscode{% \pst@3ddict \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /POrig { #1 #2 #3 \ifPst@CylindricalCoor \tx@ConvCylToCartesian \fi \pst@number\psunit mul 3 1 roll @@ -1247,7 +1271,7 @@ \begin@ClosedObj \addto@pscode{% \pst@3ddict \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin /POrig { #1 #2 #3 #5 add \ifPst@CylindricalCoor \tx@ConvCylToCartesian \fi \pst@number\psunit mul 3 1 roll @@ -1265,7 +1289,7 @@ % %-------------------------- Cylinder ---------------------------- % -\def\psCylinder{\pst@object{psCylinder}} +\def\psCylinder{\def\pst@par{}\pst@object{psCylinder}} \def\psCylinder@i{\@ifnextchar(\psCylinder@ii{\psCylinder@ii(0,0,0)}} \def\psCylinder@ii(#1,#2,#3)#4#5{% #1,#2,#3: center of the bottom #4:radius #5:height \addto@par{viewpoint=0 0 0}% @@ -1292,7 +1316,7 @@ viewpoint \pst@3ddict /vZ ED /vY ED /vX ED \IIIDplot@variables end - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin % #1 #2 #3 \ifPst@CylindricalCoor \tx@ConvCylToCartesian \fi \pst@number\pst@dima \pst@number\psxunit div % Radius @@ -1328,7 +1352,7 @@ % %-------------------------- Box ---------------------------- % -\def\psBox{\pst@object{psBox}} +\def\psBox{\def\pst@par{}\pst@object{psBox}} \def\psBox@i{\@ifnextchar(\psBox@ii{\psBox@ii(0,0,0)}} \def\psBox@ii(#1,#2,#3)#4#5#6{% #1,#2,#3: center of the lower left edge % #4:width #5:height #6:depth @@ -1355,7 +1379,7 @@ \tx@3DPlotDict /vZ ED /vY ED /vX ED \IIIDplot@variables - \psk@ThreeDplot@linejoin setlinejoin +% \psk@ThreeDplot@linejoin setlinejoin % #1 2 div #2 2 div #3 2 div % wieso 1/2 ???? \pst@number\pst@dima \pst@number\psxunit div % Width @@ -1608,9 +1632,12 @@ } \def\parametricPlotThreeD@ii(#1,#2)(#3,#4)#5{{% \pst@killglue% - \pst@dima=#3pt\pst@dimb=#4pt % #3=#4, then we have a 3d line - \ifdim\pst@dima=\pst@dimb\psset{yPlotpoints=1}\fi% and set yPlotpoints=1 \use@par% + \ifPst@CoorCheck% + \pst@dima=#3pt\pst@dimb=#4pt % #3=#4, then we have a 3d line + \ifdim\pst@dima=\pst@dimb + \def\psk@ThreeDplot@yPlotpoints{1 }\fi% and set yPlotpoints=1 + \fi% \@pstfalse% \@nameuse{beginplot@\psplotstyle}% \@nameuse{testqp@\psplotstyle}% quick plot or something special @@ -2226,7 +2253,7 @@ \edef#3{\UseCos#1}% } % -\def\pstRotPointIIID{\pst@object{RotPointIIID}}% A real TeX solution +\def\pstRotPointIIID{\def\pst@par{}\pst@object{RotPointIIID}}% A real TeX solution \def\RotPointIIID@i(#1,#2,#3)#4#5#6{% \pst@killglue% \begingroup% |