%============================================================================= % File: stanli.tex -- Structural Analysis Library based on PGF/TikZ % Author(s): Juergen Hackl % Creation: 21 Dec 2016 % Time-stamp: % Version: 3.0 (2016-12-21) % % Copyright (c) 2016 Juergen Hackl % % More information on LaTeX: http://www.latex-project.org/ %============================================================================= %================================================ % use Package %================================================ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{stanli} % %================================================ % use Package %================================================ % \RequirePackage{ifthen} \RequirePackage{tikz} \RequirePackage{xargs} \usetikzlibrary{shapes,arrows} \usetikzlibrary{positioning} \usepackage{verbatim} \usetikzlibrary{automata} \usetikzlibrary{arrows} \usetikzlibrary{calc,3d} \usetikzlibrary{% decorations.pathreplacing,% decorations.pathmorphing% } \usetikzlibrary{patterns} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 2D Structural Analysis Library base on TikZ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %================================================ % some variables %================================================ % %------------------------------------------------ % colors %------------------------------------------------ \newcommand{\pathdrawcolor}{black} % \newcommand{\pathfillcolor}{white} % \newcommand{\colorGray}{gray} % %------------------------------------------------ % line widths %------------------------------------------------ \newcommand{\hugeLineWidth}{2pt} % \newcommand{\bigLineWidth}{1.5pt} % \newcommand{\normalLineWidth}{1pt} % \newcommand{\smallLineWidth}{.7pt} % \newcommand{\tinyLineWidth}{.3pt} % %------------------------------------------------ % construction parameters %------------------------------------------------ \newcommand{\scalingParameter}{1} % \newcommand{\hingeRadius}{1.5mm} % \newcommand{\hingeAxialLength}{5mm} % \newcommand{\hingeAxialHeight}{3mm} % \newcommand{\hingeCornerLength}{3mm} % \newcommand{\hatchingAngle}{45} % \newcommand{\hatchingAmplitude}{1.1cm} % \newcommand{\hatchingLength}{1.5mm} % \newcommand{\springLength}{10mm} % \newcommand{\springPreLength}{7pt} % \newcommand{\springPostLength}{3pt} % \newcommand{\springAmplitude}{2.5mm} % \newcommand{\springSegmentLength}{5pt} % \newcommand{\supportGap}{1mm} % \newcommand{\supportBasicLength}{12mm} % \newcommand{\supportBasicHeight}{3.5mm} % \newcommand{\supportLength}{8mm} % \newcommand{\supportHeight}{5mm} % \newcommand{\supportHatchingLength}{20mm} % \newcommand{\supportHatchingHeight}{5mm} % \newcommand{\barGap}{1.5mm} % \newcommand{\barAngle}{45} % %------------------------------------------------ % load parameters %------------------------------------------------ \newcommand{\forceDistance}{1.5mm} % \newcommand{\forceLength}{10mm} % \newcommand{\momentDistance}{4mm} % \newcommand{\momentAngle}{270} % \newcommand{\lineloadDistance}{3mm} % \newcommand{\lineloadForce}{0.15} % \newcommand{\lineloadInterval}{0.2} % %------------------------------------------------ % temperature parameters %------------------------------------------------ \newcommand{\temperatureHeight}{6mm} % %------------------------------------------------ % dimensioning parameters %------------------------------------------------ \newcommand{\dimensioningBar}{4mm} % %------------------------------------------------ % help values %------------------------------------------------ \newcommand{\helpVarA}{1} % \newcommand{\helpVarB}{1} % % %================================================ % new tikz styles %================================================ % %------------------------------------------------ % line styles %------------------------------------------------ \tikzstyle{hugeLine}=[line width=\hugeLineWidth,] \tikzstyle{bigLine}=[line width=\bigLineWidth,] \tikzstyle{normalLine}=[line width=\normalLineWidth,] \tikzstyle{smallLine}=[line width=\smallLineWidth,] \tikzstyle{tinyLine}=[line width=\tinyLineWidth,] %------------------------------------------------ % spring style %------------------------------------------------ \tikzstyle{spring} = [ normalLine, decoration= { zigzag, pre length=\springPreLength, post length=\springPostLength, segment length=\springSegmentLength, amplitude=\springAmplitude }, decorate, ] %------------------------------------------------ % hatch style %------------------------------------------------ \tikzstyle{hatching} = [ tinyLine, draw, decorate, decoration= { border, angle=\hatchingAngle, amplitude=\hatchingAmplitude, segment length=\hatchingLength } ] %------------------------------------------------ % hatch style for torsional spring %------------------------------------------------ \tikzstyle{hatchingspring} = [ tinyLine, draw, decorate, decoration= { border, angle=\hatchingAngle, amplitude=\hatchingAmplitude/2, segment length=\hatchingLength/2 } ] %------------------------------------------------ % force style %------------------------------------------------ \tikzstyle{force}=[>=latex,normalLine] % %================================================ % library elements %================================================ % %------------------------------------------------ % scaling %------------------------------------------------ % \scaling{scaling value} % \newcommandx{\scaling}[1]{ \renewcommand{\scalingParameter}{#1} } %------------------------------------------------ % point %------------------------------------------------ % \point{name}{x-coordiante}{y-coordiante} % \newcommandx{\point}[3]{ \node[coordinate][ shift={(#2*\scalingParameter,#3*\scalingParameter)}](#1){}; } %------------------------------------------------ % beam %------------------------------------------------ % \beam{type}{initial point}{end point}[rounded initial point][rounded end point] \newcommandx{\beam}[5][4=0,5=0]{ \ifthenelse{\equal{#1}{1}}{ % \draw [hugeLine] (#2) -- (#3); \coordinate (barVarA) at ($ (#2)!\barGap!-\barAngle:(#3) $); \coordinate (barVarB) at ($ (#3)!\barGap!\barAngle:(#2) $); \draw [smallLine,dashed] (barVarA) -- (barVarB); \ifthenelse{\equal{#4}{0}}{} {\fill (#2) circle (\hugeLineWidth/2);} \ifthenelse{\equal{#5}{0}}{} {\fill (#3) circle (\hugeLineWidth/2);} }{} \ifthenelse{\equal{#1}{2}}{ % \draw [bigLine] (#2) -- (#3); \ifthenelse{\equal{#4}{0}}{} {\fill (#2) circle (\bigLineWidth/2);} \ifthenelse{\equal{#5}{0}}{} {\fill (#3) circle (\bigLineWidth/2);} }{} \ifthenelse{\equal{#1}{3}}{ % \draw [normalLine,dashed] (#2) -- (#3); }{} \ifthenelse{\equal{#1}{4}}{ % \draw [hugeLine] (#2) -- (#3); \ifthenelse{\equal{#4}{0}}{} {\fill (#2) circle (\hugeLineWidth/2);} \ifthenelse{\equal{#5}{0}}{} {\fill (#3) circle (\hugeLineWidth/2);} }{} } %------------------------------------------------ % support %------------------------------------------------ % \support{type}{insertion point}[rotation] % \newcommandx{\support}[3][3=0]{ \ifthenelse{\equal{#1}{1}}{ % \begin{scope}[rotate around={#3:(#2)}] \draw [normalLine] (#2) -- ++(\supportLength/2,-\supportHeight) -- ++(-\supportLength,0) -- cycle; \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$) -- ++(-\supportBasicLength,0); \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportHeight)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$); \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportHatchingHeight)$) -- ++(-\supportHatchingLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{2}}{ % \begin{scope}[rotate around={#3:(#2)}] \draw [normalLine] (#2) -- ++(\supportLength/2,-\supportHeight) -- ++(-\supportLength,0) -- cycle; \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$) -- ++(-\supportBasicLength,0); \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight-\supportGap)$) -- ++(-\supportBasicLength,0); \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportHeight-\supportGap)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportHeight-\supportGap)$); \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportHatchingHeight-\supportGap)$) -- ++(-\supportHatchingLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{3}}{ % \begin{scope}[rotate around={#3:(#2)}] \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,0)$) -- ++(-\supportBasicLength,0); \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight)$) rectangle ($(#2)+1*(\supportBasicLength/2,0)$); \draw[hatching]($(#2)+1*(\supportHatchingLength/2,0)$) -- ++(-\supportHatchingLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{4}}{ % \begin{scope}[rotate around={#3:(#2)}] \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,0)$) -- ++(-\supportBasicLength,0); \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportGap)$) -- ++(-\supportBasicLength,0); \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportGap)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportGap)$); \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportGap)$) -- ++(-\supportHatchingLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{5}}{ % \begin{scope}[rotate around={#3:(#2)}] \draw [spring] (#2) -- ++(0,-\springLength); \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\springLength)$) -- ++(-\supportBasicLength,0); \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\springLength)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\springLength)$); \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\springLength)$) -- ++(-\supportHatchingLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{6}}{ % \begin{scope}[rotate around={#3:(#2)}] \begin{scope}[rotate around={-90:(#2)},shift={(#2)}] \draw[normalLine,scale=0.035,domain=0:18.85,variable=\t,smooth,] plot({\t*sin(\t r)},{-\t*cos(\t r)}); \end{scope} \draw [normalLine] ($(#2)+1*(-\supportBasicLength/2.5,0)$) -- ++(-\supportBasicLength/3.5,0); \clip ($(#2)+1*(-\supportBasicLength/2.5,0)$) rectangle ($(#2)+1*(-\supportBasicLength/1.47,-\supportBasicHeight/2)$); \draw[hatchingspring]($(#2)+1*(0,0)$) -- ++(-\supportHatchingLength/2,0); \end{scope} }{} } %------------------------------------------------ % hinge %------------------------------------------------ % \hinge{type}{insertion point}[rotation][initial point][end point] % [rotation][initial point][end point] are optional % \newcommandx{\hinge}[5][3=0,4=0,5=0]{ \ifthenelse{\equal{#1}{1}}{ % \begin{scope}[rotate around={#3:(#2)}] \fill [white] (#2) circle (\hingeRadius); \draw [normalLine] (#2) circle (\hingeRadius); \end{scope} }{} \ifthenelse{\equal{#1}{2}}{ % \begin{scope}[even odd rule] \ifthenelse{\equal{#5}{1}}{ \clip (#2) circle (\hingeRadius+\normalLineWidth) (#2)--(#3)--($(#3)!\hingeRadius+\normalLineWidth!-90:(#2)$)--($(#4)!\hingeRadius+\normalLineWidth!90:(#2)$)--(#4)-- cycle; }{ \clip (#2)--(#3)--($(#3)!\hingeRadius+\normalLineWidth!-90:(#2)$)--($(#4)!\hingeRadius+\normalLineWidth!90:(#2)$)--(#4)-- cycle; } \filldraw [fill=white,normalLine] (#2) circle (\hingeRadius); \end{scope} \draw[hugeLine] ($(#2)!\hingeRadius!(#3)$)--(#2)--($(#2)!\hingeRadius!(#4)$); }{} \ifthenelse{\equal{#1}{3}}{ % \begin{scope}[rotate around={#3:(#2)}] \fill [white] (#2) circle (\supportGap/1.5); \draw [normalLine] ($(#2)+1*(\supportGap/2,\supportBasicLength/2)$) -- ++(0,-\supportBasicLength); \draw [normalLine] ($(#2)+1*(-\supportGap/2,\supportBasicLength/2)$) -- ++(0,-\supportBasicLength); \end{scope} }{} \ifthenelse{\equal{#1}{4}}{ % \begin{scope}[rotate around={#3:(#2)}] \fill [white] ($(#2)+1*(-\hingeAxialLength/3,\hingeAxialHeight/2)$) rectangle ($(#2)+1*(0,-\hingeAxialHeight/2)$); \draw [normalLine] ($(#2)+1*(2*\hingeAxialLength/3,\hingeAxialHeight/2)$) -- ++(-\hingeAxialLength,0) -- ++(0,-\hingeAxialHeight) -- ++(\hingeAxialLength,0); \end{scope} }{} \ifthenelse{\equal{#1}{5}}{ % \coordinate (hingeVarA) at ($ (#2)!\hingeCornerLength!(#3) $); \coordinate (hingeVarB) at ($ (#2)!\hingeCornerLength!(#4) $); \fill[black] (#2) -- (hingeVarA) -- (hingeVarB) -- cycle; \fill[black] (#2)circle (\hugeLineWidth/2); }{} } %------------------------------------------------ % load %------------------------------------------------ % \load{type}{insertion point}[rotation][length or included angle][load distance] % [rotation][length or included angle][load distance] are optional % \newcommandx{\load}[5][3=0,4=0,5=0]{ \ifthenelse{\equal{#1}{1}}{ % \ifthenelse{\equal{#5}{0}} {\renewcommand{\helpVarA}{\forceDistance}} {\renewcommand{\helpVarA}{#5}} \ifthenelse{\equal{#4}{0}} {\renewcommand{\helpVarB}{\forceLength}} {\renewcommand{\helpVarB}{#4}} \draw[force,<-] ($(#2)+1*(#3:\helpVarA)$) --++($(#3:\helpVarB)$); }{} \ifthenelse{\equal{#1}{2}}{ % \ifthenelse{\equal{#5}{0}} {\renewcommand{\helpVarA}{\momentDistance}} {\renewcommand{\helpVarA}{#5}} \ifthenelse{\equal{#4}{0}} {\renewcommand{\helpVarB}{\momentAngle}} {\renewcommand{\helpVarB}{#4}} \begin{scope}[rotate around={#3:(#2)}] \draw[<-,normalLine] ($(#2)+1*(\helpVarA,0)$) arc (0:\helpVarB:\helpVarA); \end{scope} }{} \ifthenelse{\equal{#1}{3}}{ % \ifthenelse{\equal{#5}{0}} {\renewcommand{\helpVarA}{\momentDistance}} {\renewcommand{\helpVarA}{#5}} \ifthenelse{\equal{#4}{0}} {\renewcommand{\helpVarB}{\momentAngle}} {\renewcommand{\helpVarB}{#4}} \begin{scope}[rotate around={#3:(#2)}] \draw[->,normalLine] ($(#2)+1*(\helpVarA,0)$) arc (0:\helpVarB:\helpVarA); \end{scope} }{} } %------------------------------------------------ % lineload %------------------------------------------------ % \lineload{type}{initial point}{end point}[initial force value][end force value][force interval] % [initial force value][end force value][force interval] are optional % % and accordingly for type 3 % % \lineload{type}{initial point}{end point}[initial force value][end force value][lineload distance from inital point][force interval] % [initial force value][end force value][lineload distance from inital point][force interval] are optional % % and accordingly for type 4 % % \lineload{type}{initial point}{end point}[force interval][force length] % [force interval][force length] are optional \newcommandx{\lineload}[7][4=1,5=1,6=\lineloadInterval,7=\lineloadInterval]{ \ifthenelse{\equal{#1}{1}}{ % \coordinate (lineloadVarA1) at ($ (#2)!\lineloadDistance!90:(#3) $); \coordinate (lineloadVarB1) at ($ (#3)!\lineloadDistance!-90:(#2) $); \coordinate (lineloadVarA2) at ($ (#2)!{\lineloadDistance +#4cm}!90:(#3) $); \coordinate (lineloadVarB2) at ($ (#3)!{\lineloadDistance+#5cm}!-90:(#2) $); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\normalLineWidth/2); \fill (lineloadVarB2) circle (\normalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\scalingParameter} \pgfmathsetmacro{\lineloadIntervalStep}{#6/\scalingParameter*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\scalingParameter} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{2}}{ % \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\lineloadDistance) $); \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\lineloadDistance) $); \coordinate (lineloadVarA2) at ($ (#2)+1*(0,\lineloadDistance+#4cm) $); \coordinate (lineloadVarB2) at ($ (#3)+1*(0,\lineloadDistance+#5cm) $); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\normalLineWidth/2); \fill (lineloadVarB2) circle (\normalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#6} \pgfmathsetmacro{\lineloadIntervalStep}{#6*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{3}}{ % \ifthenelse{\equal{#6}{\lineloadInterval}} {\renewcommand{\helpVarA}{0cm}} {\renewcommand{\helpVarA}{#6cm}} \path let \p1 = (#2), \p2 = (#3) in coordinate (lineloadVarA1) at ($(\p1)+1*(0,\lineloadDistance+\helpVarA)$) coordinate (lineloadVarB1) at ($(\x2,\y1)+1*(0,\lineloadDistance+\helpVarA)$) coordinate (lineloadVarA2) at ($ (\p1)+1*(0,\lineloadDistance+\helpVarA+#4cm)$) coordinate (lineloadVarB2) at ($ (\x2,\y1)+1*(0,\lineloadDistance+\helpVarA+#5cm)$); \draw [tinyLine,loosely dotted] (lineloadVarA1)--($(#2)+1*(0,\hingeRadius)$); \draw [tinyLine,loosely dotted] (lineloadVarB1)--($(#3)+1*(0,\hingeRadius)$); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\normalLineWidth/2); \fill (lineloadVarB2) circle (\normalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#7} \pgfmathsetmacro{\lineloadIntervalStep}{#7*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#7} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{4}}{ % \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\lineloadDistance) $); \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\lineloadDistance) $); \ifthenelse{\equal{#4}{1}} {\pgfmathsetmacro{\lineloadIntervalStep}{\lineloadInterval} \pgfmathsetmacro{\lineloadIntervalEnd}{1-\lineloadInterval/2}} {\pgfmathsetmacro{\lineloadIntervalStep}{#4} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}} \ifthenelse{\equal{#5}{1}} {\pgfmathsetmacro{\lineloadForceLength}{\lineloadForce}} {\pgfmathsetmacro{\lineloadForceLength}{#5}} \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$); }{} } %------------------------------------------------ % dimensioning %------------------------------------------------ % \dimensioning{type}{initial point}{end point}{distance from point of origin}[measure] % \newcommandx{\dimensioning}[5][5]{ \ifthenelse{\equal{#1}{1}}{ % \path let \p1 = (#2), \p2 = (#3) in coordinate (dimensioningVarA) at (\x1,#4) coordinate (dimensioningVarB) at (\x2,#4); \draw [smallLine] (dimensioningVarA)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar) (dimensioningVarA)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2) (dimensioningVarB)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar) (dimensioningVarB)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2) (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5}; }{} \ifthenelse{\equal{#1}{2}}{ % \path let \p1 = (#2), \p2 = (#3) in coordinate (dimensioningVarA) at (#4,\y1) coordinate (dimensioningVarB) at (#4,\y2); \draw [smallLine] (dimensioningVarA)--++(\dimensioningBar/2,0)--++(-\dimensioningBar,0) (dimensioningVarA)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2) (dimensioningVarB)--++(\dimensioningBar/2,0)--++(-\dimensioningBar,0) (dimensioningVarB)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2) (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5}; }{} \ifthenelse{\equal{#1}{3}}{ % \coordinate (dimensioningVarA) at ($ (#2)!{#4cm}!90:(#3) $); \coordinate (dimensioningVarB) at ($ (#3)!{#4cm}!-90:(#2) $); \draw [smallLine] ($ (dimensioningVarA)!{-\dimensioningBar/3}!90:(dimensioningVarB) $) -- ($ (dimensioningVarA)!{\dimensioningBar/3}!90:(dimensioningVarB) $); \draw [smallLine,<-] (dimensioningVarB) -- (dimensioningVarA)node [sloped,midway,above] {#5}; }{} } %------------------------------------------------ % influenceline %------------------------------------------------ % \influenceline{initial point}{end point}{distance from initial point}[arrow distance] % \newcommandx{\influenceline}[5][4=.5]{% \path let \p1 = (#1), \p2 = (#2) in coordinate (influencelineVarA) at ($(\p1)+1*(0,\lineloadDistance+#3cm)$) coordinate (influencelineVarB) at ($(\x2,\y1)+1*(0,\lineloadDistance+#3cm)$); \draw [smallLine] (influencelineVarA)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar) (influencelineVarB)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar); \draw [smallLine,<->] (influencelineVarA)--(influencelineVarB); \draw [smallLine] ($(influencelineVarA)!#4!(influencelineVarB)$)--++(\hingeRadius,0) arc (0:360:\hingeRadius); \draw [force,->] ($(influencelineVarA)!#4!(influencelineVarB)+1*(0,\forceLength/2)$) --($(influencelineVarA)!#4!(influencelineVarB)+1*(0,-\forceLength/2)$); } %------------------------------------------------ % internalforces %------------------------------------------------ % \internalforces{initial point}{end point}{initial value}{end value}[parabola height][color][bend position] % [parabola height][color][bend position] are optional % \newcommandx{\internalforces}[7][5=0,6=red,7=.6667]{% \coordinate (internalforcesVarA) at ($ (#1)!#3cm!-90:(#2) $); \coordinate (internalforcesVarB) at ($ (#2)!#4cm!90:(#1)$); \coordinate (internalforcesVarAB) at ($ (internalforcesVarA)!.5!(internalforcesVarB)$); \coordinate (internalforcesVarC) at ($ (internalforcesVarAB)+2*(0,#5)$); \coordinate (internalforcesVarAC) at ($ (internalforcesVarA)!#7!(internalforcesVarC)$); \coordinate (internalforcesVarBC) at ($ (internalforcesVarB)!#7!(internalforcesVarC)$); \ifthenelse{\equal{#5}{0}}{ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) -- (internalforcesVarB) (internalforcesVarB) -- (#2); \fill [color=#6] (internalforcesVarA) circle (\bigLineWidth/2); \fill [color=#6] (internalforcesVarB) circle (\bigLineWidth/2); \fill [color=#6] (#1) circle (\bigLineWidth/2); \fill [color=#6] (#2) circle (\bigLineWidth/2); } { %\draw [bigLine,color=#6](internalforcesVarA) parabola[parabola height=#5cm] (internalforcesVarB); %\draw [bigLine,color=#6](internalforcesVarA)--(internalforcesVarAC)--(internalforcesVarBC)--(internalforcesVarB); %\draw [bigLine,color=blue](internalforcesVarA)--(internalforcesVarB) %(internalforcesVarAB) -- (internalforcesVarC); \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) .. controls (internalforcesVarAC) and (internalforcesVarBC) .. (internalforcesVarB) (internalforcesVarB) -- (#2); \fill [color=#6] (internalforcesVarA) circle (\bigLineWidth/2); \fill [color=#6] (internalforcesVarB) circle (\bigLineWidth/2); \fill [color=#6] (#1) circle (\bigLineWidth/2); \fill [color=#6] (#2) circle (\bigLineWidth/2); } } %------------------------------------------------ % temperature %------------------------------------------------ % \temperature{initial point}{end point}{temperature below}{temperature above}[temperature position][temperature value below][temperature value above][text orientation below][text orientation above] % [temperature position][temperature value above][temperature value below][text orientation below][text orientation above] are optional % \newcommandx{\temperature}[9][5=.5,6,7,8=below,9=above]{ \coordinate (temperatureVarA1) at ($ (#1)!#5!(#2) $); \coordinate (temperatureVarB1) at ($ (temperatureVarA1)!\temperatureHeight/2!90:(#2) $); \coordinate (temperatureVarB2) at ($ (temperatureVarA1)!-\temperatureHeight/2!90:(#2) $); \coordinate (temperatureVarC1) at ($ (temperatureVarB2)!-#3!90:(temperatureVarB1) $); \coordinate (temperatureVarC2) at ($ (temperatureVarB1)!#4!90:(temperatureVarB2) $); \filldraw[fill=\colorGray!20!white,smallLine] (temperatureVarB1) -- (temperatureVarC2) -- (temperatureVarC1) -- (temperatureVarB2) -- cycle; \draw (temperatureVarC1) node [#8]{#6}; \draw (temperatureVarC2) node [#9]{#7}; } %------------------------------------------------ % addon %------------------------------------------------ % \addon{type}{insertion point}{}{}[] % [] are optional % \newcommandx{\addon}[5][5=1]{ \ifthenelse{\equal{#1}{1}}{ % \addon{type}{insertion point}{end point}{position} \coordinate (addonVarA1) at ($ (#2)!#4!(#3) $); \coordinate (addonVarB1) at ($ (addonVarA1)!\dimensioningBar/2!45:(#3) $); \coordinate (addonVarB2) at ($ (addonVarA1)!\dimensioningBar/2!225:(#3) $); \draw[smallLine] (addonVarB1)--(addonVarB2) ($(addonVarB1)+1*(\supportGap,0)$)--($(addonVarB2)+1*(\supportGap,0)$); }{} \ifthenelse{\equal{#1}{2}}{ % \addon{type}{insertion point}{initial point}{end point}[position-1/+1] \coordinate (addonVarA1) at ($ (#2)!\dimensioningBar!(#3) $); \coordinate (addonVarB1) at ($ (#2)!\dimensioningBar!(#4) $); \ifthenelse{\equal{#5}{1}} { \coordinate (addonVarC1) at ($ (addonVarA1)!\dimensioningBar!90:(#3) $); \coordinate (addonVarD1) at ($ (#2)!1.414*\dimensioningBar/2!45:(#3) $); } { \coordinate (addonVarC1) at ($ (addonVarA1)!\dimensioningBar!-90:(#3) $); \coordinate (addonVarD1) at ($ (#2)!1.414*\dimensioningBar/2!-45:(#3) $); } \draw[smallLine] (addonVarA1)--(addonVarC1)-- (addonVarB1); \filldraw (addonVarD1) circle (\smallLineWidth); }{} \ifthenelse{\equal{#1}{3}}{ % \addon{type}{insertion point}{initial point}{end point}[position-1/+1] \begin{scope}[even odd rule] \ifthenelse{\equal{#5}{1}}{ \clip (#2) circle (\dimensioningBar+\normalLineWidth) (#2)--(#3)--($(#3)!\dimensioningBar+\normalLineWidth!-90:(#2)$)--($(#4)!\dimensioningBar+\normalLineWidth!90:(#2)$)--(#4)-- cycle; }{ \clip (#2)--(#3)--($(#3)!\dimensioningBar+\normalLineWidth!-90:(#2)$)--($(#4)!\dimensioningBar+\normalLineWidth!90:(#2)$)--(#4)-- cycle; } \draw [smallLine] (#2) circle (\dimensioningBar) (#2) circle (\dimensioningBar-\normalLineWidth-\normalLineWidth); \end{scope} }{} } %------------------------------------------------ % notation %------------------------------------------------ % \notation{type}{insertion point}{}[][][] % [] are optional % \newcommandx{\notation}[7][4=above right,5=.5,6=above,7=sloped]{ \ifthenelse{\equal{#1}{1}}{ % \notation{1}{insertion point}{labelling}[orientation]; \begin{scope} \draw (#2) node [#4]{#3}; \end{scope} }{} \ifthenelse{\equal{#1}{2}}{ % \notation{2}{insertion point}{labelling}[orientation]; \begin{scope} \draw (#2) node [#4]{#3}; \draw[bigLine] (#2)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar); \end{scope} }{} \ifthenelse{\equal{#1}{3}}{ % \coordinate (notationVarA1) at ($ (#2)!#5!(#3) $); \coordinate (notationVarB1) at ($ (notationVarA1)!\dimensioningBar/2!90:(#3) $); \coordinate (notationVarB2) at ($ (notationVarA1)!\dimensioningBar/2!-90:(#3) $); \draw[bigLine] (notationVarB1)--(notationVarB2); \draw (notationVarA1) node [#6]{#4}; }{} \ifthenelse{\equal{#1}{4}}{ % \ifthenelse{\equal{#7}{1}} {\renewcommand{\helpVarB}{}} {\renewcommand{\helpVarB}{sloped}} \begin{scope} \path (#2) -- (#3) node[inner sep=0mm,rectangle,smallLine,fill=white,draw,minimum size=2.5*\hingeRadius,midway,#6,\helpVarB,pos=#5] {#4}; \end{scope} }{} \ifthenelse{\equal{#1}{5}}{ % \ifthenelse{\equal{#7}{1}} {\renewcommand{\helpVarB}{}} {\renewcommand{\helpVarB}{sloped}} \begin{scope} \path (#2) -- (#3) node[midway,#6,\helpVarB,pos=#5] {#4}; \end{scope} }{} \ifthenelse{\equal{#1}{6}}{ % \begin{scope} \draw (#2) node [inner sep=0mm,circle,smallLine,fill=white,draw,minimum size=2.5*\hingeRadius]{#3}; \end{scope} }{} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 3D Structural Analysis Library base on TikZ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %================================================ % some variables %================================================ % %------------------------------------------------ % line widths %------------------------------------------------ \newcommand{\DhugeLineWidth}{2pt} \newcommand{\DbigLineWidth}{1.5pt} \newcommand{\DnormalLineWidth}{1pt} \newcommand{\DsmallLineWidth}{.7pt} \newcommand{\DtinyLineWidth}{.3pt} %------------------------------------------------ % coords parameters %------------------------------------------------ \newcommand{\DxAngle}{-12} \newcommand{\DxLength}{1} \newcommand{\DyAngle}{37} \newcommand{\DyLength}{1} \newcommand{\DzAngle}{90} \newcommand{\DzLength}{1} %------------------------------------------------ % axis parameters %------------------------------------------------ \newcommand{\DxVarA}{$x$} \newcommand{\DyVarA}{$y$} \newcommand{\DzVarA}{$z$} \newcommand{\DxVarB}{$x^\prime$} \newcommand{\DyVarB}{$y^\prime$} \newcommand{\DzVarB}{$z^\prime$} \newcommand{\DxNodePos}{below} \newcommand{\DyNodePos}{left} \newcommand{\DzNodePos}{above} %------------------------------------------------ % construction parameters %------------------------------------------------ \newcommand{\DscalingParameter}{1} \newcommand{\DshowPointParameter}{0} \newcommand{\DhingeBigRadius}{1.5mm} \newcommand{\DhingeRadius}{1mm} \newcommand{\DhingeAxialLength}{.5} \newcommand{\DhingeAxialHeight}{.4} \newcommand{\DhingeCornerLength}{3mm} \newcommand{\DspringLength}{10mm} \newcommand{\DspringPreLength}{7pt} \newcommand{\DspringPostLength}{5pt} \newcommand{\DspringAmplitude}{1.5mm} \newcommand{\DspringSegmentLength}{3pt} \newcommand{\DsupportGap}{1mm} \newcommand{\DsupportLength}{1} \newcommand{\DaxisLength}{1.5} \newcommand{\DlocalaxisLength}{.5} \newcommand{\DaxisDistance}{.2} %------------------------------------------------ % load parameters %------------------------------------------------ \newcommand{\DforceDistance}{.15} \newcommand{\DforceLength}{1.0} \newcommand{\DlineloadDistance}{.3} \newcommand{\DlineloadForce}{0.15} \newcommand{\DlineloadInterval}{0.2} \newcommand{\DlineloadDistanceMM}{3mm} %------------------------------------------------ % dimensioning parameters %------------------------------------------------ \newcommand{\DdimensioningBar}{4mm} \newcommand{\DnoteRadius}{1.5mm} %------------------------------------------------ % addon parameters %------------------------------------------------ \newcommand{\DaddonLength}{4mm} %------------------------------------------------ % help values %------------------------------------------------ \newcommand{\DhelpVarA}{1} \newcommand{\DhelpVarB}{1} \newcommand{\DhelpVarC}{1} % %================================================ % new tikz styles %================================================ % %------------------------------------------------ % line styles %------------------------------------------------ \tikzstyle{hugeLine}=[line width=\DhugeLineWidth,] \tikzstyle{bigLine}=[line width=\DbigLineWidth,] \tikzstyle{normalLine}=[line width=\DnormalLineWidth,] \tikzstyle{smallLine}=[line width=\DsmallLineWidth,] \tikzstyle{tinyLine}=[line width=\DtinyLineWidth,] %------------------------------------------------ % coords styles %------------------------------------------------ \tikzset{coords/.style={x={(\DxAngle:\DxLength cm)}, y={(\DyAngle:\DyLength cm)}, z={(\DzAngle:\DzLength cm)}}} %------------------------------------------------ % axis styles %------------------------------------------------ \tikzstyle{axisarrow}=[>=open triangle 45 ,normalLine] %------------------------------------------------ % dspring style %------------------------------------------------ \tikzstyle{Dspring} = [ normalLine, decoration= { zigzag, pre length=\DspringPreLength, post length=\DspringPostLength, segment length=\DspringSegmentLength, amplitude=\DspringAmplitude }, decorate, ] %------------------------------------------------ % force style %------------------------------------------------ \tikzstyle{force}=[>=latex,normalLine] % %================================================ % library elements %================================================ % %------------------------------------------------ % setcoords %------------------------------------------------ % \setcoords{x-angle}{y-angle}[x-direction][y-direction][z-direction][z-angle]; % \newcommandx{\setcoords}[6][3=1,4=1,5=1,6=90]{ \renewcommand{\DxAngle}{#1} \renewcommand{\DxLength}{#3} \renewcommand{\DyAngle}{#2} \renewcommand{\DyLength}{#4} \renewcommand{\DzAngle}{#6} \renewcommand{\DzLength}{#5} } %------------------------------------------------ % setaxis %------------------------------------------------ % \setaxis{type}[][][][][][]; % % Type 1 % \setaxis{1}; % set global axis to xyz and local axis to x'y'z' % Type 2 % \setaxis{2}; % set global axis to XYZ and local axis to xyz % Type 3 % \setaxis{3}[X-labelling][Y-labelling][Z-labelling][x-labelling][y-labelling][z-labelling]; % set global axis to [][][] and local axis to [][][] % Type 4 % \setaxis{4}[x-orientation][y-orientation][z-orientation]; % Change the xyz-orientation from \daxis{4} \newcommandx{\setaxis}[7][2,3,4,5,6,7]{ \ifthenelse{\equal{#1}{1}}{ \renewcommand{\DxVarA}{$x$} \renewcommand{\DyVarA}{$y$} \renewcommand{\DzVarA}{$z$} \renewcommand{\DxVarB}{$x^\prime$} \renewcommand{\DyVarB}{$y^\prime$} \renewcommand{\DzVarB}{$z^\prime$} }{} \ifthenelse{\equal{#1}{2}}{ \renewcommand{\DxVarA}{$X$} \renewcommand{\DyVarA}{$Y$} \renewcommand{\DzVarA}{$Z$} \renewcommand{\DxVarB}{$x$} \renewcommand{\DyVarB}{$y$} \renewcommand{\DzVarB}{$z$} }{} \ifthenelse{\equal{#1}{3}}{ \renewcommand{\DxVarA}{#2} \renewcommand{\DyVarA}{#3} \renewcommand{\DzVarA}{#4} \renewcommand{\DxVarB}{#5} \renewcommand{\DyVarB}{#6} \renewcommand{\DzVarB}{#7} }{} \ifthenelse{\equal{#1}{4}}{ \renewcommand{\DxNodePos}{#2} \renewcommand{\DyNodePos}{#3} \renewcommand{\DzNodePos}{#4} }{} } %------------------------------------------------ % showpoint %------------------------------------------------ % \showpoint % \newcommandx{\showpoint}{ \renewcommand{\DshowPointParameter}{1} } %------------------------------------------------ % dscaling %------------------------------------------------ % \dscaling{type}{scaling value}; % % Type 1 % \dscaling{1}{scaling value}; % scaling the distance between two points % Type 2 % \dscaling{2}{scaling value}; % scaling supports and hinges % Type 3 % \dscaling{3}{scaling value}; % scaling axis % Type 4 % \dscaling{4}{scaling value}; % scaling loads and lineloads % Type 5 % \dscaling{5}{scaling value}; % scaling the dimensionings % Type 6 % \dscaling{6}{scaling value}; % scaling the addons \newcommandx{\dscaling}[2]{ \ifthenelse{\equal{#1}{1}}{ \renewcommand{\DscalingParameter}{#2} }{} \ifthenelse{\equal{#1}{2}}{ \pgfmathsetmacro{\DhingeBigRadiusPTtoMM}{\DhingeBigRadius/2.83527} \pgfmathsetmacro{\DhingeRadiusPTtoMM}{\DhingeRadius/2.83527} \pgfmathsetmacro{\DhingeAxialLengthPT}{\DhingeAxialLength} \pgfmathsetmacro{\DhingeAxialHeightPT}{\DhingeAxialHeight} \pgfmathsetmacro{\DhingeCornerLengthPTtoMM}{\DhingeCornerLength/2.83527} % \renewcommand{\DhingeBigRadius}{\DhingeBigRadiusPTtoMM*#2mm} \renewcommand{\DhingeRadius}{\DhingeRadiusPTtoMM*#2mm} \renewcommand{\DhingeAxialLength}{\DhingeAxialLengthPT*#2} \renewcommand{\DhingeAxialHeight}{\DhingeAxialHeightPT*#2} \renewcommand{\DhingeCornerLength}{\DhingeCornerLengthPTtoMM*#2mm} % \pgfmathsetmacro{\DspringLengthPTtoMM}{\DspringLength/2.83527} \pgfmathsetmacro{\DspringPreLengthPT}{\DspringPreLength} \pgfmathsetmacro{\DspringPostLengthPT}{\DspringPostLength} \pgfmathsetmacro{\DspringAmplitudePTtoMM}{\DspringAmplitude/2.83527} \pgfmathsetmacro{\DspringSegmentLengthPT}{\DspringSegmentLength} % \renewcommand{\DspringLength}{\DspringLengthPTtoMM*#2mm} \renewcommand{\DspringPreLength}{\DspringPreLengthPT*#2} \renewcommand{\DspringPostLength}{\DspringPostLengthPT*#2} \renewcommand{\DspringAmplitude}{\DspringAmplitudePTtoMM*#2mm} \renewcommand{\DspringSegmentLength}{\DspringSegmentLengthPT*#2} % \pgfmathsetmacro{\DsupportGapPTtoMM}{\DsupportGap/2.83527} \pgfmathsetmacro{\DsupportLengthPT}{\DsupportLength} % \renewcommand{\DsupportGap}{\DsupportGapPTtoMM*#2mm} \renewcommand{\DsupportLength}{\DsupportLengthPT*#2} }{} \ifthenelse{\equal{#1}{3}}{ \pgfmathsetmacro{\DaxisLengthPT}{\DaxisLength} \pgfmathsetmacro{\DlocalaxisLengthPT}{\DlocalaxisLength} \pgfmathsetmacro{\DaxisDistancePT}{\DaxisDistance} % \renewcommand{\DaxisLength}{\DaxisLengthPT*#2} \renewcommand{\DlocalaxisLength}{\DlocalaxisLengthPT*#2} \renewcommand{\DaxisDistance}{\DaxisDistancePT*#2} }{} \ifthenelse{\equal{#1}{4}}{ \pgfmathsetmacro{\DforceDistancePT}{\DforceDistance} \pgfmathsetmacro{\DforceLengthPT}{\DforceLength} \pgfmathsetmacro{\DlineloadDistancePT}{\DlineloadDistance} \pgfmathsetmacro{\DlineloadForcePT}{\DlineloadForce} \pgfmathsetmacro{\DlineloadIntervalPT}{\DlineloadInterval} \pgfmathsetmacro{\DlineloadDistanceMMPTtoMM}{\DlineloadDistanceMM/2.83527} % \renewcommand{\DforceDistance}{\DforceDistancePT*#2} \renewcommand{\DforceLength}{\DforceLengthPT*#2} \renewcommand{\DlineloadDistance}{\DlineloadDistancePT*#2} \renewcommand{\DlineloadForce}{\DlineloadForcePT*#2} \renewcommand{\DlineloadInterval}{\DlineloadIntervalPT*#2} \renewcommand{\DlineloadDistanceMM}{\DlineloadDistanceMMPTtoMM*#2mm} }{} \ifthenelse{\equal{#1}{5}}{ \pgfmathsetmacro{\DdimensioningBarPTtoMM}{\DdimensioningBar/2.83527} % \renewcommand{\DdimensioningBar}{\DdimensioningBarPTtoMM*#2mm} }{} \ifthenelse{\equal{#1}{6}}{ \pgfmathsetmacro{\DaddonLengthPTtoMM}{\DaddonLength/2.83527} % \renewcommand{\DaddonLength}{\DaddonLengthPTtoMM*#2mm} }{} } %------------------------------------------------ % 3dpoint %------------------------------------------------ % \point{name}{x-coordiante}{y-coordiante}{z-coordiante}; % \newcommandx{\dpoint}[4]{ \node[coordinate][ shift={(#2*\DscalingParameter,#3*\DscalingParameter,#4*\DscalingParameter)}](#1){}; \ifthenelse{\equal{\DshowPointParameter}{1}}{ \draw (#2*\DscalingParameter,#3*\DscalingParameter,#4*\DscalingParameter) node [above,red]{#1}; }{} } %------------------------------------------------ % 3daxis %------------------------------------------------ % \daxis{type}{}[][][][][][][]; % % Type 1: Global Axis % \daxis{1}{insertion point}[X-orientation][Y-orientation][Z-orientation]; % % Type 2: Local Axis in plane % \daxis{2}{plane}[insertion point][end point][position][x-orientation][y-orientation][z-orientation][change y with z]; % plane e.g. xy, yx, xz, zx, yz or zy % Type 3: Local Axis in space % \daxis{3}{rotation A}[insertion point][end point][position][rotation 1][rotation 2][rotation 3][rotation B]; % rotation A and B to positioning the local axis around the beam (spherical coordinates) % rotation 1 about the world z axis, % rotation 2 about the (unrotated) world y axis, and % rotation 3 about the (unrotated) world z axis. % to change the xyz-orientation use \setaxis{4}[x-orientation][y-orientation][z-orientation]; \newcommandx{\daxis}[9][3,4,5=.5,6=right,7=below,8=left,9=0]{ \ifthenelse{\equal{#1}{1}}{ % \ifthenelse{\equal{#3}{}} {\renewcommand{\DhelpVarA}{below}} {\renewcommand{\DhelpVarA}{#3}} \ifthenelse{\equal{#4}{}} {\renewcommand{\DhelpVarB}{above}} {\renewcommand{\DhelpVarB}{#4}} \ifthenelse{\equal{#5}{.5}} {\renewcommand{\DhelpVarC}{above}} {\renewcommand{\DhelpVarC}{#5}} \draw[axisarrow,->] (#2) --++ (\DaxisLength,0,0)node[\DhelpVarA] {\DxVarA}; \draw[axisarrow,->] (#2) --++ (0,\DaxisLength,0)node[\DhelpVarB] {\DyVarA}; \draw[axisarrow,->] (#2) --++ (0,0,\DaxisLength)node[\DhelpVarC] {\DzVarA}; }{} \ifthenelse{\equal{#1}{2}}{ % \ifthenelse{\equal{#2}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#2}{zy}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#2}{xy}}{ \begin{scope}[canvas is yx plane at \DhelpVarA=0]} {\begin{scope}[canvas is #2 plane at \DhelpVarA=0]} \pgfmathsetmacro{\DaxisDistanceLO}{\DaxisDistance/0.283527} \ifthenelse{\equal{#2}{xy}} {\renewcommand{\DhelpVarA}{\DaxisDistanceLO*-3mm}} {\renewcommand{\DhelpVarA}{\DaxisDistanceLO*3mm}} \pgfmathsetmacro{\DlocalaxisLengthLO}{\DlocalaxisLength/0.283527} \renewcommand{\DhelpVarB}{\DlocalaxisLengthLO*3mm} \coordinate (axisVarA1) at ($ (#3)!#5!(#4) $); \coordinate (axisVarB1) at ($ (axisVarA1)!{\DhelpVarB}!(#4) $); \coordinate (axisVarA2) at ($ (axisVarA1)!\DhelpVarA!90:(#4) $); \coordinate (axisVarB2) at ($ (axisVarB1)!\DhelpVarA!90:(#4) $); \coordinate (axisVarC2) at ($ (axisVarA2)!1!90:(axisVarB2) $); \ifthenelse{\equal{#9}{0}} {\renewcommand{\DhelpVarB}{\DyVarB}} {\renewcommand{\DhelpVarB}{\DzVarB}} \draw[thin,->] (axisVarA2) -- (axisVarB2)node[#6] {\DxVarB}; \draw[thin,->] (axisVarA2) -- (axisVarC2)node[#7] {\DhelpVarB}; \end{scope} \ifthenelse{\equal{#9}{0}} {\renewcommand{\DhelpVarB}{\DzVarB}} {\renewcommand{\DhelpVarB}{\DyVarB}} \ifthenelse{\equal{#2}{xy}} {\draw[thin,->] (axisVarA2) --++ (0,0,-\DlocalaxisLength)node[#8] {\DhelpVarB};}{} \ifthenelse{\equal{#2}{yx}} {\draw[thin,->] (axisVarA2) --++ (0,0,-\DlocalaxisLength)node[#8] {\DhelpVarB};}{} \ifthenelse{\equal{#2}{xz}} {\draw[thin,->] (axisVarA2) --++ (0,-\DlocalaxisLength,0)node[#8] {\DhelpVarB};}{} \ifthenelse{\equal{#2}{zx}} {\draw[thin,->] (axisVarA2) --++ (0,\DlocalaxisLength,0)node[#8] {\DhelpVarB};}{} \ifthenelse{\equal{#2}{yz}} {\draw[thin,->] (axisVarA2) --++ (\DlocalaxisLength,0,0)node[#8] {\DhelpVarB};}{} \ifthenelse{\equal{#2}{zy}} {\draw[thin,->] (axisVarA2) --++ (-\DlocalaxisLength,0,0)node[#8] {\DhelpVarB};}{} }{} \ifthenelse{\equal{#1}{3}}{ \ifthenelse{\equal{#6}{right}} {\renewcommand{\DhelpVarA}{0}} {\renewcommand{\DhelpVarA}{#6}} \ifthenelse{\equal{#7}{below}} {\renewcommand{\DhelpVarB}{0}} {\renewcommand{\DhelpVarB}{#7}} \ifthenelse{\equal{#8}{left}} {\renewcommand{\DhelpVarC}{0}} {\renewcommand{\DhelpVarC}{#8}} \coordinate (axisVarA1) at ($ (#3)!#5!(#4) $); \coordinate (axisVarA2) at ($(axisVarA1)+1*({\DaxisDistance*cos(#9)*sin(#2)},{\DaxisDistance*sin(#9)*sin(#2)},{\DaxisDistance*cos(#2)})$); \tdplotsetrotatedcoords{\DhelpVarA}{\DhelpVarB}{\DhelpVarC}; \tdplotsetrotatedcoordsorigin{(axisVarA2)} \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[\DxNodePos]{\DxVarB}; \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[\DyNodePos]{\DyVarB}; \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[\DzNodePos]{\DzVarB}; }{} } %------------------------------------------------ % 3dbeam %------------------------------------------------ % \dbeam{type}{initial point}{end point}[rounded initial point][rounded end point]; % with rounded initial point or/and rounded end point: 1 or nothing = true, 0=false, \newcommandx{\dbeam}[5][4=1,5=1]{ \ifthenelse{\equal{#1}{1}}{ % \draw [hugeLine] (#2) -- (#3); \ifthenelse{\equal{#4}{0}}{} {\fill (#2) circle (\DhugeLineWidth/2);} \ifthenelse{\equal{#5}{0}}{} {\fill (#3) circle (\DhugeLineWidth/2);} }{} \ifthenelse{\equal{#1}{2}}{ % \draw [bigLine] (#2) -- (#3); \ifthenelse{\equal{#4}{0}}{} {\fill (#2) circle (\DbigLineWidth/2);} \ifthenelse{\equal{#5}{0}}{} {\fill (#3) circle (\DbigLineWidth/2);} }{} \ifthenelse{\equal{#1}{3}}{ % \draw [normalLine,dashed] (#2) -- (#3); }{} } %------------------------------------------------ % 3dsupport %------------------------------------------------ % \dsupport{type}{insertion point}[][][][]; % % Type 1 % \dsupport{1}{insertion point}[x-direction][y-direction][z-direction]; % with xyz-direction: 1=true, 0=false, -1=other direction % Type 2 % \dsupport{2}{insertion point}[plane][normal-direction]; % % Type 3 % \dsupport{3}{insertion point}[x-direction][y-direction][z-direction]; % in combination with \dhinge{3} % with xyz-direction: 1=true, 0=false, -1=other direction % Type 4 % \dsupport{4}{insertion point}[x-direction][y-direction][z-direction]; % same as type 1 but with springs % Type 5 % \dsupport{5}{insertion point}[x-direction][y-direction][z-direction]; % same as type 3 but with springs \newcommandx{\dsupport}[6][3=1,4=1,5=1,6=1]{ \ifthenelse{\equal{#1}{1}}{ % \ifthenelse{\equal{#3}{0}}{}{ \draw [normalLine] (#2)-- ++(-\DsupportLength*#3,0,0); \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,0)$) circle (\DhingeRadius); } \ifthenelse{\equal{#4}{0}}{}{ \draw [normalLine] (#2)-- ++(0,-\DsupportLength*#4,0); \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,0)$) circle (\DhingeRadius); } \ifthenelse{\equal{#5}{0}}{}{ \draw [normalLine] (#2)-- ++(0,0,-\DsupportLength*#5); \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius); } }{} \ifthenelse{\equal{#1}{2}}{ % \ifthenelse{\equal{#3}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#3}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#3}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#3}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#3}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#3}{zy}} {\renewcommand{\DhelpVarA}{x}}{} \begin{scope}[canvas is #3 plane at \DhelpVarA=#4] \draw [hugeLine] (#2)-- ++(-\DsupportLength/2,0)--++(\DsupportLength,0); \draw [hugeLine] (#2)-- ++(0,-\DsupportLength/2)--++(0,\DsupportLength); \end{scope} }{} \ifthenelse{\equal{#1}{3}}{ % \ifthenelse{\equal{#3}{0}}{}{ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(-\DsupportLength*#3,0,0); \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius); } \ifthenelse{\equal{#4}{0}}{}{ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(0,-\DsupportLength*#4,0); \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius); } \ifthenelse{\equal{#5}{0}}{}{ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight/2.5)$)-- ++(0,0,-\DsupportLength*#5+\DhingeAxialHeight/2); \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius); } }{} \ifthenelse{\equal{#1}{4}}{ % \ifthenelse{\equal{#3}{0}}{}{ \draw [Dspring] (#2)-- ++(-\DsupportLength*#3,0,0); \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,0)$) circle (\DhingeRadius); } \ifthenelse{\equal{#4}{0}}{}{ \draw [Dspring] (#2)-- ++(0,-\DsupportLength*#4,0); \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,0)$) circle (\DhingeRadius); } \ifthenelse{\equal{#5}{0}}{}{ \draw [Dspring] (#2)-- ++(0,0,-\DsupportLength*#5); \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius); } }{} \ifthenelse{\equal{#1}{5}}{ % \ifthenelse{\equal{#3}{0}}{}{ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(-\DsupportLength*#3,0,0); \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius); } \ifthenelse{\equal{#4}{0}}{}{ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(0,-\DsupportLength*#4,0); \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius); } \ifthenelse{\equal{#5}{0}}{}{ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight/2.5)$)-- ++(0,0,-\DsupportLength*#5+\DhingeAxialHeight/2); \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius); } }{} } %------------------------------------------------ % 3dhinge %------------------------------------------------ % \dhinge{type}{insertion point}[][][]; % % Type 1 % \dhinge{1}{insertion point}; % % Type 2 % \dhinge{2}{insertion point}[initial point][end point][orientation]; % with orientation: 0=standard, 1=other direction % Type 3 % \dhinge{3}{insertion point}[rotation]; % in combination with \dsupport{3} % Type 4 % \dhinge{4}{insertion point}[initial point][end point]; % \newcommandx{\dhinge}[5][3=0,4=0,5=0]{ \ifthenelse{\equal{#1}{1}}{ % \begin{scope}[rotate around={#3:(#2)}] \fill [white] (#2) circle (\DhingeRadius); \draw [normalLine] (#2) circle (\DhingeRadius); \end{scope} }{} \ifthenelse{\equal{#1}{2}}{ % \begin{scope}[even odd rule] \ifthenelse{\equal{#5}{1}}{ \clip (#2) circle (\DhingeBigRadius+\DnormalLineWidth) (#2)--(#3)--($(#3)!\DhingeBigRadius+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DhingeBigRadius+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle; }{ \clip (#2)--(#3)--($(#3)!\DhingeBigRadius+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DhingeBigRadius+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle; } \filldraw [fill=white,normalLine] (#2) circle (\DhingeBigRadius); \end{scope} \draw[hugeLine] ($(#2)!\DhingeBigRadius!(#3)$)--(#2)--($(#2)!\DhingeBigRadius!(#4)$); }{} \ifthenelse{\equal{#1}{3}}{ % \begin{scope} \draw [normalLine] ($(#2)+1*({0*cos(#3+90)-\DhingeAxialHeight/2*sin(#3+90)},{0*sin(#3+90)+\DhingeAxialHeight/2*cos(#3+90)},2*\DhingeAxialLength/3)$) -- ++(0,0,-\DhingeAxialLength) -- ++({0*cos(#3+90)+\DhingeAxialHeight*sin(#3+90)},{0*sin(#3+90)-\DhingeAxialHeight*cos(#3+90)}) -- ++(0,0,\DhingeAxialLength); \end{scope} }{} \ifthenelse{\equal{#1}{4}}{ % \coordinate (hingeVarA) at ($ (#2)!\DhingeCornerLength!(#3) $); \coordinate (hingeVarB) at ($ (#2)!\DhingeCornerLength!(#4) $); \fill[black] (#2) -- (hingeVarA) -- (hingeVarB) -- cycle; \fill[black] (#2)circle (\DhugeLineWidth/2); }{} } %------------------------------------------------ % 3dload %------------------------------------------------ % \dload{type}{insertion point}[rotation A][rotation B][load length][load distance]; % rotation A and B to positioning the load around the insertion point (spherical coordinates) % \newcommandx{\dload}[6][3=0,4=0,5=0,6=0]{ \ifthenelse{\equal{#1}{1}}{ % \ifthenelse{\equal{#6}{0}} {\renewcommand{\DhelpVarA}{\DforceDistance}} {\renewcommand{\DhelpVarA}{#6}} \ifthenelse{\equal{#5}{0}} {\renewcommand{\DhelpVarB}{\DforceLength}} {\renewcommand{\DhelpVarB}{#5}} \draw[force,<-] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)}); }{} \ifthenelse{\equal{#1}{2}}{ % \ifthenelse{\equal{#6}{0}} {\renewcommand{\DhelpVarA}{\DforceDistance}} {\renewcommand{\DhelpVarA}{#6}} \ifthenelse{\equal{#5}{0}} {\renewcommand{\DhelpVarB}{\DforceLength}} {\renewcommand{\DhelpVarB}{#5}} \draw[force,->] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)}); }{} \ifthenelse{\equal{#1}{3}}{ % \ifthenelse{\equal{#6}{0}} {\renewcommand{\DhelpVarA}{\DforceDistance}} {\renewcommand{\DhelpVarA}{#6}} \ifthenelse{\equal{#5}{0}} {\renewcommand{\DhelpVarB}{\DforceLength}} {\renewcommand{\DhelpVarB}{#5}} \draw[force,<<-] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)}); }{} \ifthenelse{\equal{#1}{4}}{ % \ifthenelse{\equal{#6}{0}} {\renewcommand{\DhelpVarA}{\DforceDistance}} {\renewcommand{\DhelpVarA}{#6}} \ifthenelse{\equal{#5}{0}} {\renewcommand{\DhelpVarB}{\DforceLength}} {\renewcommand{\DhelpVarB}{#5}} \draw[force,->>] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)}); }{} } %------------------------------------------------ % 3dlineload %------------------------------------------------ % \dlineload{type}{}[]{initial point}{end point}[][][][]; % % Type 1: in plane % \dlineload{1}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][force interval]; % % Type 2: in plane % \dlineload{2}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][force interval]; % % Type 3: in plane % \dlineload{3}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][lineload distance from inital point][force interval]; % % Type 4: in plane % \dlineload{4}{plane}[plane distance]{initial point}{end point}[force interval][force length]; % % Type 5: in space % \dlineload{5}{rotation A}[rotation B]{initial point}{end point}[initial force value][end force value][force interval]; % rotation A and B to positioning the lineload around the initial point (spherical coordinates) % Type 6: in space % \dlineload{6}{rotation A}[rotation B]{initial point}{end point}[force interval][force length]; % rotation A and B to positioning the lineload around the initial point (spherical coordinates) \newcommandx{\dlineload}[9][3=0,6=1,7=1,8=\DlineloadInterval,9=\DlineloadInterval]{ % \ifthenelse{\equal{#2}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#2}{zy}} {\renewcommand{\DhelpVarA}{x}}{} % \ifthenelse{\equal{#1}{5}} {\sublineload{#1}{#4}{#5}[#6][#7][#8][#9][#2][#3];} {\ifthenelse{\equal{#1}{6}} {\sublineload{#1}{#4}{#5}[#6][#7][#8][#9][#2][#3];} { \begin{scope}[canvas is #2 plane at \DhelpVarA=#3] \sublineload{#1}{#4}{#5}[#6][#7][#8][#9]; \end{scope} } } } \newcommandx{\sublineload}[9][4=1,5=1,6=\DlineloadInterval,7=\DlineloadInterval,8=0,9=0]{ \ifthenelse{\equal{#1}{1}}{ % \coordinate (lineloadVarA1) at ($ (#2)!\DlineloadDistanceMM!90:(#3) $); \coordinate (lineloadVarB1) at ($ (#3)!\DlineloadDistanceMM!-90:(#2) $); \coordinate (lineloadVarA2) at ($ (#2)!{\DlineloadDistanceMM +#4cm}!90:(#3) $); \coordinate (lineloadVarB2) at ($ (#3)!{\DlineloadDistanceMM+#5cm}!-90:(#2) $); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\DnormalLineWidth/2); \fill (lineloadVarB2) circle (\DnormalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\DscalingParameter} \pgfmathsetmacro{\lineloadIntervalStep}{#6/\DscalingParameter*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\DscalingParameter} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{2}}{ % \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\DlineloadDistanceMM) $); \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\DlineloadDistanceMM) $); \coordinate (lineloadVarA2) at ($ (#2)+1*(0,\DlineloadDistanceMM+#4cm) $); \coordinate (lineloadVarB2) at ($ (#3)+1*(0,\DlineloadDistanceMM+#5cm) $); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\DnormalLineWidth/2); \fill (lineloadVarB2) circle (\DnormalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#6} \pgfmathsetmacro{\lineloadIntervalStep}{#6*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{3}}{ % \ifthenelse{\equal{#6}{\DlineloadInterval}} {\renewcommand{\DhelpVarA}{0cm}} {\renewcommand{\DhelpVarA}{#6cm}} \path let \p1 = (#2), \p2 = (#3) in coordinate (lineloadVarA1) at ($(\p1)+1*(0,\DlineloadDistanceMM+\DhelpVarA)$) coordinate (lineloadVarB1) at ($(\x2,\y1)+1*(0,\DlineloadDistanceMM+\DhelpVarA)$) coordinate (lineloadVarA2) at ($ (\p1)+1*(0,\DlineloadDistanceMM+\DhelpVarA+#4cm)$) coordinate (lineloadVarB2) at ($ (\x2,\y1)+1*(0,\DlineloadDistanceMM+\DhelpVarA+#5cm)$); \draw [tinyLine,loosely dotted] (lineloadVarA1)--($(#2)+1*(0,\DhingeBigRadius)$); \draw [tinyLine,loosely dotted] (lineloadVarB1)--($(#3)+1*(0,\DhingeBigRadius)$); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\DnormalLineWidth/2); \fill (lineloadVarB2) circle (\DnormalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#7} \pgfmathsetmacro{\lineloadIntervalStep}{#7*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#7} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{4}}{ % \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\DlineloadDistanceMM) $); \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\DlineloadDistanceMM) $); \ifthenelse{\equal{#4}{1}} {\pgfmathsetmacro{\lineloadIntervalStep}{\DlineloadInterval} \pgfmathsetmacro{\lineloadIntervalEnd}{1-\DlineloadInterval/2}} {\pgfmathsetmacro{\lineloadIntervalStep}{#4} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}} \ifthenelse{\equal{#5}{1}} {\pgfmathsetmacro{\lineloadForceLength}{\DlineloadForce}} {\pgfmathsetmacro{\lineloadForceLength}{#5}} \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{5}}{ % \coordinate (lineloadVarA1) at ($(#2)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$); \coordinate (lineloadVarB1) at ($(#3)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$); \coordinate (lineloadVarA2) at ($(#2)+1*({(\DlineloadDistance+#4)*cos(#9)*sin(#8)},{(\DlineloadDistance+#4)*sin(#9)*sin(#8)},{(\DlineloadDistance+#4)*cos(#8)})$); \coordinate (lineloadVarB2) at ($(#3)+1*({(\DlineloadDistance+#5)*cos(#9)*sin(#8)},{(\DlineloadDistance+#5)*sin(#9)*sin(#8)},{(\DlineloadDistance+#5)*cos(#8)})$); \ifthenelse{\equal{#4}{0}}{} { \draw [force,->] (lineloadVarA2) -- (lineloadVarA1); } \ifthenelse{\equal{#5}{0}}{} { \draw [force,->] (lineloadVarB2) -- (lineloadVarB1); } \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {}; \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2); \fill (lineloadVarA2) circle (\DnormalLineWidth/2); \fill (lineloadVarB2) circle (\DnormalLineWidth/2); \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\DscalingParameter} \pgfmathsetmacro{\lineloadIntervalStep}{#6/\DscalingParameter*2} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\DscalingParameter} \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$); }{} \ifthenelse{\equal{#1}{6}}{ % \coordinate (lineloadVarA1) at ($(#2)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$); \coordinate (lineloadVarB1) at ($(#3)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$); \ifthenelse{\equal{#4}{1}} {\pgfmathsetmacro{\lineloadIntervalStep}{\DlineloadInterval} \pgfmathsetmacro{\lineloadIntervalEnd}{1-\DlineloadInterval/2}} {\pgfmathsetmacro{\lineloadIntervalStep}{#4} \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}} \ifthenelse{\equal{#5}{1}} {\pgfmathsetmacro{\lineloadForceLength}{\DlineloadForce}} {\pgfmathsetmacro{\lineloadForceLength}{#5}} \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd} \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$); }{} } %------------------------------------------------ % 3dinternalforces %------------------------------------------------ % \dinternalforces{plane}[plane distance]{initial point}{end point}{initial value}{end value}[parabola height][color][bend position]; % \newcommandx{\dinternalforces}[9][2=0,7=0,8=red,9=.6667]{ % \ifthenelse{\equal{#1}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#1}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#1}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#1}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#1}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#1}{zy}} {\renewcommand{\DhelpVarA}{x}}{} \begin{scope}[canvas is #1 plane at \DhelpVarA=#2] \subinternalforces{#3}{#4}{#5}{#6}[#7][#8][#9]; \end{scope} } \newcommandx{\subinternalforces}[7][5=0,6=red,7=.6667]{% \coordinate (internalforcesVarA) at ($ (#1)!#3cm!-90:(#2) $); \coordinate (internalforcesVarB) at ($ (#2)!#4cm!90:(#1)$); \coordinate (internalforcesVarAB) at ($ (internalforcesVarA)!.5!(internalforcesVarB)$); \coordinate (internalforcesVarC) at ($ (internalforcesVarAB)+2*(0,#5)$); \coordinate (internalforcesVarAC) at ($ (internalforcesVarA)!#7!(internalforcesVarC)$); \coordinate (internalforcesVarBC) at ($ (internalforcesVarB)!#7!(internalforcesVarC)$); \ifthenelse{\equal{#5}{0}}{ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) -- (internalforcesVarB) (internalforcesVarB) -- (#2); \fill [color=#6] (internalforcesVarA) circle (\DbigLineWidth/2); \fill [color=#6] (internalforcesVarB) circle (\DbigLineWidth/2); \fill [color=#6] (#1) circle (\DbigLineWidth/2); \fill [color=#6] (#2) circle (\DbigLineWidth/2); } { \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) .. controls (internalforcesVarAC) and (internalforcesVarBC) .. (internalforcesVarB) (internalforcesVarB) -- (#2); \fill [color=#6] (internalforcesVarA) circle (\DbigLineWidth/2); \fill [color=#6] (internalforcesVarB) circle (\DbigLineWidth/2); \fill [color=#6] (#1) circle (\DbigLineWidth/2); \fill [color=#6] (#2) circle (\DbigLineWidth/2); } } %------------------------------------------------ % 3ddimensioning %------------------------------------------------ % \ddimensioning{plane}[plane distance]{initial point}{end point}{distance from point of origin}[measure][help line length]; % \newcommandx{\ddimensioning}[7][2=0,6,7=0]{ % \ifthenelse{\equal{#1}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#1}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#1}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#1}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#1}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#1}{zy}} {\renewcommand{\DhelpVarA}{x}}{} \subdimensioning{#1}{#3}{#4}{#5}[#6][#7][#2][\DhelpVarA]; } \newcommandx{\subdimensioning}[8][5,6=0,7=0,8]{ \ifthenelse{\equal{#1}{xy}}{ \begin{scope}[canvas is yx plane at #8=#7] \path let \p1 = (#2), \p2 = (#3) in coordinate (dimensioningVarA) at (#4,\y1) coordinate (dimensioningVarB) at (#4,\y2); \draw [smallLine] (dimensioningVarA)--++(\DdimensioningBar/2,0)--++(-\DdimensioningBar,0) (dimensioningVarA)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2) (dimensioningVarB)--++(\DdimensioningBar/2,0)--++(-\DdimensioningBar,0) (dimensioningVarB)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2); \end{scope} \draw [smallLine] (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5}; \draw [tinyLine,dotted] (dimensioningVarA)--($ (dimensioningVarA)!{#6cm}!(#2) $) (dimensioningVarB)--($ (dimensioningVarB)!{#6cm}!(#3) $); }{ \begin{scope}[canvas is #1 plane at #8=#7] \path let \p1 = (#2), \p2 = (#3) in coordinate (dimensioningVarA) at (\x1,#4) coordinate (dimensioningVarB) at (\x2,#4); \draw [smallLine] (dimensioningVarA)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar) (dimensioningVarA)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2) (dimensioningVarB)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar) (dimensioningVarB)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2); \end{scope} \draw [smallLine] (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5}; \draw [tinyLine,dotted] (dimensioningVarA)--($ (dimensioningVarA)!{#6cm}!(#2) $) (dimensioningVarB)--($ (dimensioningVarB)!{#6cm}!(#3) $); } } %------------------------------------------------ % 3dnotation %------------------------------------------------ % \dnotation{type}{insertion point}{}[][][]; % % Type 1 % \dnotation{1}{insertion point}{labelling}[orientation]; % % Type 2 % \dnotation{2}{insertion point}{labelling}[orientation]; % % Type 3 % \dnotation{3}{initial point}{end point}[labelling][position][orientation]; % % Type 4 % \dnotation{4}{initial point}{end point}[labelling][position][orientation][text orientation]; % with text orientation: 0 or nothing = parallel to beam, 1=parallel to axis % Type 5 % \dnotation{5}{initial point}{end point}[labelling][position][orientation][text orientation]; % with text orientation: 0 or nothing = parallel to beam, 1=parallel to axis % Type 6 % \dnotation{6}{insertion point}{labelling}; % \newcommandx{\dnotation}[7][4=above right,5=.5,6=above,7=sloped]{ \ifthenelse{\equal{#1}{1}}{ \begin{scope} \draw (#2) node [#4]{#3}; \end{scope} }{} \ifthenelse{\equal{#1}{2}}{ \begin{scope} \draw (#2) node [#4]{#3}; \draw[bigLine] (#2)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar); \end{scope} }{} \ifthenelse{\equal{#1}{3}}{ \coordinate (notationVarA1) at ($ (#2)!#5!(#3) $); \coordinate (notationVarB1) at ($ (notationVarA1)!\DdimensioningBar/2!90:(#3) $); \coordinate (notationVarB2) at ($ (notationVarA1)!\DdimensioningBar/2!-90:(#3) $); \draw[bigLine] (notationVarB1)--(notationVarB2); \draw (notationVarA1) node [#6]{#4}; }{} \ifthenelse{\equal{#1}{4}}{ \ifthenelse{\equal{#7}{1}} {\renewcommand{\DhelpVarB}{}} {\renewcommand{\DhelpVarB}{sloped}} \begin{scope} \path (#2) -- (#3) node[inner sep=0mm,rectangle,smallLine,fill=white,draw,minimum size=2.5*\DnoteRadius,midway,#6,\DhelpVarB,pos=#5] {#4}; \end{scope} }{} \ifthenelse{\equal{#1}{5}}{ \ifthenelse{\equal{#7}{1}} {\renewcommand{\DhelpVarB}{}} {\renewcommand{\DhelpVarB}{sloped}} \begin{scope} \path (#2) -- (#3) node[midway,#6,\DhelpVarB,pos=#5] {#4}; \end{scope} }{} \ifthenelse{\equal{#1}{6}}{ \begin{scope} \draw (#2) node [inner sep=0mm,circle,smallLine,fill=white,draw,minimum size=2.5*\DnoteRadius]{#3}; \end{scope} }{} } %------------------------------------------------ % 3daddon %------------------------------------------------ % \daddon{type}{plane}[plane distance]{}{}{}[]; % % Type 1 % \daddon{1}{plane}[plane distance]{insertion point}{end point}{position}; % % Type 2 % \daddon{2}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation]; % with orientation: 1=standard, -1 or 0 = other direction % Type 3 % \daddon{3}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation]; % with orientation: 1=standard, -1 or 0 = other direction \newcommandx{\daddon}[7][3=0,7=1]{ \ifthenelse{\equal{#2}{xy}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{yx}} {\renewcommand{\DhelpVarA}{z}}{} \ifthenelse{\equal{#2}{xz}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{zx}} {\renewcommand{\DhelpVarA}{y}}{} \ifthenelse{\equal{#2}{yz}} {\renewcommand{\DhelpVarA}{x}}{} \ifthenelse{\equal{#2}{zy}} {\renewcommand{\DhelpVarA}{x}}{} \begin{scope}[canvas is #2 plane at \DhelpVarA=#3] \subaddon{#1}{#4}{#5}{#6}[#7]; \end{scope} } \newcommandx{\subaddon}[5][5=1]{ \ifthenelse{\equal{#1}{1}}{ \coordinate (addonVarA1) at ($ (#2)!#4!(#3) $); \coordinate (addonVarB1) at ($ (addonVarA1)!\DaddonLength/2!45:(#3) $); \coordinate (addonVarB2) at ($ (addonVarA1)!\DaddonLength/2!225:(#3) $); \draw[smallLine] (addonVarB1)--(addonVarB2) ($(addonVarB1)+1*(\DsupportGap,0)$)--($(addonVarB2)+1*(\DsupportGap,0)$); }{} \ifthenelse{\equal{#1}{2}}{ \coordinate (addonVarA1) at ($ (#2)!\DaddonLength!(#3) $); \coordinate (addonVarB1) at ($ (#2)!\DaddonLength!(#4) $); \ifthenelse{\equal{#5}{1}} { \coordinate (addonVarC1) at ($ (addonVarA1)!\DaddonLength!90:(#3) $); \coordinate (addonVarD1) at ($ (#2)!1.414*\DaddonLength/2!45:(#3) $); } { \coordinate (addonVarC1) at ($ (addonVarA1)!\DaddonLength!-90:(#3) $); \coordinate (addonVarD1) at ($ (#2)!1.414*\DaddonLength/2!-45:(#3) $); } \draw[smallLine] (addonVarA1)--(addonVarC1)-- (addonVarB1); \filldraw (addonVarD1) circle (\DsmallLineWidth); }{} \ifthenelse{\equal{#1}{3}}{ \begin{scope}[even odd rule] \ifthenelse{\equal{#5}{1}}{ \clip (#2) circle (\DdimensioningBar+\DnormalLineWidth) (#2)--(#3)--($(#3)!\DaddonLength+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DaddonLength+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle; }{ \clip (#2)--(#3)--($(#3)!\DaddonLength+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DaddonLength+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle; } \draw [smallLine] (#2) circle (\DaddonLength) (#2) circle (\DaddonLength-\DnormalLineWidth-\DnormalLineWidth); \end{scope} }{} } %================================================ % Commands from 3dplot.sty by Jeff Hein 2009 %================================================ %------------------------------------------------ % \tdplotsinandcos{sin}{cos}{theta} %------------------------------------------------ %determines the sin and cos of the specified angle (in degrees). %#1: returns sin(#3) %#2: returns cos(#3) %#3: user-specified angle \newcommand{\tdplotsinandcos}[3]{% \pgfmathsetmacro{#1}{sin(#3)}% \pgfmathsetmacro{#2}{cos(#3)}% } %------------------------------------------------ % \tdplotmult{result}{multiplicand}{multiplicator} %------------------------------------------------ %determines the multiplication of specified values. %#1: returns #2*#3 %#2: user-specified multiplicand %#3: user-specified multiplicator \newcommand{\tdplotmult}[3]{% \pgfmathsetmacro{#1}{#2*#3}% } %------------------------------------------------ % \tdplotsetrotatedcoords{\alpha}{\beta}{\gamma} %------------------------------------------------ %generates the coordinate transformation for the rotated coordinate system within the display coordinate system. This should be called only after the display coordinate system has been defined. If the display coordinate system changes, this will have to be updated. %#1: user-specified euler angle \alpha. %#2: user-specified euler angle \beta. %#3: user-specified euler angle \gamma. \newcommand{\tdplotsetrotatedcoords}[3]{% % \pgfmathsetmacro{\alphaeul}{#1} \pgfmathsetmacro{\betaeul}{#2} \pgfmathsetmacro{\gammaeul}{#3} % %perform some trig for the Euler transformation \tdplotsinandcos{\sinalpha}{\cosalpha}{\alphaeul} \tdplotsinandcos{\sinbeta}{\cosbeta}{\betaeul} \tdplotsinandcos{\singamma}{\cosgamma}{\gammaeul} % \tdplotmult{\sasb}{\sinalpha}{\sinbeta} \tdplotmult{\sbsg}{\sinbeta}{\singamma} \tdplotmult{\sasg}{\sinalpha}{\singamma} \tdplotmult{\sasbsg}{\sasb}{\singamma} % \tdplotmult{\sacb}{\sinalpha}{\cosbeta} \tdplotmult{\sacg}{\sinalpha}{\cosgamma} \tdplotmult{\sbcg}{\sinbeta}{\cosgamma} \tdplotmult{\sacbsg}{\sacb}{\singamma} \tdplotmult{\sacbcg}{\sacb}{\cosgamma} % \tdplotmult{\casb}{\cosalpha}{\sinbeta} \tdplotmult{\cacb}{\cosalpha}{\cosbeta} \tdplotmult{\cacg}{\cosalpha}{\cosgamma} \tdplotmult{\casg}{\cosalpha}{\singamma} % \tdplotmult{\cacbsg}{\cacb}{\singamma} \tdplotmult{\cacbcg}{\cacb}{\cosgamma} % %determine rotation matrix elements for Euler transformation \pgfmathsetmacro{\raaeul}{\cacbcg - \sasg} \pgfmathsetmacro{\rabeul}{-\cacbsg - \sacg} \pgfmathsetmacro{\raceul}{\casb} \pgfmathsetmacro{\rbaeul}{\sacbcg + \casg} \pgfmathsetmacro{\rbbeul}{-\sacbsg + \cacg} \pgfmathsetmacro{\rbceul}{\sasb} \pgfmathsetmacro{\rcaeul}{-\sbcg} \pgfmathsetmacro{\rcbeul}{\sbsg} \pgfmathsetmacro{\rcceul}{\cosbeta} % % transformation from polar coordinates to Cartesian coordinates \pgfmathsetmacro{\xxcart}{\DxLength*cos(\DxAngle)} \pgfmathsetmacro{\xycart}{\DxLength*sin(\DxAngle)} \pgfmathsetmacro{\yxcart}{\DyLength*cos(\DyAngle)} \pgfmathsetmacro{\yycart}{\DyLength*sin(\DyAngle)} \pgfmathsetmacro{\zxcart}{\DzLength*cos(\DzAngle)} \pgfmathsetmacro{\zycart}{\DzLength*sin(\DzAngle)} % \pgfmathsetmacro{\raarot}{\xxcart} \pgfmathsetmacro{\rbarot}{\xycart} \pgfmathsetmacro{\rabrot}{\yxcart} \pgfmathsetmacro{\rbbrot}{\yycart} \pgfmathsetmacro{\racrot}{\zxcart} \pgfmathsetmacro{\rbcrot}{\zycart} % %now, determine master rotation matrix to define euler-rotated coordinates within the display coordinate frame \tdplotmult{\raaeaa}{\raarot}{\raaeul} \tdplotmult{\rabeba}{\rabrot}{\rbaeul} \tdplotmult{\raceca}{\racrot}{\rcaeul} % \tdplotmult{\raaeab}{\raarot}{\rabeul} \tdplotmult{\rabebb}{\rabrot}{\rbbeul} \tdplotmult{\racecb}{\racrot}{\rcbeul} % \tdplotmult{\raaeac}{\raarot}{\raceul} \tdplotmult{\rabebc}{\rabrot}{\rbceul} \tdplotmult{\racecc}{\racrot}{\rcceul} % \tdplotmult{\rbaeaa}{\rbarot}{\raaeul} \tdplotmult{\rbbeba}{\rbbrot}{\rbaeul} \tdplotmult{\rbceca}{\rbcrot}{\rcaeul} % \tdplotmult{\rbaeab}{\rbarot}{\rabeul} \tdplotmult{\rbbebb}{\rbbrot}{\rbbeul} \tdplotmult{\rbcecb}{\rbcrot}{\rcbeul} % \tdplotmult{\rbaeac}{\rbarot}{\raceul} \tdplotmult{\rbbebc}{\rbbrot}{\rbceul} \tdplotmult{\rbcecc}{\rbcrot}{\rcceul} % %set up the master rotation matrix elements \pgfmathsetmacro{\raarc}{\raaeaa + \rabeba + \raceca} \pgfmathsetmacro{\rabrc}{\raaeab + \rabebb + \racecb} \pgfmathsetmacro{\racrc}{\raaeac + \rabebc + \racecc} \pgfmathsetmacro{\rbarc}{\rbaeaa + \rbbeba + \rbceca} \pgfmathsetmacro{\rbbrc}{\rbaeab + \rbbebb + \rbcecb} \pgfmathsetmacro{\rbcrc}{\rbaeac + \rbbebc + \rbcecc} % \tikzset{tdplot_rotated_coords/.append style={x={(\raarc cm,\rbarc cm)},y={(\rabrc cm, \rbbrc cm)},z={(\racrc cm, \rbcrc cm)}}}% } %------------------------------------------------ % \tdplotsetrotatedcoordsorigin{point} %------------------------------------------------ %this translates the rotated coordinate system to the specified point. %#1: user-specified coordinate \newcommand{\tdplotsetrotatedcoordsorigin}[1]{% %\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}% \tikzset{tdplot_rotated_coords/.append style={shift=#1}}% } %------------------------------------------------ % \tdplotresetrotatedcoordsorigin %------------------------------------------------ %this resets the rotated coordinate system translation back to the origin of the main coordinate system \newcommand{\tdplotresetrotatedcoordsorigin}{% %\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}% \tikzset{tdplot_rotated_coords/.append style={shift={(0,0,0)}}}% } %============================================================================= %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: