\pgfkeys{ /column/dimension/width/.code = {#1}, /column/dimension/width/.initial = {1 cm}, /column/dimension/height/.code = {#1}, /column/dimension/height/.initial = {1 cm}, /column/dimension/radius/.code = {#1}, /column/dimension/radius/.initial = {0.2 cm}, /column/.is choice, /column/basic/.code = {#1}, /column/basic/.default = {}, /column/tray/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfsetdash{{2 mm}{2 mm}}{0 mm} \pgfpathmoveto{\east} \east \pgfpathlineto{\pgfpoint{-\pgf@x}{\pgf@y}} \pgfusepath{stroke} \pgfsetdash{}{0pt} } }}, /column/fluidized/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \northeast \pgf@xa = \pgf@x \pgf@ya = \pgf@y \foreach \j in {-0.7, -0.5, -0.3, ..., 0.71}{ \pgfpointscale{\j}{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgf@yb = \pgf@y \foreach \k in {-0.75, -0.5, ...,0.75} { \pgfpointscale{\k}{\pgfpoint{\pgf@xa}{0}} \pgfpathcircle{\pgfpoint{\pgf@x}{\pgf@yb}}{0.5 pt} } } \foreach \j in {-0.6, -0.4, ..., 0.61}{ \pgfpointscale{\j}{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgf@yb = \pgf@y \foreach \k in {-0.875, -0.625, ..., 0.875} { \pgfpointscale{\k}{\pgfpoint{\pgf@xa}{0}} \pgfpathcircle{\pgfpoint{\pgf@x}{\pgf@yb}}{0.5 pt} } } \pgfusepath{fill} } }}, /column/fixed/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \northeast \pgf@xa = \pgf@x \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}} \pgfpathmoveto{\pgfpoint{-\pgf@xa}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}} \pgfusepath{stroke} } }}, /column/staggered baffle/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpointscale{0.7}{\east} \pgf@xa = \pgf@x \foreach \j in {-0.5, 0.5}{ \pgfsetdash{{0.1 cm}{0.1 cm}}{0 cm} \pgfpointscale{\j}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \east \pgfpathmoveto{\pgfpoint{\pgf@x}{\pgf@yb}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfpointscale{\j + 0.2}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@y}} } \east \pgfpathmoveto{\pgfpoint{-\pgf@x}{0}} \pgfpathlineto{\pgfpoint{\pgf@xa}{0}} \pgfpathlineto{\pgfpoint{\pgf@xa}{0}} \pgfpointscale{0.2}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@y}} \pgfusepath{stroke} \pgfsetdash{}{0pt} } }}, /column/bubble caps/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpointscale{0.2}{\east} \pgf@xa = \pgf@x \pgfpointscale{0.4}{\east} \pgf@xb = \pgf@x \foreach \j in {-0.6, -0.2, 0.2, 0.6}{ \pgfpointscale{\j}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \east \pgfpathmoveto{\pgfpoint{\pgf@x}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \east \pgfpathmoveto{\pgfpoint{-\pgf@x}{\pgf@yb}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfpointscale{\j + 0.1}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xb}{\pgf@yb}} \pgfpatharc{45}{135}{1.41 \pgf@xb and 0.3 \pgf@ya} \pgfusepath{stroke} } } }}, /column/valve/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpointscale{0.2}{\east} \pgf@xa = \pgf@x \foreach \j in {-0.5, 0, 0.5}{ \pgfpointscale{\j}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \east \pgfpathmoveto{\pgfpoint{\pgf@x}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \east \pgfpathmoveto{\pgfpoint{-\pgf@x}{\pgf@yb}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfpointscale{\j + 0.1}{\pgfpoint{0}{\pgf@ya}} \pgf@yb = \pgf@y \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfusepath{stroke} } } }}, /column/double fixed/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpointscale{0.25}{\northeast} \pgf@yb = \pgf@y \pgfpointscale{0.15}{\northeast} \pgf@yc = \pgf@y \east \pgf@xa = \pgf@x \pgfsetdash{{0.2 cm}{0.2 cm}}{0 cm} \pgfpathmoveto{\pgfpoint{-\pgf@xa}{\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} \pgfpathmoveto{\pgfpoint{-\pgf@xa}{-\pgf@yb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@yb}} \pgfusepath{stroke} \pgfsetdash{}{0 pt} \east \pgf@xa = \pgf@x \foreach \j in {-1, 1}{ \pgfpathmoveto{\pgfpoint{-\pgf@xa}{\j \pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\j \pgf@yb}} \pgfpathmoveto{\pgfpoint{\pgf@xa}{\j \pgf@ya}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{\j \pgf@yb}} } \pgfusepath{stroke} } }}, /column/spray/.code = { \pgfkeys{/column/basic/.append code = { \pgfusepath{stroke} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpointscale{0.25}{\northeast} \pgf@yb = \pgf@y \pgfpointscale{0.15}{\northeast} \pgf@yc = \pgf@y \east \pgf@xa = \pgf@x \pgfpathmoveto{\pgfpoint{-\pgf@xa}{0}} \pgfpathlineto{\centerpoint} \pgfpathmoveto{\centerpoint} \pgfpathlineto{\pgfpoint{-\pgf@yc}{-\pgf@yc}} \pgfpathmoveto{\centerpoint} \pgfpathlineto{\pgfpoint{0}{-\pgf@yc}} \pgfpathmoveto{\centerpoint} \pgfpathlineto{\pgfpoint{\pgf@yc}{-\pgf@yc}} \pgfusepath{stroke} } }}, /column/.default = {\pgfkeys{/column/basic}} } \pgfdeclareshape{column}{ \savedanchor{\centerpoint}{\pgfpointorigin} \savedanchor{\east}{ \pgfpointscale{0.5}{\pgfpoint{\pgfkeysvalueof{/column/dimension/width}}{0}} } \savedanchor{\northeast}{ \pgfpointscale{0.5}{\pgfpoint{\pgfkeysvalueof{/column/dimension/width}}{\pgfkeysvalueof{/column/dimension/height}}} } \anchor{center}{ \centerpoint } \anchor{north}{ \northeast \pgfpoint{0}{1.4\pgf@y} } \anchor{east}{ \east } \anchor{west}{ \east \pgf@x = -\pgf@x } \anchor{south}{ \northeast \pgfpoint{0}{-1.4\pgf@y} } \anchor{northeast}{ \northeast } \anchor{near northeast}{ \northeast \pgfpoint{\pgf@x}{0.6\pgf@y} } \anchor{southeast}{ \northeast \pgfpoint{\pgf@x}{-\pgf@y} } \anchor{near southeast}{ \northeast \pgfpoint{\pgf@x}{-0.6\pgf@y} } \anchor{northwest}{ \northeast \pgfpoint{-\pgf@x}{\pgf@y} } \anchor{near northwest}{ \northeast \pgfpoint{-\pgf@x}{0.6\pgf@y} } \anchor{southwest}{ \northeast \pgfpoint{-\pgf@x}{-\pgf@y} } \anchor{near southwest}{ \northeast \pgfpoint{-\pgf@x}{-0.6\pgf@y} } \backgroundpath{ \northeast \pgf@xa = \pgf@x \pgf@ya = \pgf@y \east \pgf@xb = \pgf@x \pgfpathmoveto{\northeast} \pgfpatharc{0}{180}{\pgf@xb and \pgfkeysvalueof{/column/dimension/radius}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}} \pgfpatharc{180}{360}{\pgf@xb and \pgfkeysvalueof{/column/dimension/radius}} \pgfpathclose \pgfusepath{stroke} \pgfsetdash{{0.2 cm}{0.2 cm}}{0 cm} \pgfpointscale{0.8}{\northeast} \pgf@ya = \pgf@y \pgfpathmoveto{\pgfpoint{-\pgf@xb}{\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} \pgfpathmoveto{\pgfpoint{-\pgf@xb}{-\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xb}{-\pgf@ya}} \pgfusepath{stroke} \pgfsetdash{}{0pt} \pgfkeys{/column/basic} \pgfusepath{stroke} } }