Rounded corners on only one side of a TikZ node
This is possible with the rounded rectangle
shape type:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.misc}
\begin{document}
\begin{tikzpicture}[every node/.style={fill=gray, rounded rectangle, minimum width=2cm, minimum height=1cm}]
\node [](A){};
\node [rounded rectangle west arc=none, below=of A](B){};
\node [rounded rectangle east arc=none, below=of B]{};
\end{tikzpicture}
\end{document}
See Section 48.8 of the TikZ Manual for further options.
Above method only allowing east or west non-rounding. I needed that and was not satisfied with the answer.
So we have to adopt method from other solution (Rounded corners in TikZ trees.) and make customized differently rounded corners.
I would be grateful if someone includes this in future TikZ.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\makeatletter
\pgfkeys{/pgf/.cd,
rectangle corner radius north west/.initial=10pt,
rectangle corner radius north east/.initial=10pt,
rectangle corner radius south west/.initial=10pt,
rectangle corner radius south east/.initial=10pt
}
\newif\ifpgf@rectanglewrc@donecorner@
\def\pgf@rectanglewithroundedcorners@docorner#1#2#3#4#5{%
\edef\pgf@marshal{%
\noexpand\pgfintersectionofpaths
{%
\noexpand\pgfpathmoveto{\noexpand\pgfpoint{\the\pgf@xa}{\the\pgf@ya}}%
\noexpand\pgfpathlineto{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
}%
{%
\noexpand\pgfpathmoveto{\noexpand\pgfpointadd
{\noexpand\pgfpoint{\the\pgf@xc}{\the\pgf@yc}}%
{\noexpand\pgfpoint{#1}{#2}}}%
\noexpand\pgfpatharc{#3}{#4}{#5}%
}%
}%
\pgf@process{\pgf@marshal\pgfpointintersectionsolution{1}}%
\pgf@process{\pgftransforminvert\pgfpointtransformed{}}%
\pgf@rectanglewrc@donecorner@true
}
\pgfdeclareshape{rectangle with rounded corners}
{
\inheritsavedanchors[from=rectangle] % this is nearly a rectangle
\inheritanchor[from=rectangle]{north}
\inheritanchor[from=rectangle]{north west}
\inheritanchor[from=rectangle]{north east}
\inheritanchor[from=rectangle]{center}
\inheritanchor[from=rectangle]{west}
\inheritanchor[from=rectangle]{east}
\inheritanchor[from=rectangle]{mid}
\inheritanchor[from=rectangle]{mid west}
\inheritanchor[from=rectangle]{mid east}
\inheritanchor[from=rectangle]{base}
\inheritanchor[from=rectangle]{base west}
\inheritanchor[from=rectangle]{base east}
\inheritanchor[from=rectangle]{south}
\inheritanchor[from=rectangle]{south west}
\inheritanchor[from=rectangle]{south east}
\savedmacro\cornerradiusnw{%
\edef\cornerradiusnw{\pgfkeysvalueof{/pgf/rectangle corner radius north west}}%
}
\savedmacro\cornerradiusne{%
\edef\cornerradiusne{\pgfkeysvalueof{/pgf/rectangle corner radius north east}}%
}
\savedmacro\cornerradiussw{%
\edef\cornerradiussw{\pgfkeysvalueof{/pgf/rectangle corner radius south west}}%
}
\savedmacro\cornerradiusse{%
\edef\cornerradiusse{\pgfkeysvalueof{/pgf/rectangle corner radius south east}}%
}
\backgroundpath{%
\northeast\advance\pgf@y-\cornerradiusne\relax
\pgfpathmoveto{}%
\pgfpatharc{0}{90}{\cornerradiusne}%
\northeast\pgf@ya=\pgf@y\southwest\advance\pgf@x\cornerradiusnw\relax\pgf@y=\pgf@ya
\pgfpathlineto{}%
\pgfpatharc{90}{180}{\cornerradiusnw}%
\southwest\advance\pgf@y\cornerradiussw\relax
\pgfpathlineto{}%
\pgfpatharc{180}{270}{\cornerradiussw}%
\northeast\pgf@xa=\pgf@x\advance\pgf@xa-\cornerradiusse\southwest\pgf@x=\pgf@xa
\pgfpathlineto{}%
\pgfpatharc{270}{360}{\cornerradiusse}%
\northeast\advance\pgf@y-\cornerradiusne\relax
\pgfpathlineto{}%
\pgfpathclose
}
\anchor{before north east}{\northeast\advance\pgf@y-\cornerradiusne}
\anchor{after north east}{\northeast\advance\pgf@x-\cornerradiusne}
\anchor{before north west}{\southwest\pgf@xa=\pgf@x\advance\pgf@xa\cornerradiusnw
\northeast\pgf@x=\pgf@xa}
\anchor{after north west}{\northeast\pgf@ya=\pgf@y\advance\pgf@ya-\cornerradiusnw
\southwest\pgf@y=\pgf@ya}
\anchor{before south west}{\southwest\advance\pgf@y\cornerradiussw}
\anchor{after south west}{\southwest\advance\pgf@x\cornerradiussw}
\anchor{before south east}{\northeast\pgf@xa=\pgf@x\advance\pgf@xa-\cornerradiusse
\southwest\pgf@x=\pgf@xa}
\anchor{after south east}{\southwest\pgf@ya=\pgf@y\advance\pgf@ya\cornerradiusse
\northeast\pgf@y=\pgf@ya}
\anchorborder{%
\pgf@xb=\pgf@x% xb/yb is target
\pgf@yb=\pgf@y%
\southwest%
\pgf@xa=\pgf@x% xa/ya is se
\pgf@ya=\pgf@y%
\northeast%
\advance\pgf@x by-\pgf@xa%
\advance\pgf@y by-\pgf@ya%
\pgf@xc=.5\pgf@x% x/y is half width/height
\pgf@yc=.5\pgf@y%
\advance\pgf@xa by\pgf@xc% xa/ya becomes center
\advance\pgf@ya by\pgf@yc%
\edef\pgf@marshal{%
\noexpand\pgfpointborderrectangle
{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}
{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
}%
\pgf@process{\pgf@marshal}%
\advance\pgf@x by\pgf@xa%
\advance\pgf@y by\pgf@ya%
\pgfextract@process\borderpoint{}%
%
\pgf@rectanglewrc@donecorner@false
%
% do southwest corner
\southwest\pgf@xc=\pgf@x\pgf@yc=\pgf@y
\advance\pgf@xc\cornerradiussw\relax\advance\pgf@yc\cornerradiussw\relax
\borderpoint
\ifdim\pgf@x<\pgf@xc\relax\ifdim\pgf@y<\pgf@yc\relax
\pgf@rectanglewithroundedcorners@docorner{-\cornerradiussw}{0pt}{180}{270}{\cornerradiussw}%
\fi\fi
%
% do southeast corner
\ifpgf@rectanglewrc@donecorner@\else
\southwest\pgf@yc=\pgf@y\relax\northeast\pgf@xc=\pgf@x\relax
\advance\pgf@xc-\cornerradiusse\relax\advance\pgf@yc\cornerradiusse\relax
\borderpoint
\ifdim\pgf@x>\pgf@xc\relax\ifdim\pgf@y<\pgf@yc\relax
\pgf@rectanglewithroundedcorners@docorner{0pt}{-\cornerradiusse}{270}{360}{\cornerradiusse}%
\fi\fi
\fi
%
% do northeast corner
\ifpgf@rectanglewrc@donecorner@\else
\northeast\pgf@xc=\pgf@x\relax\pgf@yc=\pgf@y\relax
\advance\pgf@xc-\cornerradiusne\relax\advance\pgf@yc-\cornerradiusne\relax
\borderpoint
\ifdim\pgf@x>\pgf@xc\relax\ifdim\pgf@y>\pgf@yc\relax
\pgf@rectanglewithroundedcorners@docorner{\cornerradiusne}{0pt}{0}{90}{\cornerradiusne}%
\fi\fi
\fi
%
% do northwest corner
\ifpgf@rectanglewrc@donecorner@\else
\northeast\pgf@yc=\pgf@y\relax\southwest\pgf@xc=\pgf@x\relax
\advance\pgf@xc\cornerradiusnw\relax\advance\pgf@yc-\cornerradiusnw\relax
\borderpoint
\ifdim\pgf@x<\pgf@xc\relax\ifdim\pgf@y>\pgf@yc\relax
\pgf@rectanglewithroundedcorners@docorner{0pt}{\cornerradiusnw}{90}{180}{\cornerradiusnw}%
\fi\fi
\fi
}
}
\makeatother
\begin{tikzpicture}
\draw node(rc)[
rectangle with rounded corners,draw=yellow, fill=yellow!10,align=center,rectangle corner radius north west=0pt]
{\large rectangle with rounded corners\\\large rectangle with rounded corners\\\large rectangle with rounded corners};%
\end{tikzpicture}
\end{document}