Procházet zdrojové kódy

wxGUI/animation: fix rendering when zooming in animation tool

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@59561 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová před 11 roky
rodič
revize
3f4d5f61d6

+ 6 - 3
gui/wxpython/animation/controller.py

@@ -327,7 +327,8 @@ class AnimationController(wx.EvtHandler):
                     self.animations[i].SetActive(False)
                     self.animations[i].SetActive(False)
                     continue
                     continue
                 anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
                 anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
-                regions = anim.GetRegions()
+                w, h = self.mapwindows[i].GetClientSize()
+                regions = anim.GetRegions(w, h)
                 self.animations[i].SetFrames([HashCmds(cmdList, region)
                 self.animations[i].SetFrames([HashCmds(cmdList, region)
                                               for cmdList, region in zip(anim.cmdMatrix, regions)])
                                               for cmdList, region in zip(anim.cmdMatrix, regions)])
                 self.animations[i].SetActive(True)
                 self.animations[i].SetActive(True)
@@ -337,7 +338,8 @@ class AnimationController(wx.EvtHandler):
                     self.animations[i].SetActive(False)
                     self.animations[i].SetActive(False)
                     continue
                     continue
                 anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
                 anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
-                regions = anim.GetRegions()
+                w, h = self.mapwindows[i].GetClientSize()
+                regions = anim.GetRegions(w, h)
                 identifiers = sampleCmdMatrixAndCreateNames(anim.cmdMatrix,
                 identifiers = sampleCmdMatrixAndCreateNames(anim.cmdMatrix,
                                                             mapNamesDict[anim.firstStdsNameType[0]],
                                                             mapNamesDict[anim.firstStdsNameType[0]],
                                                             regions)
                                                             regions)
@@ -371,7 +373,8 @@ class AnimationController(wx.EvtHandler):
 
 
     def _set2DData(self, animationData):
     def _set2DData(self, animationData):
         opacities = [layer.opacity for layer in animationData.layerList if layer.active]
         opacities = [layer.opacity for layer in animationData.layerList if layer.active]
-        regions = animationData.GetRegions()
+        w, h = self.mapwindows[animationData.GetWindowIndex()].GetClientSize()
+        regions = animationData.GetRegions(w, h)
         self.bitmapProvider.SetCmds(animationData.cmdMatrix, opacities, regions)
         self.bitmapProvider.SetCmds(animationData.cmdMatrix, opacities, regions)
 
 
     def _load3DData(self, animationData):
     def _load3DData(self, animationData):

+ 10 - 3
gui/wxpython/animation/data.py

@@ -210,12 +210,12 @@ class AnimationData(object):
 
 
     zoomRegionValue = property(fset=SetZoomRegionValue, fget=GetZoomRegionValue)
     zoomRegionValue = property(fset=SetZoomRegionValue, fget=GetZoomRegionValue)
 
 
-    def GetRegions(self):
-        self._computeRegions(self._mapCount, self._startRegion,
+    def GetRegions(self, width, height):
+        self._computeRegions(width, height, self._mapCount, self._startRegion,
                              self._endRegion, self._zoomRegionValue)
                              self._endRegion, self._zoomRegionValue)
         return self._regions
         return self._regions
 
 
-    def _computeRegions(self, count, startRegion, endRegion=None, zoomValue=None):
+    def _computeRegions(self, width, height, count, startRegion, endRegion=None, zoomValue=None):
         """Computes regions based on start region and end region or zoom value
         """Computes regions based on start region and end region or zoom value
         for each of the animation frames."""
         for each of the animation frames."""
         currRegion = dict(gcore.region())  # cast to dict, otherwise deepcopy error
         currRegion = dict(gcore.region())  # cast to dict, otherwise deepcopy error
@@ -255,6 +255,13 @@ class AnimationData(object):
                 if regions[i]['n'] < regions[i]['s'] or \
                 if regions[i]['n'] < regions[i]['s'] or \
                    regions[i]['e'] < regions[i]['w']:
                    regions[i]['e'] < regions[i]['w']:
                         regions[i] = regions[i - 1]
                         regions[i] = regions[i - 1]
+
+        for region in regions:
+            mapwidth = abs(region['e'] - region['w'])
+            mapheight = abs(region['n'] - region['s'])
+            region['nsres'] = mapheight / height
+            region['ewres'] = mapwidth / width
+
         self._regions = regions
         self._regions = regions
 
 
     def __repr__(self):
     def __repr__(self):