The following WE
\documentclass[border=10pt]{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes, positioning, fit, backgrounds}
\tikzstyle{backA}=[rectangle,
fill=blue!30,
inner sep=0.2cm,
rounded corners=0mm]
\tikzstyle{backB}=[rectangle,
fill=purple!15,
inner sep=0.2cm,
rounded corners=0mm]
\tikzstyle{backC}=[rectangle,
fill=yellow!40,
inner sep=0.2cm,
rounded corners=0mm]
\tikzset{%
>={Latex[width=2mm,length=2mm]},
base/.style = {rectangle, rounded corners, draw=black,
minimum width=1cm, minimum height=1cm,
text centered,inner sep=0.3cm},
operation/.style = {base, fill=SkyBlue},
}
\begin{document}
\begin{tikzpicture}[node distance=0.8cm,
every node/.style={fill=white}, align=center]
\node (controller) [operation] {Microcontroller};
\node (regulator) [operation, below = of controller] {Regulator};
\node (transceiver) [operation, right = of controller, align = center] {CAN \\ Transceiver};
\node (sensor) [operation, above = of controller] {Sensor};
\node (flash) [operation, below = of transceiver, yshift=4mm] {Flash \\ Memeory};
\node (driver1) [operation, right = of sensor] {Driver 1};
\node (driver2) [operation, left = of sensor] {Driver 2};
\node (power) [operation, left = of regulator, align=center] {Input \\ Power};
\node (motor1) [operation, above = of sensor, align=center, xshift=1cm] {Motor 1};
\node (motor2) [operation, above = of sensor, align=center, xshift=-1cm] {Motor 2};
\node[circle,draw,fill=SkyBlue] (computer) [right = of driver1] {Computer};
\coordinate[left = of power] (d1) {};
\coordinate[above = of d1, yshift=5.5cm] (d2) {};
\draw[->] (controller) -- (transceiver);
\draw[<->] (controller) -- (sensor);
\draw[->] (driver1) -- (motor1);
\draw[->] (driver2) -- (motor2);
\draw[<->] (sensor) -- (motor2);
\draw[<->] (sensor) -- (motor1);
\draw[->] (controller) -- (driver1);
\draw[->] (controller) -- (driver2);
\draw[->] (controller) -- (flash);
\draw[->] (regulator) -- (controller);
\draw[->] (power) -- (regulator);
\draw[<->] (transceiver) -- (computer);
\draw[->] (power) -- (d1) |- (motor2);
\draw[->] (power) -- (d1) -- (d2) -| (motor1);
\begin{pgfonlayer}{background}
\node [backC,
fit=(driver1) (driver2) (sensor) (motor1) (motor2),
label=above:{}] {};
\node [backA,
fit=(computer) (transceiver),
label=above:{}] {};
\node [backB,
fit=(regulator) (power),
label=above:{}] {};
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
yields
Since the driver1 node should have been exclusively covered by the yellow background, I need to subtract the specific part of the violet background which interferes with the yellow one. In particular, an acceptable boundary for the violet background may roughly be like this:
How can I achieve something like that?





draw=white. – Mar 12 '19 at 14:52WE. Additionally, I'd like to know a potential approach to achieving margins with arbitrary shapes. – Mar 12 '19 at 14:54