Start with a digital output that can be tristated (set to high impedance). Use a resistor divider to pull the output to the middle of the rails when tristated. You now have a node that can be set to 0V, your logic voltage (call it VD), or halfway between 0V and VD.
Now you just need an op amp circuit to offset and amplify that range to V+, V-, and 0V.
If VD = V+, then this is very simple: use a non-inverting amplifier with a gain of 2 (both resistors are equal), use the above tri-level output as the input, and connect the reference node of the amplifier (usually ground) to V+. So an input of 0V gives V-, V+/2 gives 0V, and V+ gives V+. The whole thing can be done with one op amp and four identical resistors.
If VD != V+ you'll need to adjust the gain and reference voltage to get the right behavior.