浏览代码

Antonio Galea: make hardcoded MAXPOINTS a parameter: npmax

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@36680 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Neteler 16 年之前
父节点
当前提交
d1b1de6c03
共有 4 个文件被更改,包括 22 次插入10 次删除
  1. 17 5
      vector/v.vol.rst/main.c
  2. 1 1
      vector/v.vol.rst/surf.h
  3. 3 3
      vector/v.vol.rst/user1.c
  4. 1 1
      vector/v.vol.rst/userextern.h

+ 17 - 5
vector/v.vol.rst/main.c

@@ -90,7 +90,7 @@ G3D_Region current_region;
 /* pargr */
 double ns_res, ew_res, tb_res;
 double dmin, ertre;
-int nsizr, nsizc, nsizl, KMAX2, KMIN, KMAX;
+int nsizr, nsizc, nsizl, KMAX2, KMIN, KMAX, KMAXPOINTS;
 
 /* datgr */
 double *az, *adx, *ady, *adxx, *adyy, *adxy, *adz, *adxz, *adyz, *adzz;
@@ -221,7 +221,7 @@ int main(int argc, char *argv[])
     struct
     {
 	struct Option *input, *colnum, *scol, *wheresql, *rescalex, *fi,
-	    *segmax, *dmin1, *npmin, *wmult, *outz, *rsm, *maskmap, *zmult,
+	    *segmax, *dmin1, *npmin, *npmax, *wmult, *outz, *rsm, *maskmap, *zmult,
 	    *cvdev, *gradient, *aspect1, *aspect2, *ncurv, *gcurv, *mcurv,
 	    *cellinp, *cellout, *devi;
     } parm;
@@ -330,6 +330,15 @@ int main(int argc, char *argv[])
 	_("Minimum number of points for approximation in a segment (>segmax)");
     parm.npmin->guisection = _("Settings");
 
+    parm.npmax = G_define_option();
+    parm.npmax->key = "npmax";
+    parm.npmax->type = TYPE_INTEGER;
+    parm.npmax->answer = MAXPOINTS;
+    parm.npmax->required = NO;
+    parm.npmax->description =
+	_("Maximum number of points for approximation in a segment (>npmin)");
+    parm.npmax->guisection = _("Settings");
+
     parm.dmin1 = G_define_option();
     parm.dmin1->key = "dmin";
     parm.dmin1->type = TYPE_DOUBLE;
@@ -488,6 +497,7 @@ int main(int argc, char *argv[])
     sscanf(parm.rsm->answer, "%lf", &rsm);
     sscanf(parm.segmax->answer, "%d", &KMAX);
     sscanf(parm.npmin->answer, "%d", &npmin);
+    sscanf(parm.npmax->answer, "%d", &KMAXPOINTS);
     sscanf(parm.wmult->answer, "%lf", &wmult);
     sscanf(parm.zmult->answer, "%lf", &zmult);
 
@@ -518,7 +528,6 @@ int main(int argc, char *argv[])
     tb_res_in = tb_res;
     z_orig = z_orig * zmult;
     tb_res = tb_res * zmult;
-    KMAX2 = MAXPOINTS;
 
     /*    fprintf (stderr, "DMIN = %f\n", dmin); */
 
@@ -588,6 +597,9 @@ int main(int argc, char *argv[])
     ii = INPUT(&In, parm.colnum->answer, parm.scol->answer,
 	       parm.wheresql->answer);
 
+    /* now NPOINT is available */
+    KMAX2 =(NPOINT >= KMAXPOINTS ? KMAXPOINTS : NPOINT);
+
     Vect_close(&In);
 
     if (devi != NULL || cvdev != NULL) {
@@ -839,8 +851,8 @@ int main(int argc, char *argv[])
 		    sprintf(hist.edhist[1],
 			    "dnorm=%f, dmin=%f, wmult=%f, zmult=%f", dnorm,
 			    atof(parm.dmin1->answer), wmult, zmult);
-		    sprintf(hist.edhist[2], "segmax=%d, npmin=%d, rmsdevi=%f",
-			    KMAX, npmin, sqrt(ertot / KMAX2));
+		    sprintf(hist.edhist[2], "segmax=%d, npmin=%d, npmax=%d, rmsdevi=%f",
+			    KMAX, npmin, KMAXPOINTS, sqrt(ertot / KMAX2));
 		    sprintf(hist.edhist[3], "wmin_data=%f, wmax_data=%f",
 			    wmin, wmax);
 		    /* ? sprintf (hist.edhist[4], "wmin_int=%f, wmax_int=%f", wminac, wmaxac); */

+ 1 - 1
vector/v.vol.rst/surf.h

@@ -30,7 +30,7 @@
 #define SMOOTH "0.1"
 #define MAXSEGM "50"
 #define MINPOINTS "200"
-#define MAXPOINTS  700
+#define MAXPOINTS "700"
 #define TOPPARAM "0"
 #define PREPROCESS "0"
 #define ZMULT   "1.0"

+ 3 - 3
vector/v.vol.rst/user1.c

@@ -322,7 +322,7 @@ int INPUT(struct Map_info *In, char *column, char *scol, char *wheresql)
 	    return -1;
 	}
     }
-    if (NPOINT > MAXPOINTS && KMIN <= KMAX) {
+    if (NPOINT > KMAXPOINTS && KMIN <= KMAX) {
 	fprintf(stderr,
 		"ERROR: segmentation parameters set to invalid values: npmin = %d, segmax = %d \n",
 		KMIN, KMAX);
@@ -331,10 +331,10 @@ int INPUT(struct Map_info *In, char *column, char *scol, char *wheresql)
 	return -1;
     }
 
-    if (NPOINT < MAXPOINTS && KMAX != MAXPOINTS)
+    if (NPOINT < KMAXPOINTS && KMAX != KMAXPOINTS)
 	G_warning
 	    ("There is less than %d points for interpolation, no segmentation is necessary, to run the program faster, set segmax=%d (see manual)",
-	     MAXPOINTS, MAXPOINTS);
+	     KMAXPOINTS, KMAXPOINTS);
 
     deltx = xmax - xmin;
     delty = ymax - ymin;

+ 1 - 1
vector/v.vol.rst/userextern.h

@@ -1,7 +1,7 @@
 #ifndef __USEREXTERNS_H__
 #define __USEREXTERNS_H__
 
-extern int KMAX2, KMIN, KMAX;
+extern int KMAX2, KMIN, KMAX, KMAXPOINTS;
 extern struct octtree *root;
 extern int NPOINT;
 extern int OUTRANGE;