If all the straight segments composing a pipe run are at exactly the same slope, an exact parallel vertical offset solution is possible with all joints meeting. However, if the slope varies between segments, the ends of the offsets will not meet if the exact distance is maintained, so the joints need to be adjusted somehow so the ends meet - meaning that the offset distance needs to be “compromised”.
@Rhino_Bulgaria 's solution is interesting, but with kinked curves (such as a zigzag pipe run with corners) the intersection curve, while possibly continuous, will have some deviation near the corners as well. That’s just the geometry of the situation. In a real-world situation, the pipe elbows handle this situation nicely. So one could determine a corner radius, remove the corners to that radius and then create a blend there. Might even be scriptable.
In case it’s useful, below is a rather simpler approach which vertically offsets lines and planar curves keeping the parallel offset distance. If you have polylines that are not planar, you will need to explode them first; the solution will then have segments where the corners do not meet - you will need to fix/adjust those manually. FWIW.
OffsetVertical.py (2.1 KB)