I'm seeing a lot of duplicate definitions between Plot2dData and Plot3dData.  It might be worth making a abstract parent class "PlotData" and then deriving these two from it.  All the stuff about the object / field / handle to the curve etc should be common between the two.