I know what Visitor Pattern is and how to use it; this question is not a duplicate of this one.
I\'ve got a library where I put most of the reusable code I write,
So there's a class xxxShape, which in some way contains information that "drives" the rendering. For Circles that might be centre, radius, for Squares some corner coordinates or some such. Maybe some other stuff about fillings and colours.
You dont't want to/cannot update those classes to add the actual rendering logic, and I think your reasons for not doing so are valid/inevitable.
But presumably, you have enough public access methods on the classes to allow you to get at the "driving" information, otherwise you are doomed.
So in which case why can you not just wrap these items:
CircleRenderer hasA Cicle, knows how to render Circles
and so on. Now use the Visitor pattern across the Renderer classes.