本文整理汇总了C++中Vect_close函数的典型用法代码示例。如果您正苦于以下问题:C++ Vect_close函数的具体用法?C++ Vect_close怎么用?C++ Vect_close使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Vect_close函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: close_vect
/*
* close_vect - builds vector support and frees up resources
*/
int close_vect(struct Map_info *map, const int build_support)
{
if (build_support)
Vect_build(map);
Vect_set_release_support(map);
Vect_close(map);
return 1;
}
示例2: lister
int lister(char *name, char *mapset, char *title)
{
struct Map_info Map;
*title = 0;
if (*name) {
if (Vect_open_old_head(&Map, name, mapset) < 0)
G_fatal_error(_("Unable to open vector map <%s>"), name);
strcpy(title, Vect_get_map_name(&Map));
Vect_close(&Map);
}
return 0;
}
示例3: Vect_close
OGRGRASSDataSource::~OGRGRASSDataSource()
{
for( int i = 0; i < nLayers; i++ )
delete papoLayers[i];
if ( pszName ) CPLFree( pszName );
if ( papoLayers ) CPLFree( papoLayers );
if ( pszGisdbase ) G_free( pszGisdbase );
if ( pszLocation ) G_free( pszLocation );
if ( pszMapset ) G_free( pszMapset );
if ( pszMap ) G_free( pszMap );
if (bOpened)
Vect_close(&map);
}
示例4: tr
void QgsGrassPlugin::newVector()
{
// QgsDebugMsg("entered.");
if ( QgsGrassEdit::isRunning() )
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "GRASS Edit is already running." ) );
return;
}
bool ok;
QString name;
QgsGrassElementDialog dialog( qGisInterface->mainWindow() );
name = dialog.getItem( "vector", tr( "New vector name" ),
tr( "New vector name" ), "", "", &ok );
if ( !ok )
return;
// Create new map
QgsGrass::setMapset( QgsGrass::getDefaultGisdbase(),
QgsGrass::getDefaultLocation(),
QgsGrass::getDefaultMapset() );
struct Map_info *Map = 0;
G_TRY
{
Map = QgsGrass::vectNewMapStruct();
Vect_open_new( Map, name.toUtf8().data(), 0 );
#if defined(GRASS_VERSION_MAJOR) && defined(GRASS_VERSION_MINOR) && \
( ( GRASS_VERSION_MAJOR == 6 && GRASS_VERSION_MINOR >= 4 ) || GRASS_VERSION_MAJOR > 6 )
Vect_build( Map );
#else
Vect_build( Map, stderr );
#endif
Vect_set_release_support( Map );
Vect_close( Map );
QgsGrass::vectDestroyMapStruct( Map );
}
G_CATCH( QgsGrass::Exception &e )
{
QgsGrass::warning( tr( "Cannot create new vector: %1" ).arg( e.what() ) );
QgsGrass::vectDestroyMapStruct( Map );
return;
}
示例5: G_sites_close
void G_sites_close(struct Map_info *Map)
{
int i, j;
if (Map->mode == GV_MODE_WRITE || Map->mode == GV_MODE_RW)
Vect_build(Map);
Vect_close(Map);
for (i = 0; i < Map->n_site_att; i++) {
free(Map->site_att[i].dbl);
for (j = 0; j < Map->n_site_str; j++)
free(Map->site_att[i].str[j]);
free(Map->site_att[i].str);
}
free(Map->site_att);
G_free(Map);
}
示例6: QgsDebugMsg
bool QgsGrassVectorMap::openMap()
{
// TODO: refresh layers (reopen)
QgsDebugMsg( toString() );
QgsGrass::lock();
QgsGrass::setLocation( mGrassObject.gisdbase(), mGrassObject.location() );
// Find the vector
const char *ms = G_find_vector2( mGrassObject.name().toUtf8().data(), mGrassObject.mapset().toUtf8().data() );
if ( !ms )
{
QgsDebugMsg( "Cannot find GRASS vector" );
QgsGrass::unlock();
return false;
}
// Read the time of vector dir before Vect_open_old, because it may take long time (when the vector
// could be owerwritten)
QFileInfo di( mGrassObject.mapsetPath() + "/vector/" + mGrassObject.name() );
mLastModified = di.lastModified();
di.setFile( mGrassObject.mapsetPath() + "/vector/" + mGrassObject.name() + "/dbln" );
mLastAttributesModified = di.lastModified();
mMap = QgsGrass::vectNewMapStruct();
// Do we have topology and cidx (level2)
int level = -1;
G_TRY
{
Vect_set_open_level( 2 );
level = Vect_open_old_head( mMap, mGrassObject.name().toUtf8().data(), mGrassObject.mapset().toUtf8().data() );
Vect_close( mMap );
}
G_CATCH( QgsGrass::Exception &e )
{
QgsGrass::warning( e );
level = -1;
}
示例7: do_vpoints
int do_vpoints(int after_masking)
{
int n;
struct Map_info Map;
n = vector.count;
while (n-- > 0) {
if (vector.layer[n].type != VPOINTS)
continue;
if (after_masking && vector.layer[n].masked)
continue;
if (!after_masking && !vector.layer[n].masked)
continue;
G_message(_("Reading vector points file <%s in %s> ..."),
vector.layer[n].name, vector.layer[n].mapset);
Vect_set_open_level(2);
Vect_set_fatal_error(GV_FATAL_PRINT);
if (2 >
Vect_open_old(&Map, vector.layer[n].name,
vector.layer[n].mapset)) {
char name[100];
sprintf(name, "%s in %s", vector.layer[n].name,
vector.layer[n].mapset);
error("vector map", name, "can't open");
continue;
}
PS_vpoints_plot(&Map, n, LINE_DRAW_LINE);
Vect_close(&Map);
fprintf(PS.fp, "[] 0 setdash\n");
}
return 0;
}
示例8: main
//.........这里部分代码省略.........
error_opt->required = NO;
error_opt->description =
_("Cummulative error tolerance for eigenvector centrality");
geo_f = G_define_flag();
geo_f->key = 'g';
geo_f->description =
_("Use geodesic calculation for longitude-latitude locations");
add_f = G_define_flag();
add_f->key = 'a';
add_f->description = _("Add points on nodes");
/* options and flags parser */
if (G_parser(argc, argv))
exit(EXIT_FAILURE);
/* TODO: make an option for this */
mask_type = GV_LINE | GV_BOUNDARY;
Points = Vect_new_line_struct();
Cats = Vect_new_cats_struct();
Vect_check_input_output_name(map_in->answer, map_out->answer,
GV_FATAL_EXIT);
Vect_set_open_level(2);
if (1 > Vect_open_old(&In, map_in->answer, ""))
G_fatal_error(_("Unable to open vector map <%s>"), map_in->answer);
with_z = Vect_is_3d(&In);
if (0 > Vect_open_new(&Out, map_out->answer, with_z)) {
Vect_close(&In);
G_fatal_error(_("Unable to create vector map <%s>"), map_out->answer);
}
if (geo_f->answer) {
geo = 1;
if (G_projection() != PROJECTION_LL)
G_warning(_("The current projection is not longitude-latitude"));
}
else
geo = 0;
/* parse filter option and select appropriate lines */
layer = atoi(field_opt->answer);
chcat =
(NetA_initialise_varray
(&In, layer, mask_type, where_opt->answer, cat_opt->answer,
&varray) == 1);
/* Create table */
Fi = Vect_default_field_info(&Out, 1, NULL, GV_1TABLE);
Vect_map_add_dblink(&Out, 1, NULL, Fi->table, "cat", Fi->database,
Fi->driver);
db_init_string(&sql);
driver = db_start_driver_open_database(Fi->driver, Fi->database);
if (driver == NULL)
G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
Fi->database, Fi->driver);
db_init_string(&tmp);
if (deg_opt->answer)
append_string(&tmp, deg_opt->answer);
示例9: calc_unit_loc
//.........这里部分代码省略.........
R_open_driver();
R_standard_color(D_translate_color("red"));
if (radius)
draw_circle((int)((double)(ux[i]) / x),
(int)((double)(uy[i]) / y),
(int)((double)(ux[i] + u_w) / x),
(int)((double)(uy[i] + u_l) / y), 3);
else
draw_box((int)((double)(ux[i]) / x),
(int)((double)(uy[i]) / y),
(int)((double)(ux[i] + u_w) / x),
(int)((double)(uy[i] + u_l) / y), 1);
R_close_driver();
fprintf(stderr, " Distributed unit %4d of %4d requested\r",
i + 1, num);
}
}
/* for syst. contig. & syst. noncontig. */
else if (method == 2 || method == 3) {
for (i = 0; i < num; i++) {
*(ux + i) =
left + startx + u_w * (i - nx * floor((double)i / nx));
*(uy + i) = top + starty + u_l * floor((double)i / nx);
}
}
/* for centered over sites */
else if (method == 5) {
sites_mapset =
G_ask_vector_old(" Enter name of vector points map",
sites_file_name);
if (sites_mapset == NULL) {
G_system("d.frame -e");
exit(0);
}
if (Vect_open_old(&Map, sites_file_name, sites_mapset) < 0)
G_fatal_error(_("Unable to open vector map <%s>"), sites_file_name);
/* fprintf(stderr, "\n Can't open vector points file %s\n", sites_file_name); */
*sites = 0;
i = 0;
n = 0;
Points = Vect_new_line_struct(); /* init line_pnts struct */
Cats = Vect_new_cats_struct();
while (1) {
ltype = Vect_read_next_line(&Map, Points, Cats);
if (ltype == -1)
G_fatal_error(_("Cannot read vector"));
if (ltype == -2)
break; /* EOF */
/* point features only. (GV_POINTS is pts AND centroids, GV_POINT is just pts) */
if (!(ltype & GV_POINT))
continue;
ulcol = ((int)(D_u_to_a_col(Points->x[0]))) + 1 - u_w / 2;
ulrow = ((int)(D_u_to_a_row(Points->y[0]))) + 1 - u_l / 2;
if (ulcol <= left || ulrow <= top || ulcol + u_w - 1 > right ||
ulrow + u_l - 1 > bot) {
fprintf(stderr,
" No sampling unit over site %d at east=%8.1f north=%8.1f\n",
n + 1, Points->x[0], Points->y[0]);
fprintf(stderr,
" as it would extend outside the map\n");
}
else {
*(ux + i) = ulcol - 1;
*(uy + i) = ulrow - 1;
i++;
}
n++;
if (n > 250)
G_fatal_error
("There are more than the maximum of 250 sites\n");
}
fprintf(stderr, " Total sites with sampling units = %d\n", i);
*sites = i;
cmd = G_malloc(100);
sprintf(cmd, "d.vect %s color=black", sites_file_name);
G_system(cmd);
G_free(cmd);
Vect_close(&Map);
G_free(Points);
G_free(Cats);
}
return 1;
}
示例10: read_vpoints
int read_vpoints(char *name, char *mapset)
{
char fullname[100];
char buf[1024];
char *key, *data;
double width, size, scale, rotate;
int itmp, vec;
int r, g, b;
int ret;
struct Map_info Map;
vector_alloc(); /* allocate space */
sprintf(fullname, "%s in %s", name, mapset);
Vect_set_open_level(2);
Vect_set_fatal_error(GV_FATAL_PRINT);
if (2 > Vect_open_old(&Map, name, mapset)) {
error(fullname, "", "can't open vector map");
gobble_input();
return 0;
}
Vect_close(&Map);
vec = vector.count;
vector.layer[vec].type = VPOINTS;
vector.layer[vec].name = G_store(name);
vector.layer[vec].mapset = G_store(mapset);
vector.layer[vec].ltype = GV_POINT;
vector.layer[vec].masked = 0;
vector.layer[vec].field = 1;
vector.layer[vec].cats = NULL;
vector.layer[vec].where = NULL;
vector.layer[vec].width = 1.;
set_color(&(vector.layer[vec].color), 0, 0, 0);
set_color(&(vector.layer[vec].fcolor), 255, 0, 0);
vector.layer[vec].rgbcol = NULL;
vector.layer[vec].label = NULL;
vector.layer[vec].lpos = -1;
vector.layer[vec].symbol = G_store("basic/diamond");
vector.layer[vec].size = 6.0;
vector.layer[vec].sizecol = NULL;
vector.layer[vec].scale = 1.0;
vector.layer[vec].rotate = 0.0;
vector.layer[vec].rotcol = NULL;
vector.layer[vec].epstype = 0;
while (input(2, buf, help)) {
if (!key_data(buf, &key, &data))
continue;
if (KEY("masked")) {
vector.layer[vec].masked = yesno(key, data);
if (vector.layer[vec].masked)
PS.mask_needed = 1;
continue;
}
if (KEY("type")) {
G_strip(data);
vector.layer[vec].ltype = 0;
if (strstr(data, "point"))
vector.layer[vec].ltype |= GV_POINT;
if (strstr(data, "centroid"))
vector.layer[vec].ltype |= GV_CENTROID;
continue;
}
if (KEY("layer")) {
G_strip(data);
vector.layer[vec].field = atoi(data);
continue;
}
if (KEY("cats")) {
G_strip(data);
vector.layer[vec].cats = G_store(data);
continue;
}
if (KEY("where")) {
G_strip(data);
vector.layer[vec].where = G_store(data);
continue;
}
if (KEY("width")) {
width = -1.;
*mapset = 0;
if (sscanf(data, "%lf%s", &width, mapset) < 1 || width < 0.) {
//.........这里部分代码省略.........
示例11: tr
void QgsGrassPlugin::newVector()
{
// QgsDebugMsg("entered.");
if ( QgsGrassEdit::isRunning() )
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "GRASS Edit is already running." ) );
return;
}
bool ok;
QString name;
QgsGrassElementDialog dialog( qGisInterface->mainWindow() );
name = dialog.getItem( "vector", tr( "New vector name" ),
tr( "New vector name" ), "", "", &ok );
if ( !ok )
return;
// Create new map
QgsGrass::setMapset( QgsGrass::getDefaultGisdbase(),
QgsGrass::getDefaultLocation(),
QgsGrass::getDefaultMapset() );
try
{
struct Map_info Map;
Vect_open_new( &Map, name.toUtf8().data(), 0 );
#if defined(GRASS_VERSION_MAJOR) && defined(GRASS_VERSION_MINOR) && \
( ( GRASS_VERSION_MAJOR == 6 && GRASS_VERSION_MINOR >= 4 ) || GRASS_VERSION_MAJOR > 6 )
Vect_build( &Map );
#else
Vect_build( &Map, stderr );
#endif
Vect_set_release_support( &Map );
Vect_close( &Map );
}
catch ( QgsGrass::Exception &e )
{
QMessageBox::warning( 0, tr( "Warning" ),
tr( "Cannot create new vector: %1" ).arg( e.what() ) );
return;
}
// Open in GRASS vector provider
QString uri = QgsGrass::getDefaultGisdbase() + "/"
+ QgsGrass::getDefaultLocation() + "/"
+ QgsGrass::getDefaultMapset() + "/"
+ name + "/0_point";
QgsVectorLayer* layer = new QgsVectorLayer( uri, name, "grass" );
if ( !layer )
{
QMessageBox::warning( 0, tr( "Warning" ),
tr( "New vector created but cannot be opened by data provider." ) );
return;
}
QgsGrassEdit *ed = new QgsGrassEdit( qGisInterface, layer, true,
qGisInterface->mainWindow(), Qt::Dialog );
if ( ed->isValid() )
{
ed->show();
mCanvas->refresh();
}
else
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot start editing." ) );
delete ed;
}
#if 0
if ( !( mProvider->startEdit() ) )
{
QMessageBox::warning( 0, tr( "Warning" ), tr( "Cannot open vector for update." ) );
return;
}
#endif
}
示例12: main
//.........这里部分代码省略.........
}
Vect_cat_get(Cats, field, &cat);
if (cat < 0) { /* no category of given field */
nocat_cnt++;
continue;
}
G_debug(4, " cat = %d", cat);
/* Add point to cache */
drow = Rast_northing_to_row(Points->y[0], &window);
dcol = Rast_easting_to_col(Points->x[0], &window);
/* a special case.
* if north falls at southern edge, or east falls on eastern edge,
* the point will appear outside the window.
* So, for these edges, bring the point inside the window
*/
if (drow == window.rows)
drow--;
if (dcol == window.cols)
dcol--;
cache[point_cnt].row = (int)drow;
cache[point_cnt].col = (int)dcol;
cache[point_cnt].cat = cat;
cache[point_cnt].count = 1;
point_cnt++;
}
Vect_set_db_updated(&Map);
Vect_hist_command(&Map);
Vect_close(&Map);
G_debug(1, "Read %d vector points", point_cnt);
/* Cache may contain duplicate categories, sort by cat, find and remove duplicates
* and recalc count and decrease point_cnt */
qsort(cache, point_cnt, sizeof(struct order), by_cat);
G_debug(1, "Points are sorted, starting duplicate removal loop");
for (i = 0, j = 1; j < point_cnt; j++)
if (cache[i].cat != cache[j].cat)
cache[++i] = cache[j];
else
cache[i].count++;
point_cnt = i + 1;
G_debug(1, "%d vector points left after removal of duplicates",
point_cnt);
/* Report number of points not used */
if (outside_cnt)
G_warning(_("%d points outside current region were skipped"),
outside_cnt);
if (nocat_cnt)
G_warning(_("%d points without category were skipped"), nocat_cnt);
/* Sort cache by current region row */
qsort(cache, point_cnt, sizeof(struct order), by_row);
/* Allocate space for raster row */
if (out_type == CELL_TYPE)
cell = Rast_allocate_c_buf();
示例13: QgsDebugMsg
bool GRASS_EXPORT QgsGrass::mapRegion( int type, QString gisbase,
QString location, QString mapset, QString map,
struct Cell_head *window )
{
QgsDebugMsg( "entered." );
QgsDebugMsg( QString( "map = %1" ).arg( map ) );
QgsDebugMsg( QString( "mapset = %1" ).arg( mapset ) );
QgsGrass::setLocation( gisbase, location );
if ( type == Raster )
{
if ( G_get_cellhd( map.toUtf8().data(),
mapset.toUtf8().data(), window ) < 0 )
{
QMessageBox::warning( 0, QObject::tr( "Warning" ),
QObject::tr( "Cannot read raster map region" ) );
return false;
}
}
else if ( type == Vector )
{
// Get current projection
region( gisbase, location, mapset, window );
struct Map_info Map;
int level = Vect_open_old_head( &Map,
map.toUtf8().data(), mapset.toUtf8().data() );
if ( level < 2 )
{
QMessageBox::warning( 0, QObject::tr( "Warning" ),
QObject::tr( "Cannot read vector map region" ) );
return false;
}
BOUND_BOX box;
Vect_get_map_box( &Map, &box );
window->north = box.N;
window->south = box.S;
window->west = box.W;
window->east = box.E;
window->top = box.T;
window->bottom = box.B;
// Is this optimal ?
window->ns_res = ( window->north - window->south ) / 1000;
window->ew_res = window->ns_res;
if ( window->top > window->bottom )
{
window->tb_res = ( window->top - window->bottom ) / 10;
}
else
{
window->top = window->bottom + 1;
window->tb_res = 1;
}
G_adjust_Cell_head3( window, 0, 0, 0 );
Vect_close( &Map );
}
else if ( type == Region )
{
if ( G__get_window( window, ( char * ) "windows",
map.toUtf8().data(),
mapset.toUtf8().data() ) != NULL )
{
QMessageBox::warning( 0, QObject::tr( "Warning" ),
QObject::tr( "Cannot read region" ) );
return false;
}
}
return true;
}
示例14: execute_random
//.........这里部分代码省略.........
Vect_append_point(Points, x, y, 0.0);
Vect_cat_set(Cats, 1, cat);
Vect_write_line(&Out, GV_POINT, Points, Cats);
if (theState->docover == 1)
if (is_null_value(theState->cover, col))
sprintf(buf,
"insert into %s values ( %d, %f, NULL )",
fi->table, cat, val);
else
sprintf(buf,
"insert into %s values ( %d, %f, %f )",
fi->table, cat, val, coverval);
else
sprintf(buf, "insert into %s values ( %d, %f )",
fi->table, cat, val);
db_set_string(&sql, buf);
if (db_execute_immediate(driver, &sql) != DB_OK)
G_fatal_error(_("Cannot insert new record: %s"),
db_get_string(&sql));
cat++;
}
G_percent((theState->nRand - nt), theState->nRand, 2);
}
else {
set_to_null(&theState->buf, col);
if (theState->docover == 1)
set_to_null(&theState->cover, col);
}
if (do_check)
nc--;
}
while (col < ncols) {
set_to_null(&theState->buf, col);
if (theState->docover == 1)
set_to_null(&theState->cover, col);
col++;
}
if (theState->outraster) {
if (theState->docover == 1)
Rast_put_row(outfd, theState->cover.data.v,
theState->cover.type);
else
Rast_put_row(outfd, theState->buf.data.v,
theState->buf.type);
}
}
/* Catch any remaining rows in the window */
if (theState->outraster && row < nrows) {
for (col = 0; col < ncols; col++) {
if (theState->docover == 1)
set_to_null(&theState->cover, col);
else
set_to_null(&theState->buf, col);
}
for (; row < nrows; row++) {
if (theState->docover == 1)
Rast_put_row(outfd, theState->cover.data.v,
theState->cover.type);
else
Rast_put_row(outfd, theState->buf.data.v,
theState->buf.type);
}
}
if (nt > 0)
G_warning(_("Only [%ld] random points created"),
theState->nRand - nt);
/* close files */
Rast_close(infd);
if (theState->docover == TRUE)
Rast_close(cinfd);
if (theState->outvector) {
db_commit_transaction(driver);
if (db_create_index2(driver, fi->table, GV_KEY_COLUMN) != DB_OK)
G_warning(_("Unable to create index"));
if (db_grant_on_table
(driver, fi->table, DB_PRIV_SELECT,
DB_GROUP | DB_PUBLIC) != DB_OK) {
G_fatal_error(_("Unable to grant privileges on table <%s>"),
fi->table);
}
db_close_database_shutdown_driver(driver);
if (theState->notopol != 1)
Vect_build(&Out);
Vect_close(&Out);
}
if (theState->outraster)
Rast_close(outfd);
return 0;
} /* execute_random() */
示例15: main
//.........这里部分代码省略.........
n_seeds = 0;
/* open vector map of seeds */
if (seed_opt->answer) {
if (Vect_open_old2(&seed_Map, seed_opt->answer, "", "1") < 0)
G_fatal_error(_("Unable to open vector map <%s>"),
seed_opt->answer);
if (!Vect_is_3d(&seed_Map))
G_fatal_error(_("Vector map <%s> is not 3D"), seed_opt->answer);
n_seeds = Vect_get_num_primitives(&seed_Map, GV_POINT);
}
if (flowacc_opt->answer || (!seed_opt->answer && flowlines_opt->answer)) {
if (flowacc_opt->answer)
n_seeds += region.cols * region.rows * region.depths;
else {
n_seeds += ceil(region.cols / (double)skip[0]) *
ceil(region.rows / (double)skip[1]) *
ceil(region.depths / (double)skip[2]);
}
}
G_debug(1, "Number of seeds is %d", n_seeds);
seed_count = 0;
cat = 1;
if (seed_opt->answer) {
seed_points = Vect_new_line_struct();
seed_cats = Vect_new_cats_struct();
/* compute flowlines from vector seed map */
while (TRUE) {
ltype = Vect_read_next_line(&seed_Map, seed_points, seed_cats);
if (ltype == -1) {
Vect_close(&seed_Map);
G_fatal_error(_("Error during reading seed vector map"));
}
else if (ltype == -2) {
break;
}
else if (ltype == GV_POINT) {
seed.x = seed_points->x[0];
seed.y = seed_points->y[0];
seed.z = seed_points->z[0];
seed.flowline = TRUE;
seed.flowaccum = FALSE;
}
G_percent(seed_count, n_seeds, 1);
if (integration.direction_type == FLOWDIR_UP ||
integration.direction_type == FLOWDIR_BOTH) {
integration.actual_direction = FLOWDIR_UP;
compute_flowline(®ion, &seed, &gradient_info, flowacc, sampled,
&integration, &fl_map, fl_cats, fl_points,
&cat, if_table, finfo, driver);
}
if (integration.direction_type == FLOWDIR_DOWN ||
integration.direction_type == FLOWDIR_BOTH) {
integration.actual_direction = FLOWDIR_DOWN;
compute_flowline(®ion, &seed, &gradient_info, flowacc, sampled,
&integration, &fl_map, fl_cats, fl_points,
&cat, if_table, finfo, driver);
}
seed_count++;
}
Vect_destroy_line_struct(seed_points);
Vect_destroy_cats_struct(seed_cats);