Revision: 73035
          http://sourceforge.net/p/brlcad/code/73035
Author:   starseeker
Date:     2019-05-09 17:38:11 +0000 (Thu, 09 May 2019)
Log Message:
-----------
Pass a container, not just the surface point, in anticipation of needing more 
shared information.

Modified Paths:
--------------
    brlcad/trunk/src/libbrep/cdt.cpp

Modified: brlcad/trunk/src/libbrep/cdt.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt.cpp    2019-05-09 15:04:41 UTC (rev 73034)
+++ brlcad/trunk/src/libbrep/cdt.cpp    2019-05-09 17:38:11 UTC (rev 73035)
@@ -787,8 +787,18 @@
     return trim1_param_points;
 }
 
+struct cdt_surf_info {
+    const ON_Surface *s;
+    fastf_t ulen;
+    fastf_t u_lower_3dlen;
+    fastf_t u_upper_3dlen;
+    fastf_t vlen;
+    fastf_t v_lower_3dlen;
+    fastf_t v_upper_3dlen;
+};
+
 static void
-getSurfacePoints(const ON_Surface *s,
+getSurfacePoints(struct cdt_surf_info *sinfo,
                 fastf_t u1,
                 fastf_t u2,
                 fastf_t v1,
@@ -829,15 +839,15 @@
                on_surf_points.Append(p2d);
            }
            if (i == 1) {
-               getSurfacePoints(s, u1, u1 + step, v1, v2, min_dist,
+               getSurfacePoints(sinfo, u1, u1 + step, v1, v2, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else if (i == isteps) {
-               getSurfacePoints(s, u2 - step, u2, v1, v2, min_dist,
+               getSurfacePoints(sinfo, u2 - step, u2, v1, v2, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else {
-               getSurfacePoints(s, step_u - step, step_u, v1, v2, min_dist, 
within_dist,
+               getSurfacePoints(sinfo, step_u - step, step_u, v1, v2, 
min_dist, within_dist,
                        cos_within_ang, on_surf_points, left, below);
            }
            left = false;
@@ -863,15 +873,15 @@
            }
 
            if (i == 1) {
-               getSurfacePoints(s, u1, u2, v1, v1 + step, min_dist,
+               getSurfacePoints(sinfo, u1, u2, v1, v1 + step, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else if (i == isteps) {
-               getSurfacePoints(s, u1, u2, v2 - step, v2, min_dist,
+               getSurfacePoints(sinfo, u1, u2, v2 - step, v2, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else {
-               getSurfacePoints(s, u1, u2, step_v - step, step_v, min_dist, 
within_dist,
+               getSurfacePoints(sinfo, u1, u2, step_v - step, step_v, 
min_dist, within_dist,
                        cos_within_ang, on_surf_points, left, below);
            }
 
@@ -885,11 +895,11 @@
        }
        return;
     }
-    if ((surface_EvNormal(s, u1, v1, p[0], norm[0]))
-           && (surface_EvNormal(s, u2, v1, p[1], norm[1])) // for u
-           && (surface_EvNormal(s, u2, v2, p[2], norm[2]))
-           && (surface_EvNormal(s, u1, v2, p[3], norm[3]))
-           && (surface_EvNormal(s, u, v, mid, norm_mid))) {
+    if ((surface_EvNormal(sinfo->s, u1, v1, p[0], norm[0]))
+           && (surface_EvNormal(sinfo->s, u2, v1, p[1], norm[1])) // for u
+           && (surface_EvNormal(sinfo->s, u2, v2, p[2], norm[2]))
+           && (surface_EvNormal(sinfo->s, u1, v2, p[3], norm[3]))
+           && (surface_EvNormal(sinfo->s, u, v, mid, norm_mid))) {
        double udot;
        double vdot;
        ON_Line line1(p[0], p[2]);
@@ -923,13 +933,13 @@
            p2d.Set(u, v2);
            on_surf_points.Append(p2d);
 
-           getSurfacePoints(s, u1, u, v1, v, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u, v1, v, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, below);
-           getSurfacePoints(s, u1, u, v, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u, v, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, false);
-           getSurfacePoints(s, u, u2, v1, v, min_dist, within_dist,
+           getSurfacePoints(sinfo, u, u2, v1, v, min_dist, within_dist,
                    cos_within_ang, on_surf_points, false, below);
-           getSurfacePoints(s, u, u2, v, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u, u2, v, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, false, false);
            return;
        }
@@ -941,9 +951,9 @@
            //top
            p2d.Set(u, v2);
            on_surf_points.Append(p2d);
-           getSurfacePoints(s, u1, u, v1, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u, v1, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, below);
-           getSurfacePoints(s, u, u2, v1, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u, u2, v1, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, false, below);
            return;
        }
@@ -956,9 +966,9 @@
            p2d.Set(u2, v);
            on_surf_points.Append(p2d);
 
-           getSurfacePoints(s, u1, u2, v1, v, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u2, v1, v, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, below);
-           getSurfacePoints(s, u1, u2, v, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u2, v, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, false);
            return;
        }
@@ -983,13 +993,13 @@
 
        if (dist > within_dist + ON_ZERO_TOLERANCE) {
 
-           getSurfacePoints(s, u1, u, v1, v, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u, v1, v, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, below);
-           getSurfacePoints(s, u1, u, v, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u1, u, v, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, left, false);
-           getSurfacePoints(s, u, u2, v1, v, min_dist, within_dist,
+           getSurfacePoints(sinfo, u, u2, v1, v, min_dist, within_dist,
                    cos_within_ang, on_surf_points, false, below);
-           getSurfacePoints(s, u, u2, v, v2, min_dist, within_dist,
+           getSurfacePoints(sinfo, u, u2, v, v2, min_dist, within_dist,
                    cos_within_ang, on_surf_points, false, false);
        }
     }
@@ -1002,9 +1012,14 @@
                 ON_2dPointArray &on_surf_points)
 {
     double surface_width, surface_height;
+
     const ON_Surface *s = face.SurfaceOf();
     const ON_Brep *brep = face.Brep();
 
+    struct cdt_surf_info sinfo;
+
+    sinfo.s = s;
+
     if (s->GetSurfaceSize(&surface_width, &surface_height)) {
        double dist = 0.0;
        double min_dist = 0.0;
@@ -1075,7 +1090,7 @@
            p.Set(min.x, midy);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, midx, min.y, midy, min_dist, within_dist,
+           getSurfacePoints(&sinfo, min.x, midx, min.y, midy, min_dist, 
within_dist,
                             cos_within_ang, on_surf_points, true, true);
 
            //bottom midx
@@ -1086,7 +1101,7 @@
            p.Set(midx, midy);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, midx, max.x, min.y, midy, min_dist, within_dist,
+           getSurfacePoints(&sinfo, midx, max.x, min.y, midy, min_dist, 
within_dist,
                             cos_within_ang, on_surf_points, false, true);
 
            //bottom right
@@ -1101,7 +1116,7 @@
            p.Set(min.x, max.y);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, midx, midy, max.y, min_dist, within_dist,
+           getSurfacePoints(&sinfo, min.x, midx, midy, max.y, min_dist, 
within_dist,
                             cos_within_ang, on_surf_points, true, false);
 
            //top midx
@@ -1108,7 +1123,7 @@
            p.Set(midx, max.y);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, midx, max.x, midy, max.y, min_dist, within_dist,
+           getSurfacePoints(&sinfo, midx, max.x, midy, max.y, min_dist, 
within_dist,
                             cos_within_ang, on_surf_points, false, false);
 
            //top left
@@ -1126,7 +1141,7 @@
            p.Set(min.x, max.y);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, midx, min.y, max.y, min_dist,
+           getSurfacePoints(&sinfo, min.x, midx, min.y, max.y, min_dist,
                             within_dist, cos_within_ang, on_surf_points, true, 
true);
 
            //bottom midx
@@ -1137,7 +1152,7 @@
            p.Set(midx, max.y);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, midx, max.x, min.y, max.y, min_dist,
+           getSurfacePoints(&sinfo, midx, max.x, min.y, max.y, min_dist,
                             within_dist, cos_within_ang, on_surf_points, 
false, true);
 
            //bottom right
@@ -1159,7 +1174,7 @@
            p.Set(min.x, midy);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, max.x, min.y, midy, min_dist,
+           getSurfacePoints(&sinfo, min.x, max.x, min.y, midy, min_dist,
                             within_dist, cos_within_ang, on_surf_points, true, 
true);
 
            //bottom right
@@ -1170,7 +1185,7 @@
            p.Set(max.x, midy);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, max.x, midy, max.y, min_dist,
+           getSurfacePoints(&sinfo, min.x, max.x, midy, max.y, min_dist,
                             within_dist, cos_within_ang, on_surf_points, true, 
false);
 
            // top left
@@ -1191,7 +1206,7 @@
            p.Set(min.x, max.y);
            on_surf_points.Append(p);
 
-           getSurfacePoints(s, min.x, max.x, min.y, max.y, min_dist,
+           getSurfacePoints(&sinfo, min.x, max.x, min.y, max.y, min_dist,
                             within_dist, cos_within_ang, on_surf_points, true, 
true);
 
            //bottom right

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to