Revision: 54165
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54165&view=rev
Author:   starseeker
Date:     2013-01-11 20:38:57 +0000 (Fri, 11 Jan 2013)
Log Message:
-----------
interpolation of points to create a 3d curve doesn't work so well when there 
are only two of them.

Modified Paths:
--------------
    brlcad/trunk/src/librt/CMakeLists.txt
    brlcad/trunk/src/librt/test_botpatches.cpp

Modified: brlcad/trunk/src/librt/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/librt/CMakeLists.txt       2013-01-11 19:59:25 UTC (rev 
54164)
+++ brlcad/trunk/src/librt/CMakeLists.txt       2013-01-11 20:38:57 UTC (rev 
54165)
@@ -306,9 +306,9 @@
   ${CMAKE_CURRENT_SOURCE_DIR}/../libnurbs
   )
 
-#BRLCAD_ADDEXEC(test_botpatches test_botpatches.cpp 
"librt;libwdb;libnurbs;libbu" NOSTRICT NO_INSTALL)
+BRLCAD_ADDEXEC(test_botpatches test_botpatches.cpp 
"librt;libwdb;libnurbs;libbu" NOSTRICT NO_INSTALL)
 #BRLCAD_ADDEXEC(test_nurbsfit test_nurbsfit.cpp "librt;libwdb;libnurbs;libbu" 
NOSTRICT NO_INSTALL)
-#BRLCAD_ADDEXEC(test_subdivision test_subdivision.cpp 
"librt;libwdb;libnurbs;libbu" NOSTRICT NO_INSTALL)
+BRLCAD_ADDEXEC(test_subdivision test_subdivision.cpp 
"librt;libwdb;libnurbs;libbu" NOSTRICT NO_INSTALL)
 
 BRLCAD_ADDEXEC(test_dvec test_dvec.cpp "librt" NOSTRICT NO_INSTALL LOCAL)
 ADD_TEST(test_dvec test_dvec)

Modified: brlcad/trunk/src/librt/test_botpatches.cpp
===================================================================
--- brlcad/trunk/src/librt/test_botpatches.cpp  2013-01-11 19:59:25 UTC (rev 
54164)
+++ brlcad/trunk/src/librt/test_botpatches.cpp  2013-01-11 20:38:57 UTC (rev 
54165)
@@ -759,7 +759,7 @@
            face_queue.push(smallest_face);
            
face_groups[info->face_to_plane[face_queue.front()]].erase(face_queue.front());
            size_t current_plane = info->face_to_plane[face_queue.front()];
-           size_t start_face_num = face_queue.front();
+           //size_t start_face_num = face_queue.front();
            while (!face_queue.empty()) {
                size_t face_num = face_queue.front();
                face_queue.pop();
@@ -1007,8 +1007,14 @@
                    ON_3dPoint pt_3d(&info->bot->vertices[(*v_it)]);
                    curve_pnts.Append(pt_3d);
                }
-               ON_NurbsCurve *curve_nurb =  
interpolateLocalCubicCurve(curve_pnts);
-               int c3i = info->brep->AddEdgeCurve(curve_nurb);
+               ON_NurbsCurve *curve_nurb;
+                int c3i;
+               if (curve_pnts.Count() == 2) {
+                  c3i = info->brep->AddEdgeCurve(new 
ON_LineCurve(*(curve_pnts.First()), *(curve_pnts.Last())));
+               } else {
+                  curve_nurb = interpolateLocalCubicCurve(curve_pnts);
+                  c3i = info->brep->AddEdgeCurve(curve_nurb);
+               }
                ON_BrepVertex& StartV = info->brep->m_V[vs_id];
                StartV.m_tolerance = 1e-3;
                ON_BrepVertex& EndV= info->brep->m_V[ve_id];
@@ -1104,8 +1110,6 @@
     int vert_prev = -1;
     //std::cout << "Patch " << patch_id << " loop edges: \n";
     bool trim_rev = false;
-    size_t pullback_failures = 0;
-    size_t pullback_successes = 0;
     for(loop_it = loop_edges->begin(); loop_it != loop_edges->end(); 
loop_it++) {
        size_t curr_edge = (*loop_it);
        // Will we need to flip the trim?
@@ -1135,8 +1139,10 @@
         int prev_trim_rev = 0;
         int istart = 1;
 
+       size_t pullback_failures;
        if(loop_it == loop_edges->begin()) {
-            prev_trim_rev = trim_rev;
+           pullback_failures = 0;
+           prev_trim_rev = trim_rev;
            int found_first_pt = 0;
            while(!found_first_pt && istart < 50) {
                pt_3d = 
edge_curve->PointAt(dom.ParameterAt((double)(istart-1)/(double)50));
@@ -1145,10 +1151,14 @@
                        curve_pnts_2d.Append(pt_2d);
                        loop_anchor = pt_2d;
                        found_first_pt = 1;
-                   }
+                   } else {
+                      istart++;
+                    }
                } else {
+                  std::cout << "Pullback failure on first pt (" << patch_id << 
"," << (double)(istart-1)/(double)50 << "): " << pt_3d.x << "," << pt_3d.y << 
"," << pt_3d.z << "\n";
                   pullback_failures++;
-                }
+                 istart++;
+               }
            }
        } else {
            curve_pnts_2d.Append(pt_2d_prev);
@@ -1164,6 +1174,7 @@
                        pt_2d_prev = pt_2d;
                    }
                } else {
+                  std::cout << "Pullback failure (" << patch_id << "," << 
(double)(i)/(double)50 << "): " << pt_3d.x << "," << pt_3d.y << "," << pt_3d.z 
<< "\n";
                   pullback_failures++;
                 }
            }
@@ -1176,6 +1187,7 @@
                        pt_2d_prev = pt_2d;
                    }
                } else {
+                  std::cout << "Pullback failure (" << patch_id << "," << 
(double)(i)/(double)50 << "): " << pt_3d.x << "," << pt_3d.y << "," << pt_3d.z 
<< "\n";
                   pullback_failures++;
                 }
            }
@@ -1184,7 +1196,6 @@
        if(loop_it+1 == loop_edges->end()) {
            curve_pnts_2d.Append(loop_anchor);
        }
-        if(pullback_failures) std::cout << "Warning: face " << patch_id << " 
has " << pullback_failures << " pullback failures\n";
        //if(trim_rev) {curve_pnts_2d.Reverse();}
        ON_Curve *trim_curve = interpolateCurve(curve_pnts_2d);
        int c2i = info->brep->AddTrimCurve(trim_curve);

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


------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to