I am creating a WPF application that will display 2D vector graphics of a city-scale water management system. I have captured data from hundreds pages of schematic drawings of valves, pumps, treatment facilities, etc and the piping that interconnects them. Combine this with mapping information of individual residences and commercial properties and the data set has about 100,000 node instances along with the interconnecting pipe information. I have a proof-of-concept application that creates a DrawingVisual for each pipe segment or node (nodes are pretty simple; a rectangle, circle, etc), creates a DrawingContext, rendering the line segments for the pipe or the node's graphic representation. The DrawingVisuals are added to a canvas. Each visual is hit-testable (I need to be able to click on any of them to get more detailed information). The problem is that as the number of visuals passes a several thousand, performance (pan, zoom) degrade (really cool until then, though!). I have tried fiddling with anti-aliasing & bitmap caching, but it's not much help.
Is this kind of thing possible in WPF? Is there a better approach? I come from an MFC background and only started with WPF 6-8 months ago, though I have a fair amount of C# experience. From reading posts here, I see Direct3D is often mentioned, but it doent' really seem to fit the bill for flat, 2D, line-drawings, or am I wrong? The XNF tutorials I've seen only deal with sprites, and that hardly seems appropriate? I have read the posts related to business graphs; down-sampling data seems appropriate in those cases, but I am not sure I can do that, as every node & interconnecting pipe is relevant. Users require reasonably fast zooming & panning to any point in the schematic. I was thinking that OpenGL might be a good thing to explore, but I REALLY like all of the features of WPF (hit testing, great geometry classes, etc)
Any suggestions?
Thanks!