This is possible. Try this:
ptg1 := shp.GetPointOnLine( shp.Length /2, -10 ) ;
Ptg2 := shp.GetPointOnLine( shp.Length /2, +10 ) ;
You will have two points: -10 and + 10 off the existing line. Use these points to construct the perpendicular bisector line.