GRASS Programmer's Manual 6.4.1(2011)
|
00001 00020 #include <grass/gis.h> 00021 #include <grass/glocale.h> 00022 #include <grass/Vect.h> 00023 00024 static long write_dummy() 00025 { 00026 G_warning("Vect_write_line() %s", 00027 _("for this format/level not supported")); 00028 return -1; 00029 } 00030 static int rewrite_dummy() 00031 { 00032 G_warning("Vect_rewrite_line() %s", 00033 _("for this format/level not supported")); 00034 return -1; 00035 } 00036 static int delete_dummy() 00037 { 00038 G_warning("Vect_delete_line() %s", 00039 _("for this format/level not supported")); 00040 return -1; 00041 } 00042 00043 static int restore_dummy() 00044 { 00045 G_warning("Vect_restore_line() %s", 00046 _("for this format/level not supported")); 00047 return -1; 00048 } 00049 00050 #ifndef HAVE_OGR 00051 static int format() 00052 { 00053 G_fatal_error(_("Requested format is not compiled in this version")); 00054 return 0; 00055 } 00056 00057 static long format_l() 00058 { 00059 G_fatal_error(_("Requested format is not compiled in this version")); 00060 return 0; 00061 } 00062 00063 #endif 00064 00065 static long (*Write_line_array[][3]) () = { 00066 { 00067 write_dummy, V1_write_line_nat, V2_write_line_nat} 00068 #ifdef HAVE_OGR 00069 , { 00070 write_dummy, write_dummy, write_dummy} 00071 #else 00072 , { 00073 write_dummy, format_l, format_l} 00074 #endif 00075 }; 00076 00077 static int (*Vect_rewrite_line_array[][3]) () = { 00078 { 00079 rewrite_dummy, rewrite_dummy, V2_rewrite_line_nat} 00080 #ifdef HAVE_OGR 00081 , { 00082 rewrite_dummy, rewrite_dummy, rewrite_dummy} 00083 #else 00084 , { 00085 rewrite_dummy, format, format} 00086 #endif 00087 }; 00088 00089 static int (*Vect_delete_line_array[][3]) () = { 00090 { 00091 delete_dummy, delete_dummy, V2_delete_line_nat} 00092 #ifdef HAVE_OGR 00093 , { 00094 delete_dummy, delete_dummy, delete_dummy} 00095 #else 00096 , { 00097 delete_dummy, format, format} 00098 #endif 00099 }; 00100 00101 static int (*Vect_restore_line_array[][3]) () = { 00102 { 00103 restore_dummy, restore_dummy, V2_restore_line_nat} 00104 #ifdef HAVE_OGR 00105 , { 00106 restore_dummy, restore_dummy, restore_dummy} 00107 #else 00108 , { 00109 restore_dummy, format, format} 00110 #endif 00111 }; 00112 00125 long 00126 Vect_write_line(struct Map_info *Map, 00127 int type, struct line_pnts *points, struct line_cats *cats) 00128 { 00129 long offset; 00130 00131 G_debug(3, "Vect_write_line(): name = %s, format = %d, level = %d", 00132 Map->name, Map->format, Map->level); 00133 00134 if (!VECT_OPEN(Map)) 00135 G_fatal_error(_("Unable to write feature, vector map is not opened")); 00136 00137 dig_line_reset_updated(&(Map->plus)); 00138 dig_node_reset_updated(&(Map->plus)); 00139 if (!(Map->plus.update_cidx)) { 00140 Map->plus.cidx_up_to_date = 0; 00141 } 00142 00143 offset = 00144 (*Write_line_array[Map->format][Map->level]) (Map, type, points, 00145 cats); 00146 00147 if (offset == -1) 00148 G_fatal_error(_("Unable to write feature (negative offset)")); 00149 00150 return offset; 00151 } 00152 00153 00171 int 00172 Vect_rewrite_line(struct Map_info *Map, 00173 int line, 00174 int type, struct line_pnts *points, struct line_cats *cats) 00175 { 00176 long ret; 00177 00178 G_debug(3, "Vect_rewrite_line(): name = %s, line = %d", Map->name, line); 00179 00180 if (!VECT_OPEN(Map)) 00181 G_fatal_error(_("Unable to rewrite feature, vector map is not opened")); 00182 00183 dig_line_reset_updated(&(Map->plus)); 00184 dig_node_reset_updated(&(Map->plus)); 00185 if (!(Map->plus.update_cidx)) { 00186 Map->plus.cidx_up_to_date = 0; 00187 } 00188 00189 ret = 00190 (*Vect_rewrite_line_array[Map->format][Map->level]) (Map, line, type, 00191 points, cats); 00192 00193 if (ret == -1) 00194 G_fatal_error(_("Unable to rewrite feature %d"), line); 00195 00196 return ret; 00197 } 00198 00212 int Vect_delete_line(struct Map_info *Map, int line) 00213 { 00214 int ret; 00215 00216 G_debug(3, "Vect_delete_line(): name = %s, line = %d", Map->name, line); 00217 00218 if (Map->level < 2) { 00219 G_fatal_error(_("Unable to delete feature %d, " 00220 "vector map <%s> is not opened on topology level"), 00221 line, Map->name); 00222 } 00223 00224 if (Map->mode != GV_MODE_RW && Map->mode != GV_MODE_WRITE) { 00225 G_fatal_error(_("Unable to delete feature %d, " 00226 "vector map <%s> is not opened in 'write' mode"), 00227 line, Map->name); 00228 } 00229 00230 dig_line_reset_updated(&(Map->plus)); 00231 dig_node_reset_updated(&(Map->plus)); 00232 if (!(Map->plus.update_cidx)) { 00233 Map->plus.cidx_up_to_date = 0; 00234 } 00235 00236 ret = (*Vect_delete_line_array[Map->format][Map->level]) (Map, line); 00237 00238 if (ret == -1) 00239 G_fatal_error(_("Unable to delete feature %d from vector map <%s>"), 00240 line, Map->name); 00241 00242 return ret; 00243 } 00244 00258 int Vect_restore_line(struct Map_info *Map, int line, long offset) 00259 { 00260 int ret; 00261 00262 G_debug(3, "Vect_restore_line(): name = %s, line = %d", Map->name, line); 00263 00264 if (Map->level < 2) { 00265 G_fatal_error(_("Unable to restore feature %d, " 00266 "vector map <%s> is not opened on topology level"), 00267 line, Map->name); 00268 } 00269 00270 if (Map->mode != GV_MODE_RW && Map->mode != GV_MODE_WRITE) { 00271 G_fatal_error(_("Unable to restore feature %d, " 00272 "vector map <%s> is not opened in 'write' mode"), 00273 line, Map->name); 00274 } 00275 00276 dig_line_reset_updated(&(Map->plus)); 00277 dig_node_reset_updated(&(Map->plus)); 00278 if (!(Map->plus.update_cidx)) { 00279 Map->plus.cidx_up_to_date = 0; 00280 } 00281 00282 ret = (*Vect_restore_line_array[Map->format][Map->level]) (Map, line, offset); 00283 00284 if (ret == -1) 00285 G_fatal_error(_("Unable to restore feature %d from vector map <%s>"), 00286 line, Map->name); 00287 00288 return ret; 00289 }