Revision: 73037
          http://sourceforge.net/p/brlcad/code/73037
Author:   starseeker
Date:     2019-05-09 19:48:57 +0000 (Thu, 09 May 2019)
Log Message:
-----------
use the sinfo struct to hold the uv mins and maxes as well

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

Modified: brlcad/trunk/src/libbrep/cdt.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt.cpp    2019-05-09 19:29:06 UTC (rev 73036)
+++ brlcad/trunk/src/libbrep/cdt.cpp    2019-05-09 19:48:57 UTC (rev 73037)
@@ -789,6 +789,7 @@
 
 struct cdt_surf_info {
     const ON_Surface *s;
+    double u1, u2, v1, v2;
     fastf_t ulen;
     fastf_t u_lower_3dlen;
     fastf_t u_upper_3dlen;
@@ -839,14 +840,24 @@
                on_surf_points.Append(p2d);
            }
            if (i == 1) {
+
+               // Check the distance between v1 and v2 at u1 && u1+step.
+               // If they're both less than threshold, skip
+
                getSurfacePoints(sinfo, u1, u1 + step, v1, v2, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else if (i == isteps) {
+
+               // Check the distance between v1 and v2 at u2-step && u2
+               // If they're both less than threshold, skip
+       
                getSurfacePoints(sinfo, u2 - step, u2, v1, v2, min_dist,
                        within_dist, cos_within_ang, on_surf_points, left,
                        below);
            } else {
+               // Check the distance between v1 and v2 at step_u - step and 
step_u
+               // If they're both less than threshold, skip
                getSurfacePoints(sinfo, step_u - step, step_u, v1, v2, 
min_dist, within_dist,
                        cos_within_ang, on_surf_points, left, below);
            }
@@ -1025,54 +1036,51 @@
  *                         (0,0)
  */
 double
-_cdt_get_uv_edge_3d_len(const ON_Surface *s, int c1, int c2)
+_cdt_get_uv_edge_3d_len(struct cdt_surf_info *sinfo, int c1, int c2)
 {
-    double u1, u2, v1, v2;
-    s->GetDomain(0, &u1, &u2);
-    s->GetDomain(1, &v1, &v2);
     double wu1, wv1, wu2, wv2, umid, vmid;
 
     if (!c1 && !c2) {
-       wu1 = u1;
-       wu2 = u2;
-       wv1 = v1;
-       wv2 = v1;
-       umid = (u2 - u1)/2.0;
-       vmid = v1;
+       wu1 = sinfo->u1;
+       wu2 = sinfo->u2;
+       wv1 = sinfo->v1;
+       wv2 = sinfo->v1;
+       umid = (sinfo->u2 - sinfo->u1)/2.0;
+       vmid = sinfo->v1;
     }
     if (c1 && !c2) {
-       wu1 = u1;
-       wu2 = u2;
-       wv1 = v2;
-       wv2 = v2;
-       umid = (u2 - u1)/2.0;
-       vmid = v2;
+       wu1 = sinfo->u1;
+       wu2 = sinfo->u2;
+       wv1 = sinfo->v2;
+       wv2 = sinfo->v2;
+       umid = (sinfo->u2 - sinfo->u1)/2.0;
+       vmid = sinfo->v2;
     }
     if (!c1 && c2) {
-       wu1 = u1;
-       wu2 = u1;
-       wv1 = v1;
-       wv2 = v2;
-       umid = u1;
-       vmid = (v2 - v1)/2.0;
+       wu1 = sinfo->u1;
+       wu2 = sinfo->u1;
+       wv1 = sinfo->v1;
+       wv2 = sinfo->v2;
+       umid = sinfo->u1;
+       vmid = (sinfo->v2 - sinfo->v1)/2.0;
     }
     if (c1 && c2) {
-       wu1 = u2;
-       wu2 = u2;
-       wv1 = v1;
-       wv2 = v2;
-       umid = u2;
-       vmid = (v2 - v1)/2.0;
+       wu1 = sinfo->u2;
+       wu2 = sinfo->u2;
+       wv1 = sinfo->v1;
+       wv2 = sinfo->v2;
+       umid = sinfo->u2;
+       vmid = (sinfo->v2 - sinfo->v1)/2.0;
     }
 
     // 1st 3d point
-    ON_3dPoint p1 = s->PointAt(wu1, wv1);
+    ON_3dPoint p1 = sinfo->s->PointAt(wu1, wv1);
 
     // middle 3d point
-    ON_3dPoint pmid = s->PointAt(umid, vmid);
+    ON_3dPoint pmid = sinfo->s->PointAt(umid, vmid);
 
     // last 3d point
-    ON_3dPoint p2 = s->PointAt(wu2, wv2);
+    ON_3dPoint p2 = sinfo->s->PointAt(wu2, wv2);
 
     // length
     double d1 = pmid.DistanceTo(p1);
@@ -1109,16 +1117,21 @@
        sinfo.ulen = fabs(t2 - t1);
        s->GetDomain(1, &t1, &t2);
        sinfo.vlen = fabs(t2 - t1);
-       sinfo.u_lower_3dlen = _cdt_get_uv_edge_3d_len(s, 0, 0);
-       sinfo.u_upper_3dlen = _cdt_get_uv_edge_3d_len(s, 1, 0);
-       sinfo.v_lower_3dlen = _cdt_get_uv_edge_3d_len(s, 0, 1);
-       sinfo.v_upper_3dlen = _cdt_get_uv_edge_3d_len(s, 1, 1);
-       bu_log("u_lower_3dlen: %f\n",_cdt_get_uv_edge_3d_len(s, 0, 0));
-       bu_log("u_upper_3dlen: %f\n",_cdt_get_uv_edge_3d_len(s, 1, 0));
-       bu_log("v_lower_3dlen: %f\n",_cdt_get_uv_edge_3d_len(s, 0, 1));
-       bu_log("v_upper_3dlen: %f\n",_cdt_get_uv_edge_3d_len(s, 1, 1));
+       s->GetDomain(0, &sinfo.u1, &sinfo.u2);
+       s->GetDomain(1, &sinfo.v1, &sinfo.v2);
+       sinfo.u_lower_3dlen = _cdt_get_uv_edge_3d_len(&sinfo, 0, 0);
+       sinfo.u_upper_3dlen = _cdt_get_uv_edge_3d_len(&sinfo, 1, 0);
+       sinfo.v_lower_3dlen = _cdt_get_uv_edge_3d_len(&sinfo, 0, 1);
+       sinfo.v_upper_3dlen = _cdt_get_uv_edge_3d_len(&sinfo, 1, 1);
+       if (!NEAR_EQUAL(sinfo.u_lower_3dlen, sinfo.u_upper_3dlen, 0.001)) {
+           bu_log("u_lower_3dlen: %f\n",_cdt_get_uv_edge_3d_len(&sinfo, 0, 0));
+           bu_log("u_upper_3dlen: %f\n",_cdt_get_uv_edge_3d_len(&sinfo, 1, 0));
+       }
+       if (!NEAR_EQUAL(sinfo.v_lower_3dlen, sinfo.v_upper_3dlen, 0.001)) {
+           bu_log("v_lower_3dlen: %f\n",_cdt_get_uv_edge_3d_len(&sinfo, 0, 1));
+           bu_log("v_upper_3dlen: %f\n",_cdt_get_uv_edge_3d_len(&sinfo, 1, 1));
+       }
 
-
        // may be a smaller trimmed subset of surface so worth getting
        // face boundary
        bool bGrowBox = false;

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