[GRASS-SVN] r67517 - in grass/branches/releasebranch_7_0: gui/wxpython/vdigit include/defs lib/python/pygrass/vector lib/vector/Vlib
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Jan 7 09:42:30 PST 2016
Author: martinl
Date: 2016-01-07 09:42:29 -0800 (Thu, 07 Jan 2016)
New Revision: 67517
Modified:
grass/branches/releasebranch_7_0/gui/wxpython/vdigit/wxdigit.py
grass/branches/releasebranch_7_0/include/defs/vector.h
grass/branches/releasebranch_7_0/lib/python/pygrass/vector/__init__.py
grass/branches/releasebranch_7_0/lib/vector/Vlib/write.c
grass/branches/releasebranch_7_0/lib/vector/Vlib/write_nat.c
Log:
digitizer crashes, leaves vector broken (#2814)
fix restore logic broken by r64214
(merge r67508 from trunk)
Modified: grass/branches/releasebranch_7_0/gui/wxpython/vdigit/wxdigit.py
===================================================================
--- grass/branches/releasebranch_7_0/gui/wxpython/vdigit/wxdigit.py 2016-01-07 16:25:21 UTC (rev 67516)
+++ grass/branches/releasebranch_7_0/gui/wxpython/vdigit/wxdigit.py 2016-01-07 17:42:29 UTC (rev 67517)
@@ -419,6 +419,7 @@
action = actions[i]
line = action['line']
if action['offset'] > 0:
+ # feature previously added -> to be deleted
if Vect_line_alive(self.poMapInfo, line):
Debug.msg(3, "IVDigit._applyChangeset(): changeset=%d, action=add, line=%d -> deleted",
changeset, line)
@@ -428,14 +429,15 @@
else:
Debug.msg(3, "Digit.ApplyChangeset(): changeset=%d, action=add, line=%d dead",
changeset, line)
- else: # delete
+ else:
+ # feature previously deleted -> to be added
offset = abs(action['offset'])
if not Vect_line_alive(self.poMapInfo, line):
Debug.msg(3, "Digit.ApplyChangeset(): changeset=%d, action=delete, line=%d -> added",
changeset, line)
- if Vect_restore_line(self.poMapInfo, line, offset) < 0:
+ if Vect_restore_line(self.poMapInfo, offset, line) < 0:
return -1
ret = 1
else:
Modified: grass/branches/releasebranch_7_0/include/defs/vector.h
===================================================================
--- grass/branches/releasebranch_7_0/include/defs/vector.h 2016-01-07 16:25:21 UTC (rev 67516)
+++ grass/branches/releasebranch_7_0/include/defs/vector.h 2016-01-07 17:42:29 UTC (rev 67517)
@@ -256,7 +256,7 @@
off_t Vect_rewrite_line(struct Map_info *, off_t, int, const struct line_pnts *,
const struct line_cats *);
int Vect_delete_line(struct Map_info *, off_t);
-int Vect_restore_line(struct Map_info *, off_t);
+int Vect_restore_line(struct Map_info *, off_t, off_t);
int Vect_get_num_dblinks(const struct Map_info *);
@@ -549,8 +549,8 @@
int V2_delete_line_nat(struct Map_info *, off_t);
int V2_delete_line_sfa(struct Map_info *, off_t);
int V2_delete_line_pg(struct Map_info *, off_t);
-int V1_restore_line_nat(struct Map_info *, off_t);
-int V2_restore_line_nat(struct Map_info *, off_t);
+int V1_restore_line_nat(struct Map_info *, off_t, off_t);
+int V2_restore_line_nat(struct Map_info *, off_t, off_t);
off_t V1_write_line_nat(struct Map_info *, int, const struct line_pnts *,
const struct line_cats *);
off_t V1_write_line_ogr(struct Map_info *, int, const struct line_pnts *,
Modified: grass/branches/releasebranch_7_0/lib/python/pygrass/vector/__init__.py
===================================================================
--- grass/branches/releasebranch_7_0/lib/python/pygrass/vector/__init__.py 2016-01-07 16:25:21 UTC (rev 67516)
+++ grass/branches/releasebranch_7_0/lib/python/pygrass/vector/__init__.py 2016-01-07 17:42:29 UTC (rev 67517)
@@ -543,8 +543,8 @@
@must_be_open
def restore(self, geo_obj):
if hasattr(geo_obj, 'offset'):
- if libvect.Vect_restore_line(self.c_mapinfo, geo_obj.id,
- geo_obj.offset) == -1:
+ if libvect.Vect_restore_line(self.c_mapinfo, geo_obj.offset,
+ geo_obj.id) == -1:
raise GrassError("C funtion: Vect_restore_line.")
else:
raise ValueError("The value have not an offset attribute.")
Modified: grass/branches/releasebranch_7_0/lib/vector/Vlib/write.c
===================================================================
--- grass/branches/releasebranch_7_0/lib/vector/Vlib/write.c 2016-01-07 16:25:21 UTC (rev 67516)
+++ grass/branches/releasebranch_7_0/lib/vector/Vlib/write.c 2016-01-07 17:42:29 UTC (rev 67517)
@@ -277,27 +277,27 @@
A warning is printed on error.
\param Map pointer to Map_info structure
- \param line feature id to be restored
- \param offset feature offset
+ \param offset feature offset to be restored
+ \param line feature id to be restored (used only on level 2)
\return 0 on success
\return -1 on error
*/
-int Vect_restore_line(struct Map_info *Map, off_t line)
+int Vect_restore_line(struct Map_info *Map, off_t offset, off_t line)
{
int ret;
- G_debug(3, "Vect_restore_line(): name = %s,level = %d, line/offset = %"PRI_OFF_T,
- Map->name, Map->level, line);
+ G_debug(3, "Vect_restore_line(): name = %s, level = %d, offset = %"PRI_OFF_T", line = %"PRI_OFF_T,
+ Map->name, Map->level, offset, line);
if (!check_map(Map))
return -1;
- ret = (*Vect_restore_line_array[Map->format][Map->level]) (Map, line);
+ ret = (*Vect_restore_line_array[Map->format][Map->level]) (Map, offset, line);
if (ret == -1)
- G_warning(_("Unable to restore feature/offset %lu in vector map <%s>"),
- line, Vect_get_name(Map));
+ G_warning(_("Unable to restore feature/offset %"PRI_OFF_T" in vector map <%s>"),
+ offset, Vect_get_name(Map));
return ret;
}
Modified: grass/branches/releasebranch_7_0/lib/vector/Vlib/write_nat.c
===================================================================
--- grass/branches/releasebranch_7_0/lib/vector/Vlib/write_nat.c 2016-01-07 16:25:21 UTC (rev 67516)
+++ grass/branches/releasebranch_7_0/lib/vector/Vlib/write_nat.c 2016-01-07 17:42:29 UTC (rev 67517)
@@ -332,16 +332,17 @@
\param Map pointer to Map_info structure
\param offset feature offset
-
+ \param line feature id (not used)
+
\return 0 on success
\return -1 on error
*/
-int V1_restore_line_nat(struct Map_info *Map, off_t offset)
+int V1_restore_line_nat(struct Map_info *Map, off_t offset, off_t line)
{
char rhead;
struct gvfile *dig_fp;
- G_debug(3, "V1_restore_line_nat(), offset = %"PRI_OFF_T, offset);
+ G_debug(3, "V1_restore_line_nat(): offset = %"PRI_OFF_T", line (not used) = %"PRI_OFF_T, offset, line);
dig_set_cur_port(&(Map->head.port));
dig_fp = &(Map->dig_fp);
@@ -375,15 +376,15 @@
Note: requires topology level >= GV_BUILD_BASE.
\param Map pointer to Map_info structure
- \param line feature id
+ \param offset feature offset to be restored
+ \param line feature id to be restored
\return 0 on success
\return -1 on error
*/
-int V2_restore_line_nat(struct Map_info *Map, off_t line)
+int V2_restore_line_nat(struct Map_info *Map, off_t offset, off_t line)
{
int type;
- off_t offset;
struct Plus_head *plus;
struct P_line *Line;
static struct line_cats *Cats = NULL;
@@ -391,14 +392,14 @@
plus = &(Map->plus);
- G_debug(3, "V2_restore_line_nat(), line = %d", (int)line);
+ G_debug(3, "V2_restore_line_nat(): offset = %"PRI_OFF_T", line = %"PRI_OFF_T, offset, line);
if (line < 1 || line > plus->n_lines) {
- G_warning(_("Attempt to access feature with invalid id (%d)"), (int)line);
+ G_warning(_("Attempt to access feature with invalid id (%"PRI_OFF_T")"), line);
return -1;
}
- Line = Map->plus.Line[line];
+ Line = Map->plus.Line[line]; /* we expect Line to be NULL, so offset is needed */
if (Line != NULL) {
G_warning(_("Attempt to access alive feature %d"), (int)line);
return -1;
@@ -408,10 +409,8 @@
plus->cidx_up_to_date = 0;
}
- offset = Line->offset;
-
/* restore feature in 'coor' file */
- if (0 != V1_restore_line_nat(Map, offset))
+ if (0 != V1_restore_line_nat(Map, offset, line))
return -1;
/* read feature geometry */
@@ -859,9 +858,10 @@
Note that 1) and 2) is done by the same code.
\param Map pointer to Map_info structure
- \param line feature id to be added
+ \param offset feature offset to be added
\param points pointer to line_pnts structure (feature's geometry)
\param cats pointer to line_cats structure (feature's categories)
+ \param restore_line feature id to be restored (>0) or added (<=0)
\param external_routine pointer to external routine (used by PostGIS Topology)
\return feature id to be added
More information about the grass-commit
mailing list