On Sat, Dec 13, 2014 at 10:40:44PM +0700, Martin Dobias wrote: > The Qt framework uses pos() and boundingRect() to understand where the > items are located in the scene (QGraphicsScene). These are all screen > coordinates - one can tell from the use of QPointF instead of QgsPoint > (always used for map / layer coordinates). > > The rect() and setRect() is just our added convenience functionality in > QgsMapCanvasItem. The idea was that you just use setRect() to specify the > item's position+size in map coordinates - and the pos() and boundingRect() > will be set according to that. In addition, calls to updatePosition() from > map canvas make sure that pos() and boundingRect() are kept in sync with > changes to the canvas.
The problem with that, as you can see, is that it is assumed that a single rectangle can fully express a map configuration, but that's only true when there's no rotation. This lack of information makes it impossible for updatePosition to keep a rotated map position/size in sync with canvas changes. > Some canvas items use that functionality (e.g. QgsRubberBand or > QgsMapCanvasMap) and don't worry about the screen coordinates. For some > items this default behavior is not useful, so they do not use setRect() and > provide their own implementation of updatePosition() and boundingRect(). > For example QgsVertexMarker, which is centered on a map coordinate, but its > bounding box is independent from map coordinates / scale. Maybe the object passed via setRect (via QgsMapCanvasMap::setContent) could possibly be syntetized as a rectangle having the map coordinate corresponding to device position (0,0) as its upper-left corner and width and height being the output device width and height scaled by the current map resolution. But we'd still be in the "workaround" side. --strk; () ASCII ribbon campaign -- Keep it simple ! /\ http://strk.keybit.net/rants/ascii_mails.txt _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
