Revision: 73153
          http://sourceforge.net/p/brlcad/code/73153
Author:   starseeker
Date:     2019-05-23 13:23:09 +0000 (Thu, 23 May 2019)
Log Message:
-----------
Don't want to re-copy each time we refine, so stash once up front and delete on 
destroy.

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

Modified: brlcad/trunk/src/libbrep/cdt.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt.cpp    2019-05-23 13:17:58 UTC (rev 73152)
+++ brlcad/trunk/src/libbrep/cdt.cpp    2019-05-23 13:23:09 UTC (rev 73153)
@@ -355,7 +355,10 @@
     ON_wString wstr;
     ON_TextLog tl(wstr);
 
-    ON_Brep* brep = new ON_Brep(*s_cdt->brep);
+    if (!s_cdt->brep) {
+       s_cdt->brep = new ON_Brep(*s_cdt->orig_brep);
+    }
+    ON_Brep* brep = s_cdt->brep;
 
     brep->ShrinkSurfaces();
 
@@ -363,7 +366,6 @@
     ON_wString wonstr;
     ON_TextLog vout(wonstr);
     if (!brep->IsValid(&vout)) {
-       delete brep;
        bu_log("brep is NOT valid, cannot produce watertight mesh\n");
        //return -1;
     }
@@ -372,7 +374,6 @@
     for (int index = 0; index < brep->m_E.Count(); index++) {
         ON_BrepEdge& edge = brep->m_E[index];
         if (edge.TrimCount() != 2) {
-           delete brep;
            bu_log("Edge %d trim count: %d - can't (yet) do watertight 
meshing\n", edge.m_edge_index, edge.TrimCount());
             return -1;
         }
@@ -754,7 +755,6 @@
 cdt_done:
     bu_free(valid_faces, "faces");
     bu_free(valid_vertices, "vertices");
-    delete brep;
 
     if (invalid) {
        return 1;

Modified: brlcad/trunk/src/libbrep/cdt.h
===================================================================
--- brlcad/trunk/src/libbrep/cdt.h      2019-05-23 13:17:58 UTC (rev 73152)
+++ brlcad/trunk/src/libbrep/cdt.h      2019-05-23 13:23:09 UTC (rev 73153)
@@ -86,6 +86,7 @@
 struct ON_Brep_CDT_State {
 
     int status;
+    ON_Brep *orig_brep;
     ON_Brep *brep;
 
     /* Tolerances */

Modified: brlcad/trunk/src/libbrep/cdt_util.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_util.cpp       2019-05-23 13:17:58 UTC (rev 
73152)
+++ brlcad/trunk/src/libbrep/cdt_util.cpp       2019-05-23 13:23:09 UTC (rev 
73153)
@@ -163,7 +163,8 @@
 {
     ON_Brep *brep = (ON_Brep *)bv;
     struct ON_Brep_CDT_State *cdt = new struct ON_Brep_CDT_State;
-    cdt->brep = brep;
+    cdt->orig_brep = brep;
+    cdt->brep = NULL;
 
     cdt->w3dpnts = new std::vector<ON_3dPoint *>;
     cdt->vert_pnts = new std::map<int, ON_3dPoint *>;
@@ -243,6 +244,10 @@
     delete s_cdt->edge_pnts;
     delete s_cdt->p2t_extra_faces;
 
+    if (s_cdt->brep) {
+       delete s_cdt->brep;
+    }
+
     bu_free(s_cdt->brep_face_loop_points, "flp array");
     bu_free(s_cdt->face_degen_pnts, "degen pnts");
     // TODO - delete p2t data

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