> On Aug 10, 2019, at 12:19 AM, Nyall Dawson <nyall.daw...@gmail.com> wrote: > > On Sat, 10 Aug 2019 at 05:29, Israel Brewster <ijbrews...@alaska.edu > <mailto:ijbrews...@alaska.edu>> wrote: >> >> So using QGIS to convert my .shp files to .svg, and then loading the result >> in a QGraphicsSVGItem works like a charm - thanks! The only drawback I’m >> seeing is zooming performance. It *looks* good, but is a tad sluggish. When >> using QGIS, I noticed that it was compiled against Qt as well, but when they >> zoom, the actual image redraw is delayed until the zoom is complete. That >> is, when zooming in, things get pixelated until you pause, whereupon they >> are re-drawn correctly. The end result is that things look worse when >> zooming, but zoom performance is lag-free. Is this behavior easily >> obtainable, such as through a setting on the QGraphicsSVGItem or perhaps the >> QGraphicsView, or is QGIS doing something completely different, such that I >> would have to do a lot of re-implementation to accomplish said effect? > > What QGIS is actually doing here is rendering the vector to a QImage > in a background thread, and then when this rendering is complete the > QImage is cached and used painted inside an item in the scene. Zooming > triggers an update of the cached QImage from the vector content in the > background, so you see the pixelated version temporarily until the new > image is ready. This means the main GUI thread/scene is always > responsive and isn't impacted by complex vector content. > Unfortunately, it's not anything which can be achieved easily through > the existing Qt API -- you'll need to setup the background thread and > cached image updates yourself. > > The relevant code parts get a little tricky, because they rely on > QGIS' map renderer, but look around: > https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvas.cpp#L518 > <https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvas.cpp#L518> > https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvas.cpp#L595 > <https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvas.cpp#L595> > https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvasmap.cpp#L33 > <https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvasmap.cpp#L33> > https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvasmap.cpp#L61 > <https://github.com/qgis/QGIS/blob/master/src/gui/qgsmapcanvasmap.cpp#L61> > >> When zooming out, areas that were outside the window remain empty until you >> pause, at which point they are drawn. > > In recent versions we do things a little different, and: > 1. render the visible portion of the vector to the cached image and > show on the item as quickly as possible > 2. trigger a separate background job when this is done, to render > portions of the vector just outside the visible extent > > Again, this keeps the main view update as fast as possible, while > giving nicer results when zooming out (less chance of missing image > portions which were originally out of view). > > Hope this helps! > > Nyall
Gotcha. That makes sense. I suspect this approach will be more work than it’s worth for my application - the performance is sluggish, but useable - but I’ll take a look. Thanks for the pointers! --- Israel Brewster Software Engineer Alaska Volcano Observatory Geophysical Institute - UAF 2156 Koyukuk Drive Fairbanks AK 99775-7320 Work: 907-474-5172 cell: 907-328-9145 > > >> >> --- >> Israel Brewster >> Software Engineer >> Alaska Volcano Observatory >> Geophysical Institute - UAF >> 2156 Koyukuk Drive >> Fairbanks AK 99775-7320 >> Work: 907-474-5172 >> cell: 907-328-9145 >> >> On Aug 8, 2019, at 8:19 AM, Francis Herne <m...@flherne.uk> wrote: >> >> You should definitely look at QGIS: >> https://qgis.org/en/site/index.html >> >> It's open-source and has an excellent map-rendering implementation including >> shapefile support. >> >> -Francis H >> >> ________________________________ >> From: Israel Brewster <ijbrews...@alaska.edu> >> Sent: 8 August 2019 16:55:49 BST >> To: Brad Pepers <bpep...@me.com> >> Cc: Interest <interest@qt-project.org> >> Subject: Re: [Interest] Zooming with QGraphicsView/QGraphicsItem >> >> I do have .shp files for the coastlines - perhaps I could convert those to >> something I could use? If I can get vector data, how would I go about >> utilizing it? >> >> I played around a bit with loading different image files, but so far the >> performance has been unacceptable - the entire app locks up for several >> seconds when displaying the higher resolution images. I think Vector would >> be a better way to go, if I can figure out how. Thanks! >> --- >> Israel Brewster >> Software Engineer >> Alaska Volcano Observatory >> Geophysical Institute - UAF >> 2156 Koyukuk Drive >> Fairbanks AK 99775-7320 >> Work: 907-474-5172 >> cell: 907-328-9145 >> >> On Aug 7, 2019, at 10:12 PM, Brad Pepers <bpep...@me.com> wrote: >> >> In the end the answer is to get the coast as vector data instead of a >> raster. The raster is going to be at a fixed map scale and any scale above >> or below is going to extrapolate or interpolate the results eventually >> ending in poor results because there just isn’t the information needed or >> too much information is being lost. Having different resolutions should help >> and you can keep multiple levels and switch between them at appropriate >> times (LOD). Those are your best bets if you can’t get the actual vector >> data! >> >> -- >> Brad >> >> >> On Aug 7, 2019, at 12:01 PM, Israel Brewster <ijbrews...@alaska.edu> wrote: >> >> I have a QGraphicsScene/QGraphicsView that I am using to display a map (and >> some data). The map is in the mercator projection, with the x and y >> coordinates of the scene corresponding to map coordinates, so the background >> images are rather large. Images are loaded into a QGraphicsObject which is >> then added to the scene. The object types are defined by a third-party >> library, so I don’t have the option of using different objects, such as >> QGraphicsPixmapObject or something. >> >> This works fine when I’m zoomed in to the map. Coastlines are nice and >> sharp, with no issues: >> <Screen Shot 2019-08-07 at 9.50.10 AM.png> >> >> However, when I zoom out, the coastline becomes quite pixelated, and >> difficult to see in places: >> <Screen Shot 2019-08-07 at 9.50.28 AM.png> >> >> How can I fix this? My first thought was to change the size of the >> background image so it could scale better, but that didn’t seem to help. In >> retrospect, this makes sense: at the end of the day, the background image >> has to be the correct size for the mercator projection, so while I can >> certainly change the pixel density, the overall size, and thus how much >> scaling is needed to display a given area, is fixed. >> >> --- >> Israel Brewster >> Software Engineer >> Alaska Volcano Observatory >> Geophysical Institute - UAF >> 2156 Koyukuk Drive >> Fairbanks AK 99775-7320 >> Work: 907-474-5172 >> cell: 907-328-9145 >> >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org >> https://lists.qt-project.org/listinfo/interest >> >> >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org >> https://lists.qt-project.org/listinfo/interest >> >> >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org <mailto:Interest@qt-project.org> >> https://lists.qt-project.org/listinfo/interest >> <https://lists.qt-project.org/listinfo/interest>
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest