% Copyright 2006 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/rendering/pgfrenderpoints.code.tex,v 1.2 2007/03/09 17:49:33 tantau Exp $ % Create a 3D point % % #1 = macro name in which the point object should be stored % #2 to #4 = x-, y- and z-coordinate of the point % % Note: % % The quick version does not call \setlength and is faster. % % Example: % % \pgfrenderpointcreate{\pgfpoint{2pt+3cm}{3cm}} \def\pgfrenderpointcreate#1#2#3#4{% \pgfmathsetlength\pgf@xa{#2}% \pgfmathsetlength\pgf@xb{#3}% \pgfmathsetlength\pgf@xc{#4}% \pgfqrenderpointcreate{\the\pgf@xa}{\the\pgf@xb}{\the\pgf@xc}% } \def\pgfqrenderpointcreate#1#2#3#4{% \edef#1{\pgf@xa=#2\relax\pgf@xb=#3\pgf@xc=#4\relax}% } \def\pgf@render@unpack#1{% #1% } % The origin point object % % Description: % % This object is always the origin. % \pgfqrenderpointcreate\pgfrenderobjorigin{0pt}{0pt}{0pt} % Add two 3D vectors % % #1 = name of new vector (may be one of the input) % #2 = name of first vector % #3 = name of second vector % % Description: % % The points #2 and #3 are added and the result is stored in #1. If #1 % equals either #2 or #3, to point is overwritten. % % Example: % % \pgfrenderpointcreate{\myvec}{1cm}{2cm}{3cm} % \pgfrenderpointcreate{\offset}{1cm}{0cm}{0cm} % \pgfrenderpointadd{\myvec}{\myvec}{\offset} \def\pgfrenderpointadd#1#2#3{% \pgf@render@unpack#2% \pgf@ya=\pgf@xa% \pgf@yb=\pgf@xb% \pgf@yc=\pgf@xc% \pgf@render@unpack#3% \advance\pgf@xa by\pgf@ya% \advance\pgf@xb by\pgf@yb% \advance\pgf@xc by\pgf@yc% \pgfqrenderpointcreate#1{\the\pgf@xa}{\the\pgf@xb}{\the\pgf@xc}% } % Scale a 3D vectors % % #1 = name of new vector (may be one of the input) % #2 = scale % #3 = name of vector to be scaled % % Description: % % Sets #1 := #2*#3. % % Example: % % \pgfrenderpointcreate{\myvec}{1cm}{2cm}{3cm} % \pgfrenderpointscale{\myvec}{2}{\myvec} \def\pgfrenderpointscale#1#2#3{% \pgf@render@unpack#3% \pgf@xa=#2\pgf@xa% \pgf@xb=#2\pgf@xb% \pgf@xc=#2\pgf@xc% \pgfqrenderpointcreate#1{\the\pgf@xa}{\the\pgf@xb}{\the\pgf@xc}% } % Project a 3D point to 2D % % #1 = 3D point object % % Description: % % This command takes a 3D point object and sets \pgf@x to the x-value % of the point and \pgf@y to the y-value. % % Example: % % \pgfpointprojection{\mypoint} \def\pgfpointprojection#1{% \pgf@render@unpack{#1}% \pgf@x=\pgf@xa% \pgf@y=\pgf@ya% } \endinput