瀏覽代碼

wxGUI: trac https://trac.osgeo.org/grass/ticket/276 --- vdigit: please render closed areas transparent
(merge from devbr6, https://trac.osgeo.org/grass/changeset/33281)


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@33282 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 16 年之前
父節點
當前提交
68905e0191

+ 2 - 1
gui/wxpython/gui_modules/goutput.py

@@ -312,7 +312,8 @@ class GMConsole(wx.Panel):
                 # for all non-display commands.
                 # for all non-display commands.
                 if compReg:
                 if compReg:
                     tmpreg = os.getenv("GRASS_REGION")
                     tmpreg = os.getenv("GRASS_REGION")
-                    del os.environ["GRASS_REGION"]
+                    if os.environ.has_key("GRASS_REGION"):
+                        del os.environ["GRASS_REGION"]
                     
                     
                 if len(cmdlist) == 1:
                 if len(cmdlist) == 1:
                     import menuform
                     import menuform

+ 10 - 8
gui/wxpython/gui_modules/mapdisp.py

@@ -476,10 +476,8 @@ class BufferedWindow(MapWindow, wx.Window):
         Debug.msg(4, "BufferedWindow.OnPaint(): redrawAll=%s" % self.redrawAll)
         Debug.msg(4, "BufferedWindow.OnPaint(): redrawAll=%s" % self.redrawAll)
 
 
         dc = wx.BufferedPaintDC(self, self.buffer)
         dc = wx.BufferedPaintDC(self, self.buffer)
-
-        # we need to clear the dc BEFORE calling PrepareDC
-        #bg = wx.Brush(self.GetBackgroundColour())
-        dc.SetBackground(wx.Brush("White"))
+        
+        ### dc.SetBackground(wx.Brush("White"))
         dc.Clear()
         dc.Clear()
 
 
         # use PrepareDC to set position correctly
         # use PrepareDC to set position correctly
@@ -496,7 +494,9 @@ class BufferedWindow(MapWindow, wx.Window):
 
 
             # draw vector map layer
             # draw vector map layer
             if self.pdcVector:
             if self.pdcVector:
-                self.pdcVector.DrawToDCClipped(dc, rgn)
+                # decorate with GDDC (transparency)
+                gcdc = wx.GCDC(dc)
+                self.pdcVector.DrawToDCClipped(gcdc, rgn)
 
 
             self.bufferLast = None
             self.bufferLast = None
         else: # do not redraw pdc and pdcVector
         else: # do not redraw pdc and pdcVector
@@ -505,8 +505,10 @@ class BufferedWindow(MapWindow, wx.Window):
                 self.pdc.DrawToDC(dc)
                 self.pdc.DrawToDC(dc)
 
 
                 if self.pdcVector:
                 if self.pdcVector:
-                    self.pdcVector.DrawToDC(dc)
-
+                    # decorate with GDDC (transparency)
+                    gcdc = wx.GCDC(dc)
+                    self.pdcVector.DrawToDC(gcdc)
+                    
                 # store buffered image
                 # store buffered image
                 # self.bufferLast = wx.BitmapFromImage(self.buffer.ConvertToImage())
                 # self.bufferLast = wx.BitmapFromImage(self.buffer.ConvertToImage())
                 self.bufferLast = dc.GetAsBitmap(wx.Rect(0, 0, self.Map.width, self.Map.height))
                 self.bufferLast = dc.GetAsBitmap(wx.Rect(0, 0, self.Map.width, self.Map.height))
@@ -518,7 +520,7 @@ class BufferedWindow(MapWindow, wx.Window):
         # draw temporary object on the foreground
         # draw temporary object on the foreground
         # self.pdcTmp.DrawToDCClipped(dc, rgn)
         # self.pdcTmp.DrawToDCClipped(dc, rgn)
         self.pdcTmp.DrawToDC(dc)
         self.pdcTmp.DrawToDC(dc)
-
+        
     def OnSize(self, event):
     def OnSize(self, event):
         """
         """
         Scale map image so that it is
         Scale map image so that it is

+ 1 - 3
gui/wxpython/gui_modules/preferences.py

@@ -680,13 +680,11 @@ class Settings:
                     except ValueError:
                     except ValueError:
                         pass
                         pass
         else: # -> write settings
         else: # -> write settings
-            if type(value) == type(wx.Colour(0, 0, 0, 0)):
-                print value, type(value)
             if type(value) == type(()): # -> color
             if type(value) == type(()): # -> color
                 value = str(value[0]) + ':' +\
                 value = str(value[0]) + ':' +\
                     str(value[1]) + ':' + \
                     str(value[1]) + ':' + \
                     str(value[2])
                     str(value[2])
-
+                
         return value
         return value
 
 
     def Get(self, group, key=None, subkey=None, internal=False):
     def Get(self, group, key=None, subkey=None, internal=False):

+ 6 - 0
gui/wxpython/gui_modules/toolbars.py

@@ -1050,8 +1050,14 @@ class VDigitToolbar(AbstractToolbar):
         self.parent.MapWindow.pdcVector = wx.PseudoDC()
         self.parent.MapWindow.pdcVector = wx.PseudoDC()
         self.parent.digit.driver.SetDevice(self.parent.MapWindow.pdcVector)
         self.parent.digit.driver.SetDevice(self.parent.MapWindow.pdcVector)
         # self.parent.MapWindow.UpdateMap()
         # self.parent.MapWindow.UpdateMap()
+
         if not self.parent.MapWindow.resize:
         if not self.parent.MapWindow.resize:
             self.parent.MapWindow.UpdateMap(render=True)
             self.parent.MapWindow.UpdateMap(render=True)
+
+        opacity = mapLayer.GetOpacity(float=True)
+        if opacity < 1.0:
+            alpha = int(opacity * 255)
+            self.parent.digit.driver.UpdateSettings(alpha)
         
         
         return True
         return True
 
 

+ 5 - 5
gui/wxpython/gui_modules/vdigit.py

@@ -1531,7 +1531,7 @@ class CDisplayDriver(AbstractDisplayDriver):
         """Show/hide selected features"""
         """Show/hide selected features"""
         self.__display.DrawSelected(draw)
         self.__display.DrawSelected(draw)
         
         
-    def UpdateSettings(self):
+    def UpdateSettings(self, alpha=255):
         """Update display driver settings"""
         """Update display driver settings"""
         # TODO map units
         # TODO map units
 
 
@@ -1559,9 +1559,8 @@ class CDisplayDriver(AbstractDisplayDriver):
                                      UserSettings.Get(group='vdigit', key='symbol',
                                      UserSettings.Get(group='vdigit', key='symbol',
                                                       subkey=[symbol, 'color'])[1],
                                                       subkey=[symbol, 'color'])[1],
                                      UserSettings.Get(group='vdigit', key='symbol',
                                      UserSettings.Get(group='vdigit', key='symbol',
-                                                      subkey=[symbol, 'color'])[2],
-                                     255).GetRGB()
-        
+                                                      subkey=[symbol, 'color'])[2]).GetRGB()
+
         self.__display.UpdateSettings (color['highlight'],
         self.__display.UpdateSettings (color['highlight'],
                                        UserSettings.Get(group='vdigit', key='checkForDupl',
                                        UserSettings.Get(group='vdigit', key='checkForDupl',
                                                         subkey='enabled'),
                                                         subkey='enabled'),
@@ -1606,7 +1605,8 @@ class CDisplayDriver(AbstractDisplayDriver):
                                                         subkey=['direction', 'enabled']),
                                                         subkey=['direction', 'enabled']),
                                        color['direction'],
                                        color['direction'],
                                        UserSettings.Get(group='vdigit', key='lineWidth',
                                        UserSettings.Get(group='vdigit', key='lineWidth',
-                                                        subkey='value'))
+                                                        subkey='value'),
+                                       alpha)
 
 
 class VDigitSettingsDialog(wx.Dialog):
 class VDigitSettingsDialog(wx.Dialog):
     """
     """

+ 7 - 1
gui/wxpython/gui_modules/wxgui_utils.py

@@ -484,7 +484,7 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         dlg.CentreOnParent()
         dlg.CentreOnParent()
 
 
         if dlg.ShowModal() == wx.ID_OK:
         if dlg.ShowModal() == wx.ID_OK:
-            new_opacity = dlg.GetOpacity() # string            
+            new_opacity = dlg.GetOpacity() # string
             self.Map.ChangeOpacity(maplayer, new_opacity)
             self.Map.ChangeOpacity(maplayer, new_opacity)
             maplayer.SetOpacity(new_opacity)
             maplayer.SetOpacity(new_opacity)
             opacity_pct = int(new_opacity * 100)
             opacity_pct = int(new_opacity * 100)
@@ -493,6 +493,12 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             self.SetItemText(self.layer_selected,
             self.SetItemText(self.layer_selected,
                              layerbase + ' (opacity: ' + str(opacity_pct) + '%)')
                              layerbase + ' (opacity: ' + str(opacity_pct) + '%)')
             
             
+            # vector layer currently edited
+            if self.mapdisplay.toolbars['vdigit'] and \
+                    self.mapdisplay.toolbars['vdigit'].GetLayer() == maplayer:   
+                alpha = int(new_opacity * 255)
+                self.mapdisplay.digit.driver.UpdateSettings(alpha)
+                
             # redraw map if auto-rendering is enabled
             # redraw map if auto-rendering is enabled
             self.rerender = True
             self.rerender = True
             self.reorder = True
             self.reorder = True

+ 2 - 2
gui/wxpython/vdigit/driver.cpp

@@ -293,7 +293,7 @@ void DisplayDriver::UpdateSettings(unsigned long highlight,
 				   bool eVertex,      unsigned long cVertex,
 				   bool eVertex,      unsigned long cVertex,
 				   bool eArea,        unsigned long cArea,
 				   bool eArea,        unsigned long cArea,
 				   bool eDirection,   unsigned long cDirection,
 				   bool eDirection,   unsigned long cDirection,
-				   int lineWidth)
+				   int lineWidth, int alpha)
 {
 {
     settings.highlight.Set(highlight);
     settings.highlight.Set(highlight);
 
 
@@ -334,7 +334,7 @@ void DisplayDriver::UpdateSettings(unsigned long highlight,
     settings.area.color.Set(settings.area.color.Red(),
     settings.area.color.Set(settings.area.color.Red(),
 			    settings.area.color.Green(),
 			    settings.area.color.Green(),
 			    settings.area.color.Blue(),
 			    settings.area.color.Blue(),
-			    100); /* transparency */
+			    alpha);
     
     
     settings.direction.enabled = eDirection;
     settings.direction.enabled = eDirection;
     settings.direction.color.Set(cDirection);
     settings.direction.color.Set(cDirection);

+ 1 - 1
gui/wxpython/vdigit/driver.h

@@ -210,7 +210,7 @@ public:
 			bool, unsigned long,
 			bool, unsigned long,
 			bool, unsigned long,
 			bool, unsigned long,
 			bool, unsigned long,
 			bool, unsigned long,
-			int);
+			int, int);
 };
 };
 
 
 int print_error(const char *, int);
 int print_error(const char *, int);