ソースを参照

wxGUI/vdigit: highlight areas instead of centroids if area fill is enabled
cosmetics in dbm module
(merge from devbr6, https://trac.osgeo.org/grass/changeset/32976)


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

Martin Landa 16 年 前
コミット
4bc6c7ef18

+ 3 - 3
gui/wxpython/gui_modules/dbm.py

@@ -921,8 +921,8 @@ class AttributeManager(wx.Frame):
         menu.Append(self.popupDataID5, _("Select all"))
         menu.Append(self.popupDataID6, _("Deselect all"))
         menu.AppendSeparator()
-        menu.Append(self.popupDataID7, _("Display selected"))
-        menu.Append(self.popupDataID8, _("Display selected and zoom"))
+        menu.Append(self.popupDataID7, _("Highlight selected"))
+        menu.Append(self.popupDataID8, _("Highlight selected and zoom"))
         if not self.map or len(list.GetSelectedItems()) == 0:
             menu.Enable(self.popupDataID7, False)
             menu.Enable(self.popupDataID8, False)
@@ -2598,7 +2598,7 @@ class LayerBook(wx.Notebook):
                                    'table=%s' % table,
                                    'key=%s' % key,
                                    'layer=%d' % layer])
-
+        
         if connectCmd.returncode == 0:
             # update dialog (only for new layer)
             self.parentDialog.UpdateDialog(layer=layer) 

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

@@ -148,7 +148,7 @@ private:
     void PrintIds();
 
     /* select feature */
-    bool IsSelected(int);
+    bool IsSelected(int, bool force=false);
     bool IsDuplicated(int);
 
     std::vector<int> ListToVector(struct ilist *);

+ 10 - 2
gui/wxpython/vdigit/driver_draw.cpp

@@ -62,9 +62,10 @@ int DisplayDriver::DrawMap(bool force)
 	struct ilist *listAreas, *listCentroids;
 	struct line_pnts *points, *ipoints, **isles;
 
-	wxBrush *fillArea, *fillIsle;
+	wxBrush *fillArea, *fillAreaSelected, *fillIsle;
 
 	fillArea = new wxBrush(settings.area.color);
+	fillAreaSelected = new wxBrush(settings.highlight);
 	fillIsle = new wxBrush(*wxWHITE_BRUSH);
 	
 	listAreas = Vect_new_list();
@@ -123,7 +124,14 @@ int DisplayDriver::DrawMap(bool force)
 		}
 		
 		if (draw) {
-		    dc->SetBrush(*fillArea);
+		    int cat;
+		    cat = Vect_get_area_cat(mapInfo, area, 1); /* TODO: field */
+		    if (cat > -1 && IsSelected(cat, true)) {
+			dc->SetBrush(*fillAreaSelected);
+		    }
+		    else {
+			dc->SetBrush(*fillArea);
+		    }
 		    dc->SetPen(*wxTRANSPARENT_PEN);
 		    DrawArea(points);
 

+ 18 - 7
gui/wxpython/vdigit/driver_select.cpp

@@ -156,15 +156,15 @@ std::vector<double> DisplayDriver::SelectLineByPoint(double x, double y, double
    \return true if vector object is selected
    \return false if vector object is not selected
 */
-bool DisplayDriver::IsSelected(int line)
+bool DisplayDriver::IsSelected(int line, bool force)
 {
-    if (selected.isId) {
+    if (selected.isId || force) {
 	if (Vect_val_in_list(selected.values, line))
 	    return true;
     }
     else {
 	for (int i = 0; i < cats->n_cats; i++) {
-	    if (cats->field[i] == 1 &&
+	    if (cats->field[i] == 1 && /* TODO: field */
 		Vect_val_in_list(selected.values, cats->cat[i])) 
 		return true;
 	}
@@ -415,6 +415,8 @@ std::vector<int> DisplayDriver::GetSelectedVertex(double x, double y, double thr
 */
 std::vector<int> DisplayDriver::GetRegionSelected()
 {
+    int line, area;
+    
     std::vector<int> region;
 
     BOUND_BOX region_box, line_box;
@@ -454,11 +456,20 @@ std::vector<int> DisplayDriver::GetRegionSelected()
     else {
 	list = selected.values;
     }
-    
+
     for (int i = 0; i < list->n_values; i++) {
-	if (!Vect_get_line_box(mapInfo, list->value[i], &line_box))
-	    continue;
+	line = list->value[i];
+	area = Vect_get_centroid_area(mapInfo, line);
 
+	if (area > 0) {
+	    if (!Vect_get_area_box(mapInfo, area, &line_box))
+		continue;
+	}
+	else {
+	    if (!Vect_get_line_box(mapInfo, line, &line_box))
+		continue;
+	}
+	
 	if (i == 0) {
 	    Vect_box_copy(&region_box, &line_box);
 	}
@@ -466,7 +477,7 @@ std::vector<int> DisplayDriver::GetRegionSelected()
 	    Vect_box_extend(&region_box, &line_box);
 	}
     }
-
+    
     if (list && list != selected.values) {
 	Vect_destroy_list(list);
     }