\input regression-test.tex \documentclass{article} \usepackage{tikzphysics} \newdimen\tikzphysicstestx \newdimen\tikzphysicstesty \newdimen\tikzphysicstestxx \newdimen\tikzphysicstestyy \newdimen\tikzphysicstestdiff \newdimen\tikzphysicstestexpected \newcommand{\tikzphysicsgetpoint}[2]{% \pgfextractx{\tikzphysicstestx}{\pgfpointanchor{#1}{#2}}% \pgfextracty{\tikzphysicstesty}{\pgfpointanchor{#1}{#2}}% } \newcommand{\tikzphysicsassertdim}[3]{% \tikzphysicstestexpected=#2\relax \tikzphysicstestdiff=#1\relax \advance\tikzphysicstestdiff by -\tikzphysicstestexpected\relax \ifdim\tikzphysicstestdiff<0pt \tikzphysicstestdiff=-\tikzphysicstestdiff\fi \ifdim\tikzphysicstestdiff<0.03pt \TYPE{PASS: #3}% \else \TYPE{FAIL: #3 (got \the#1, expected \the\tikzphysicstestexpected)}% \fi } \newcommand{\tikzphysicsassertpoint}[5]{% \tikzphysicsgetpoint{#1}{#2}% \tikzphysicstestxx=\tikzphysicstestx \tikzphysicstestyy=\tikzphysicstesty \tikzphysicsgetpoint{#3}{#4}% \tikzphysicsassertdim{\tikzphysicstestxx}{\tikzphysicstestx}{#5 x}% \tikzphysicsassertdim{\tikzphysicstestyy}{\tikzphysicstesty}{#5 y}% } \newcommand{\tikzphysicsassertnumber}[3]{% \pgfmathparse{abs((#1)-(#2))}% \ifdim\pgfmathresult pt<0.001pt \TYPE{PASS: #3}% \else \TYPE{FAIL: #3 (difference \pgfmathresult)}% \fi } \begin{document} \START \begin{tikzpicture} \node[polar element,element inner radius=1cm,element outer radius=2cm, element start angle=30,element delta angle=60] (E) at (0,0) {}; \tikzphysicsgetpoint{E}{inner-start} \pgfmathsetlength{\tikzphysicstestexpected}{1cm*cos(30)} \tikzphysicsassertdim{\tikzphysicstestx}{\tikzphysicstestexpected} {polar inner-start x} \pgfmathsetlength{\tikzphysicstestexpected}{1cm*sin(30)} \tikzphysicsassertdim{\tikzphysicstesty}{\tikzphysicstestexpected} {polar inner-start y} \tikzphysicsgetpoint{E}{outer-end} \tikzphysicsassertdim{\tikzphysicstestx}{0pt}{polar outer-end x at 90 degrees} \tikzphysicsassertdim{\tikzphysicstesty}{2cm}{polar outer-end radius} \tikzphysicsassertpoint{E}{inner-0}{E}{inner-start}{inner arc starts at named anchor} \tikzphysicsassertpoint{E}{inner-100}{E}{inner-end}{inner arc ends at named anchor} \tikzphysicsassertpoint{E}{outer-0}{E}{outer-start}{outer arc starts at named anchor} \tikzphysicsassertpoint{E}{outer-100}{E}{outer-end}{outer arc ends at named anchor} \tikzphysicsassertpoint{E}{start-0}{E}{inner-start}{start edge begins at inner radius} \tikzphysicsassertpoint{E}{start-100}{E}{outer-start}{start edge ends at outer radius} \tikzphysicsassertpoint{E}{end-0}{E}{inner-end}{end edge begins at inner radius} \tikzphysicsassertpoint{E}{end-100}{E}{outer-end}{end edge ends at outer radius} \tikzphysicsassertdim{\geometryvalue{E}{inner radius}}{1cm} {polar geometry inner radius} \tikzphysicsassertdim{\geometryvalue{E}{outer radius}}{2cm} {polar geometry outer radius} \tikzphysicsassertdim{\geometryvalue{E}{radial thickness}}{1cm} {polar geometry radial thickness} \tikzphysicsassertdim{\geometryvalue{E}{mean radius}}{1.5cm} {polar geometry mean radius} \tikzphysicsassertnumber{\geometryvalue{E}{start angle}}{30} {polar geometry start angle} \tikzphysicsassertnumber{\geometryvalue{E}{delta angle}}{60} {polar geometry delta angle} \tikzphysicsassertnumber{\geometryvalue{E}{end angle}}{90} {polar geometry end angle} \end{tikzpicture} \begin{tikzpicture} \node[differential sector,element outer radius=2cm, element start angle=10,element delta angle=40] (S) {}; \tikzphysicsassertpoint{S}{inner-start}{S}{center} {sector inner-start collapses to center} \tikzphysicsassertpoint{S}{inner-50}{S}{center} {sector inner family collapses to center} \tikzphysicsassertdim{\geometryvalue{S}{inner radius}}{0cm} {sector preset has zero inner radius} \node[differential ring,element inner radius=1.8cm, element radial thickness=2mm] (R) at (5,0) {}; \tikzphysicsassertpoint{R}{centroid}{R}{center} {full differential ring centroid equals center} \tikzphysicsassertdim{\geometryvalue{R}{outer radius}}{2cm} {radial thickness derives outer radius} \tikzphysicsassertnumber{\geometryvalue{R}{delta angle}}{360} {differential ring preset is a full sweep} \node[unwrapped ring,source element=R] (U) at (0,-4) {}; \tikzphysicsassertdim{\geometryvalue{U}{radial thickness}}{2mm} {unwrapped ring copies source thickness} \pgfmathsetlength{\tikzphysicstestexpected}{2*pi*1.8cm} \tikzphysicsassertdim{\geometryvalue{U}{circumference}} {\tikzphysicstestexpected}{unwrapped width uses inner reference circumference} \tikzphysicsgetpoint{U}{east} \pgfmathsetlength{\tikzphysicstestexpected}{pi*1.8cm} \tikzphysicsassertdim{\tikzphysicstestx}{\tikzphysicstestexpected} {unwrapped east anchor is half circumference} \tikzphysicsassertpoint{U}{bottom-0}{U}{south west} {unwrapped bottom family starts at south west} \tikzphysicsassertpoint{U}{top-100}{U}{north west} {unwrapped top family ends at north west} \end{tikzpicture} \setbox0=\hbox{\begin{tikzpicture} \node[physics polar element,physics element inner radius=1cm, physics element outer radius=2cm,physics element start angle=30, physics element delta angle=40] (Long) {}; \node[polar element,element inner radius=1cm,element outer radius=2cm, element start angle=30,element delta angle=40] (Short) {}; \tikzphysicsassertpoint{Long}{centroid}{Short}{centroid} {concise polar element matches collision-safe keys} \node[polar element] (DefaultAfter) {}; \tikzphysicsassertdim{\geometryvalue{DefaultAfter}{inner radius}}{1.8cm} {element radii do not leak to later nodes} \node[polar element,show dimensions] (Dimensions) at (4,0) {}; \pic (D) at (5,0) {differential ring diagram={ element inner radius=1.5cm,element radial thickness=2mm}}; \tikzphysicsassertdim{\geometryvalue{D-ring}{inner radius}}{1.5cm} {ring diagram exposes named ring node} \tikzphysicsassertdim{\geometryvalue{D-strip}{radial thickness}}{2mm} {ring diagram exposes named strip node} \tikzphysicsgetpoint{D-body-east}{center} \tikzphysicsassertdim{\tikzphysicstestx}{7cm} {ring diagram body radius surrounds the differential ring} \TYPE{PASS: dimension overlays and differential ring diagram compile} \end{tikzpicture}} \def\elementradiusseen{no}\def\elementradialseen{no} \def\elementangularseen{no}\def\elementarcseen{no} \def\elementcircumferenceseen{no}\def\elementwidthseen{no} \def\elementheightseen{no} \def\elementradiusprobe{\global\def\elementradiusseen{yes}} \def\elementradialprobe{\global\def\elementradialseen{yes}} \def\elementangularprobe{\global\def\elementangularseen{yes}} \def\elementarcprobe{\global\def\elementarcseen{yes}} \def\elementcircumferenceprobe{\global\def\elementcircumferenceseen{yes}} \def\elementwidthprobe{\global\def\elementwidthseen{yes}} \def\elementheightprobe{\global\def\elementheightseen{yes}} \setbox0=\hbox{\begin{tikzpicture} \node[polar element,show dimensions, element radius label={\elementradiusprobe}, element radial label={\elementradialprobe}, element angular label={\elementangularprobe}, element arc label={\elementarcprobe}] {}; \node[unwrapped ring,show dimensions, element circumference label={\elementcircumferenceprobe}, element radial label={\elementradialprobe}] at (5,0) {}; \node[rectangular element,show dimensions, element width label={\elementwidthprobe}, element height label={\elementheightprobe}] at (0,-4) {}; \end{tikzpicture}} \def\elementseenexpected{yes} \ifx\elementradiusseen\elementseenexpected\TYPE{PASS: polar radius label stays node-local}\else\TYPE{FAIL: polar radius label}\fi \ifx\elementradialseen\elementseenexpected\TYPE{PASS: radial labels stay node-local}\else\TYPE{FAIL: radial labels}\fi \ifx\elementangularseen\elementseenexpected\TYPE{PASS: polar angular label stays node-local}\else\TYPE{FAIL: polar angular label}\fi \ifx\elementarcseen\elementseenexpected\TYPE{PASS: polar arc label stays node-local}\else\TYPE{FAIL: polar arc label}\fi \ifx\elementcircumferenceseen\elementseenexpected\TYPE{PASS: strip circumference label stays node-local}\else\TYPE{FAIL: strip circumference label}\fi \ifx\elementwidthseen\elementseenexpected\TYPE{PASS: rectangle width label stays node-local}\else\TYPE{FAIL: rectangle width label}\fi \ifx\elementheightseen\elementseenexpected\TYPE{PASS: rectangle height label stays node-local}\else\TYPE{FAIL: rectangle height label}\fi \END \end{document}