Revision: 56377
          http://sourceforge.net/p/brlcad/code/56377
Author:   phoenixyjll
Date:     2013-07-31 04:14:27 +0000 (Wed, 31 Jul 2013)
Log Message:
-----------
Avoid using dynamic memory allocation for the events.

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

Modified: brlcad/trunk/src/libbrep/intersect.cpp
===================================================================
--- brlcad/trunk/src/libbrep/intersect.cpp      2013-07-31 04:12:32 UTC (rev 
56376)
+++ brlcad/trunk/src/libbrep/intersect.cpp      2013-07-31 04:14:27 UTC (rev 
56377)
@@ -476,14 +476,14 @@
        closest_point = curveB.PointAt(closest_point_t);
 
        if (dis <= tolerance) {
-           ON_PX_EVENT *Event = new ON_PX_EVENT;
-           Event->m_type = ON_PX_EVENT::pcx_point;
-           Event->m_A = pointA;
-           Event->m_B = closest_point;
-           Event->m_b[0] = closest_point_t;
-           Event->m_Mid = (pointA + Event->m_B) * 0.5;
-           Event->m_radius = closest_point.DistanceTo(pointA) * 0.5;
-           x.Append(*Event);
+           ON_PX_EVENT Event;
+           Event.m_type = ON_PX_EVENT::pcx_point;
+           Event.m_A = pointA;
+           Event.m_B = closest_point;
+           Event.m_b[0] = closest_point_t;
+           Event.m_Mid = (pointA + Event.m_B) * 0.5;
+           Event.m_radius = closest_point.DistanceTo(pointA) * 0.5;
+           x.Append(Event);
            return true;
        }
     }
@@ -875,17 +875,17 @@
                    else
                        t_a2 = 1.0, t_b2 = endA_on_B;
 
-                   ON_X_EVENT* Event = new ON_X_EVENT;
-                   Event->m_A[0] = lineA.PointAt(t_a1);
-                   Event->m_A[1] = lineA.PointAt(t_a2);
-                   Event->m_B[0] = lineB.PointAt(t_b1);
-                   Event->m_B[1] = lineB.PointAt(t_b2);
-                   Event->m_a[0] = i->first->m_t.ParameterAt(t_a1);
-                   Event->m_a[1] = i->first->m_t.ParameterAt(t_a2);
-                   Event->m_b[0] = i->second->m_t.ParameterAt(t_b1);
-                   Event->m_b[1] = i->second->m_t.ParameterAt(t_b2);
-                   Event->m_type = ON_X_EVENT::ccx_overlap;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = lineA.PointAt(t_a1);
+                   Event.m_A[1] = lineA.PointAt(t_a2);
+                   Event.m_B[0] = lineB.PointAt(t_b1);
+                   Event.m_B[1] = lineB.PointAt(t_b2);
+                   Event.m_a[0] = i->first->m_t.ParameterAt(t_a1);
+                   Event.m_a[1] = i->first->m_t.ParameterAt(t_a2);
+                   Event.m_b[0] = i->second->m_t.ParameterAt(t_b1);
+                   Event.m_b[1] = i->second->m_t.ParameterAt(t_b2);
+                   Event.m_type = ON_X_EVENT::ccx_overlap;
+                   tmp_x.Append(Event);
                }
            } else {
                // They are not parallel, check intersection point
@@ -896,13 +896,13 @@
                    t_a = i->first->m_t.ParameterAt(t_lineA);
                    t_b = i->second->m_t.ParameterAt(t_lineB);
 
-                   ON_X_EVENT* Event = new ON_X_EVENT;
-                   Event->m_A[0] = Event->m_A[1] = lineA.PointAt(t_lineA);
-                   Event->m_B[0] = Event->m_B[1] = lineB.PointAt(t_lineB);
-                   Event->m_a[0] = Event->m_a[1] = t_a;
-                   Event->m_b[0] = Event->m_b[1] = t_b;
-                   Event->m_type = ON_X_EVENT::ccx_point;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = Event.m_A[1] = lineA.PointAt(t_lineA);
+                   Event.m_B[0] = Event.m_B[1] = lineB.PointAt(t_lineB);
+                   Event.m_a[0] = Event.m_a[1] = t_a;
+                   Event.m_b[0] = Event.m_b[1] = t_b;
+                   Event.m_type = ON_X_EVENT::ccx_point;
+                   tmp_x.Append(Event);
                }
            }
        } else {
@@ -931,13 +931,13 @@
                double distance = pointA.DistanceTo(pointB);
                // Check the validity of the solution
                if (distance < intersection_tolerance) {
-                   ON_X_EVENT *Event = new ON_X_EVENT;
-                   Event->m_A[0] = Event->m_A[1] = pointA;
-                   Event->m_B[0] = Event->m_B[1] = pointB;
-                   Event->m_a[0] = Event->m_a[1] = t_a1;
-                   Event->m_b[0] = Event->m_b[1] = t_b1;
-                   Event->m_type = ON_X_EVENT::ccx_point;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = Event.m_A[1] = pointA;
+                   Event.m_B[0] = Event.m_B[1] = pointB;
+                   Event.m_a[0] = Event.m_a[1] = t_a1;
+                   Event.m_b[0] = Event.m_b[1] = t_b1;
+                   Event.m_type = ON_X_EVENT::ccx_point;
+                   tmp_x.Append(Event);
                }
            } else {
                // Check overlap
@@ -947,26 +947,26 @@
 
                // Check the validity of the solution
                if (distance1 < intersection_tolerance && distance2 < 
intersection_tolerance) {
-                   ON_X_EVENT *Event = new ON_X_EVENT;
+                   ON_X_EVENT Event;
                    // We make sure that m_a[0] <= m_a[1]
                    if (t_a1 <= t_a2) {
-                       Event->m_A[0] = pointA1;
-                       Event->m_A[1] = pointA2;
-                       Event->m_B[0] = pointB1;
-                       Event->m_B[1] = pointB2;
-                       Event->m_a[0] = t_a1;
-                       Event->m_a[1] = t_a2;
-                       Event->m_b[0] = t_b1;
-                       Event->m_b[1] = t_b2;
+                       Event.m_A[0] = pointA1;
+                       Event.m_A[1] = pointA2;
+                       Event.m_B[0] = pointB1;
+                       Event.m_B[1] = pointB2;
+                       Event.m_a[0] = t_a1;
+                       Event.m_a[1] = t_a2;
+                       Event.m_b[0] = t_b1;
+                       Event.m_b[1] = t_b2;
                    } else {
-                       Event->m_A[0] = pointA2;
-                       Event->m_A[1] = pointA1;
-                       Event->m_B[0] = pointB2;
-                       Event->m_B[1] = pointB1;
-                       Event->m_a[0] = t_a2;
-                       Event->m_a[1] = t_a1;
-                       Event->m_b[0] = t_b2;
-                       Event->m_b[1] = t_b1;
+                       Event.m_A[0] = pointA2;
+                       Event.m_A[1] = pointA1;
+                       Event.m_B[0] = pointB2;
+                       Event.m_B[1] = pointB1;
+                       Event.m_a[0] = t_a2;
+                       Event.m_a[1] = t_a1;
+                       Event.m_b[0] = t_b2;
+                       Event.m_b[1] = t_b1;
                    }
                    int j;
                    for (j = 1; j < CCI_OVERLAP_TEST_POINTS; j++) {
@@ -978,8 +978,8 @@
                            break;
                    }
                    if (j == CCI_OVERLAP_TEST_POINTS) {
-                       Event->m_type = ON_X_EVENT::ccx_overlap;
-                       tmp_x.Append(*Event);
+                       Event.m_type = ON_X_EVENT::ccx_overlap;
+                       tmp_x.Append(Event);
                        continue;
                    }
                    // if j != CCI_OVERLAP_TEST_POINTS, two ccx_point events 
should
@@ -987,23 +987,23 @@
                }
                if (distance1 < intersection_tolerance) {
                    // in case that the second one was not correct
-                   ON_X_EVENT *Event = new ON_X_EVENT;
-                   Event->m_A[0] = Event->m_A[1] = pointA1;
-                   Event->m_B[0] = Event->m_B[1] = pointB1;
-                   Event->m_a[0] = Event->m_a[1] = t_a1;
-                   Event->m_b[0] = Event->m_b[1] = t_b1;
-                   Event->m_type = ON_X_EVENT::ccx_point;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = Event.m_A[1] = pointA1;
+                   Event.m_B[0] = Event.m_B[1] = pointB1;
+                   Event.m_a[0] = Event.m_a[1] = t_a1;
+                   Event.m_b[0] = Event.m_b[1] = t_b1;
+                   Event.m_type = ON_X_EVENT::ccx_point;
+                   tmp_x.Append(Event);
                }
                if (distance2 < intersection_tolerance) {
                    // in case that the first one was not correct
-                   ON_X_EVENT *Event = new ON_X_EVENT;
-                   Event->m_A[0] = Event->m_A[1] = pointA2;
-                   Event->m_B[0] = Event->m_B[1] = pointB2;
-                   Event->m_a[0] = Event->m_a[1] = t_a2;
-                   Event->m_b[0] = Event->m_b[1] = t_b2;
-                   Event->m_type = ON_X_EVENT::ccx_point;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = Event.m_A[1] = pointA2;
+                   Event.m_B[0] = Event.m_B[1] = pointB2;
+                   Event.m_a[0] = Event.m_a[1] = t_a2;
+                   Event.m_b[0] = Event.m_b[1] = t_b2;
+                   Event.m_type = ON_X_EVENT::ccx_point;
+                   tmp_x.Append(Event);
                }
            }
        }
@@ -1378,25 +1378,25 @@
                    // They are parallel
                    if (line.InPlane(plane, intersection_tolerance)) {
                        // we report a csx_overlap event
-                       ON_X_EVENT *Event = new ON_X_EVENT;
+                       ON_X_EVENT Event;
 
                        // First, we check the endpoints of the line segment
                        ON_ClassArray<ON_PX_EVENT> px_event1, px_event2;
                        int intersections = 0;
                        if (ON_Intersect(line.from, *surfaceB, px_event1, 
intersection_tolerance, 0, 0, tree)) {
-                           Event->m_A[intersections] = line.from;
-                           Event->m_B[intersections] = px_event1[0].m_B;
-                           Event->m_a[intersections] = i->first->m_t.Min();
-                           Event->m_b[2*intersections] = px_event1[0].m_b[0];
-                           Event->m_b[2*intersections+1] = px_event1[0].m_b[1];
+                           Event.m_A[intersections] = line.from;
+                           Event.m_B[intersections] = px_event1[0].m_B;
+                           Event.m_a[intersections] = i->first->m_t.Min();
+                           Event.m_b[2*intersections] = px_event1[0].m_b[0];
+                           Event.m_b[2*intersections+1] = px_event1[0].m_b[1];
                            intersections++;
                        }
                        if (ON_Intersect(line.to, *surfaceB, px_event2, 
intersection_tolerance, 0, 0, tree)) {
-                           Event->m_A[intersections] = line.to;
-                           Event->m_B[intersections] = px_event2[0].m_B;
-                           Event->m_a[intersections] = i->first->m_t.Max();
-                           Event->m_b[2*intersections] = px_event2[0].m_b[0];
-                           Event->m_b[2*intersections+1] = px_event2[0].m_b[1];
+                           Event.m_A[intersections] = line.to;
+                           Event.m_B[intersections] = px_event2[0].m_B;
+                           Event.m_a[intersections] = i->first->m_t.Max();
+                           Event.m_b[2*intersections] = px_event2[0].m_b[0];
+                           Event.m_b[2*intersections+1] = px_event2[0].m_b[1];
                            intersections++;
                        }
 
@@ -1448,11 +1448,11 @@
                                surf_v = i->second->m_v.Min();
                                break;
                            }
-                           Event->m_A[intersections] = line.PointAt(line_t[j]);
-                           Event->m_B[intersections] = 
surfaceB->PointAt(surf_u, surf_v);
-                           Event->m_a[intersections] = 
i->first->m_t.ParameterAt(line_t[j]);
-                           Event->m_b[2*intersections] = surf_u;
-                           Event->m_b[2*intersections+1] = surf_v;
+                           Event.m_A[intersections] = line.PointAt(line_t[j]);
+                           Event.m_B[intersections] = 
surfaceB->PointAt(surf_u, surf_v);
+                           Event.m_a[intersections] = 
i->first->m_t.ParameterAt(line_t[j]);
+                           Event.m_b[2*intersections] = surf_u;
+                           Event.m_b[2*intersections+1] = surf_v;
                            intersections++;
                        }
 
@@ -1460,23 +1460,23 @@
                        if (intersections == 0)
                            continue;
                        if (intersections == 1) {
-                           Event->m_type = ON_X_EVENT::csx_point;
-                           Event->m_A[1] = Event->m_A[0];
-                           Event->m_B[1] = Event->m_B[0];
-                           Event->m_a[1] = Event->m_a[0];
-                           Event->m_b[2] = Event->m_b[0];
-                           Event->m_b[3] = Event->m_b[1];
+                           Event.m_type = ON_X_EVENT::csx_point;
+                           Event.m_A[1] = Event.m_A[0];
+                           Event.m_B[1] = Event.m_B[0];
+                           Event.m_a[1] = Event.m_a[0];
+                           Event.m_b[2] = Event.m_b[0];
+                           Event.m_b[3] = Event.m_b[1];
                        } else {
-                           Event->m_type = ON_X_EVENT::csx_overlap;
-                           if (Event->m_a[0] > Event->m_a[1]) {
-                               std::swap(Event->m_A[0], Event->m_A[1]);
-                               std::swap(Event->m_B[0], Event->m_B[1]);
-                               std::swap(Event->m_a[0], Event->m_a[1]);
-                               std::swap(Event->m_b[0], Event->m_b[2]);
-                               std::swap(Event->m_b[1], Event->m_b[3]);
+                           Event.m_type = ON_X_EVENT::csx_overlap;
+                           if (Event.m_a[0] > Event.m_a[1]) {
+                               std::swap(Event.m_A[0], Event.m_A[1]);
+                               std::swap(Event.m_B[0], Event.m_B[1]);
+                               std::swap(Event.m_a[0], Event.m_a[1]);
+                               std::swap(Event.m_b[0], Event.m_b[2]);
+                               std::swap(Event.m_b[1], Event.m_b[3]);
                            }
                        }
-                       tmp_x.Append(*Event);
+                       tmp_x.Append(Event);
                        continue;
                    } else
                        continue;
@@ -1493,14 +1493,14 @@
                    if (!ON_Intersect(intersection, *(i->second->m_surf), 
px_event, intersection_tolerance, 0, 0, tree))
                        continue;
 
-                   ON_X_EVENT* Event = new ON_X_EVENT;
-                   Event->m_A[0] = Event->m_A[1] = intersection;
-                   Event->m_B[0] = Event->m_B[1] = px_event[0].m_B;
-                   Event->m_a[0] = Event->m_a[1] = 
i->first->m_t.ParameterAt(line_t);
-                   Event->m_b[0] = Event->m_b[2] = px_event[0].m_b.x;
-                   Event->m_b[1] = Event->m_b[3] = px_event[0].m_b.y;
-                   Event->m_type = ON_X_EVENT::csx_point;
-                   tmp_x.Append(*Event);
+                   ON_X_EVENT Event;
+                   Event.m_A[0] = Event.m_A[1] = intersection;
+                   Event.m_B[0] = Event.m_B[1] = px_event[0].m_B;
+                   Event.m_a[0] = Event.m_a[1] = 
i->first->m_t.ParameterAt(line_t);
+                   Event.m_b[0] = Event.m_b[2] = px_event[0].m_b.x;
+                   Event.m_b[1] = Event.m_b[3] = px_event[0].m_b.y;
+                   Event.m_type = ON_X_EVENT::csx_point;
+                   tmp_x.Append(Event);
                }
            }
        }
@@ -1538,14 +1538,14 @@
            double distance = pointA1.DistanceTo(pointB1);
            // Check the validity of the solution
            if (distance < intersection_tolerance) {
-               ON_X_EVENT *Event = new ON_X_EVENT;
-               Event->m_A[0] = Event->m_A[1] = pointA1;
-               Event->m_B[0] = Event->m_B[1] = pointB1;
-               Event->m_a[0] = Event->m_a[1] = t1;
-               Event->m_b[0] = Event->m_b[2] = u1;
-               Event->m_b[1] = Event->m_b[3] = v1;
-               Event->m_type = ON_X_EVENT::csx_point;
-               tmp_x.Append(*Event);
+               ON_X_EVENT Event;
+               Event.m_A[0] = Event.m_A[1] = pointA1;
+               Event.m_B[0] = Event.m_B[1] = pointB1;
+               Event.m_a[0] = Event.m_a[1] = t1;
+               Event.m_b[0] = Event.m_b[2] = u1;
+               Event.m_b[1] = Event.m_b[3] = v1;
+               Event.m_type = ON_X_EVENT::csx_point;
+               tmp_x.Append(Event);
            }
        } else {
            // Check overlap
@@ -1555,30 +1555,30 @@
 
            // Check the validity of the solution
            if (distance1 < intersection_tolerance && distance2 < 
intersection_tolerance) {
-               ON_X_EVENT *Event = new ON_X_EVENT;
+               ON_X_EVENT Event;
                // We make sure that m_a[0] <= m_a[1]
                if (t1 <= t2) {
-                   Event->m_A[0] = pointA1;
-                   Event->m_A[1] = pointA2;
-                   Event->m_B[0] = pointB1;
-                   Event->m_B[1] = pointB2;
-                   Event->m_a[0] = t1;
-                   Event->m_a[1] = t2;
-                   Event->m_b[0] = u1;
-                   Event->m_b[1] = v1;
-                   Event->m_b[2] = u2;
-                   Event->m_b[3] = v2;
+                   Event.m_A[0] = pointA1;
+                   Event.m_A[1] = pointA2;
+                   Event.m_B[0] = pointB1;
+                   Event.m_B[1] = pointB2;
+                   Event.m_a[0] = t1;
+                   Event.m_a[1] = t2;
+                   Event.m_b[0] = u1;
+                   Event.m_b[1] = v1;
+                   Event.m_b[2] = u2;
+                   Event.m_b[3] = v2;
                } else {
-                   Event->m_A[0] = pointA2;
-                   Event->m_A[1] = pointA1;
-                   Event->m_B[0] = pointB2;
-                   Event->m_B[1] = pointB1;
-                   Event->m_a[0] = t2;
-                   Event->m_a[1] = t1;
-                   Event->m_b[0] = u2;
-                   Event->m_b[1] = v2;
-                   Event->m_b[2] = u1;
-                   Event->m_b[3] = v1;
+                   Event.m_A[0] = pointA2;
+                   Event.m_A[1] = pointA1;
+                   Event.m_B[0] = pointB2;
+                   Event.m_B[1] = pointB1;
+                   Event.m_a[0] = t2;
+                   Event.m_a[1] = t1;
+                   Event.m_b[0] = u2;
+                   Event.m_b[1] = v2;
+                   Event.m_b[2] = u1;
+                   Event.m_b[3] = v1;
                }
                int j;
                for (j = 1; j < CSI_OVERLAP_TEST_POINTS; j++) {
@@ -1590,8 +1590,8 @@
                        break;
                }
                if (j == CSI_OVERLAP_TEST_POINTS) {
-                   Event->m_type = ON_X_EVENT::csx_overlap;
-                   tmp_x.Append(*Event);
+                   Event.m_type = ON_X_EVENT::csx_overlap;
+                   tmp_x.Append(Event);
                    continue;
                }
                // if j != CSI_OVERLAP_TEST_POINTS, two csx_point events may
@@ -1599,25 +1599,25 @@
            }
            if (distance1 < intersection_tolerance) {
                // in case that the second one was not correct
-               ON_X_EVENT *Event = new ON_X_EVENT;
-               Event->m_A[0] = Event->m_A[1] = pointA1;
-               Event->m_B[0] = Event->m_B[1] = pointB1;
-               Event->m_a[0] = Event->m_a[1] = t1;
-               Event->m_b[0] = Event->m_b[2] = u1;
-               Event->m_b[1] = Event->m_b[3] = v1;
-               Event->m_type = ON_X_EVENT::csx_point;
-               tmp_x.Append(*Event);
+               ON_X_EVENT Event;
+               Event.m_A[0] = Event.m_A[1] = pointA1;
+               Event.m_B[0] = Event.m_B[1] = pointB1;
+               Event.m_a[0] = Event.m_a[1] = t1;
+               Event.m_b[0] = Event.m_b[2] = u1;
+               Event.m_b[1] = Event.m_b[3] = v1;
+               Event.m_type = ON_X_EVENT::csx_point;
+               tmp_x.Append(Event);
            }
            if (distance2 < intersection_tolerance) {
                // in case that the first one was not correct
-               ON_X_EVENT *Event = new ON_X_EVENT;
-               Event->m_A[0] = Event->m_A[1] = pointA2;
-               Event->m_B[0] = Event->m_B[1] = pointB2;
-               Event->m_a[0] = Event->m_a[1] = t2;
-               Event->m_b[0] = Event->m_b[2] = u2;
-               Event->m_b[1] = Event->m_b[3] = v2;
-               Event->m_type = ON_X_EVENT::csx_point;
-               tmp_x.Append(*Event);
+               ON_X_EVENT Event;
+               Event.m_A[0] = Event.m_A[1] = pointA2;
+               Event.m_B[0] = Event.m_B[1] = pointB2;
+               Event.m_a[0] = Event.m_a[1] = t2;
+               Event.m_b[0] = Event.m_b[2] = u2;
+               Event.m_b[1] = Event.m_b[3] = v2;
+               Event.m_type = ON_X_EVENT::csx_point;
+               tmp_x.Append(Event);
            }
        }
     }

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


------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent 
caught up. So what steps can you take to put your SQL databases under 
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to