Surface Edge

See also some alternative modeling methods in this thread: