]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/bobtoolz/DWinding.cpp
Revert partially (auto) "reformat code! now the code is only ugly on the *inside*"
[xonotic/netradiant.git] / contrib / bobtoolz / DWinding.cpp
index 7f42bed9baecca0f4ad01465c819b58965c72659..e4dc026dddf867a42a14ff66870dbd759b4ea0de 100644 (file)
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////
 
-DWinding::DWinding()
-{
-    numpoints = 0;
-    p = NULL;
+DWinding::DWinding(){
+       numpoints = 0;
+       p = NULL;
 }
 
-DWinding::~DWinding()
-{
-    if (p) {
-        delete[] p;
-    }
+DWinding::~DWinding(){
+       if ( p ) {
+               delete[] p;
+       }
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -51,440 +49,447 @@ DWinding::~DWinding()
 
 const int BOGUS_RANGE = 4096;
 
-void DWinding::AllocWinding(int points)
-{
-    numpoints = points;
-    if (p) {
-        delete[] p;
-    }
-    p = new vec3_t[points];
+void DWinding::AllocWinding( int points ){
+       numpoints = points;
+       if ( p ) {
+               delete[] p;
+       }
+       p = new vec3_t[points];
 }
 
-vec_t DWinding::WindingArea()
-{
-    vec3_t d1, d2, cross;
-    vec_t total;
+vec_t DWinding::WindingArea(){
+       vec3_t d1, d2, cross;
+       vec_t total;
 
-    total = 0;
-    for (int i = 2; i < numpoints; i++) {
-        VectorSubtract(p[i - 1], p[0], d1);
-        VectorSubtract(p[i], p[0], d2);
+       total = 0;
+       for ( int i = 2; i < numpoints ; i++ )
+       {
+               VectorSubtract( p[i - 1], p[0], d1 );
+               VectorSubtract( p[i], p[0], d2 );
 
-        CrossProduct(d1, d2, cross);
+               CrossProduct( d1, d2, cross );
 
-        total += 0.5f * VectorLength(cross);
-    }
+               total += 0.5f * VectorLength( cross );
+       }
 
-    return total;
+       return total;
 }
 
-void DWinding::RemoveColinearPoints()
-{
-    vec3_t p2[MAX_POINTS_ON_WINDING];
-
-    int nump = 0;
-    for (int i = 0; i < numpoints; i++) {
-        int j = (i + 1) % numpoints;
-        int k = (i + numpoints - 1) % numpoints;
-
-        vec3_t v1, v2;
-        VectorSubtract(p[j], p[i], v1);
-        VectorSubtract(p[i], p[k], v2);
-        VectorNormalize(v1, v1);
-        VectorNormalize(v2, v2);
-
-        if (DotProduct(v1, v2) < 0.999) {
-            VectorCopy(p[i], p2[nump]);
-            nump++;
-        }
-    }
-
-    if (nump == numpoints) {
-        return;
-    }
-
-    AllocWinding(nump);
-    memcpy(p, p2, nump * sizeof(vec3_t));
+void DWinding::RemoveColinearPoints(){
+       vec3_t p2[MAX_POINTS_ON_WINDING];
+
+       int nump = 0;
+       for ( int i = 0; i < numpoints; i++ )
+       {
+               int j = ( i + 1 ) % numpoints;
+               int k = ( i + numpoints - 1 ) % numpoints;
+
+               vec3_t v1, v2;
+               VectorSubtract( p[j], p[i], v1 );
+               VectorSubtract( p[i], p[k], v2 );
+               VectorNormalize( v1, v1 );
+               VectorNormalize( v2, v2 );
+
+               if ( DotProduct( v1, v2 ) < 0.999 ) {
+                       VectorCopy( p[i], p2[nump] );
+                       nump++;
+               }
+       }
+
+       if ( nump == numpoints ) {
+               return;
+       }
+
+       AllocWinding( nump );
+       memcpy( p, p2, nump * sizeof( vec3_t ) );
 }
 
-DPlane *DWinding::WindingPlane()
-{
-    DPlane *newPlane = new DPlane(p[0], p[1], p[2], NULL);
-    return newPlane;
+DPlane* DWinding::WindingPlane(){
+       DPlane* newPlane = new DPlane( p[0], p[1], p[2], NULL );
+       return newPlane;
 }
 
-void DWinding::WindingBounds(vec3_t mins, vec3_t maxs)
-{
-    if (numpoints == 0) {
-        return;
-    }
-
-    VectorCopy(mins, p[0]);
-    VectorCopy(maxs, p[0]);
-
-    for (int i = 1; i < numpoints; i++) {
-        for (int j = 0; j < 3; j++) {
-            vec_t v = p[i][j];
-            if (v < mins[j]) {
-                mins[j] = v;
-            }
-            if (v > maxs[j]) {
-                maxs[j] = v;
-            }
-        }
-    }
+void DWinding::WindingBounds( vec3_t mins, vec3_t maxs ){
+       if ( numpoints == 0 ) {
+               return;
+       }
+
+       VectorCopy( mins, p[0] );
+       VectorCopy( maxs, p[0] );
+
+       for ( int i = 1; i < numpoints ; i++ )
+       {
+               for ( int j = 0; j < 3; j++ )
+               {
+                       vec_t v = p[i][j];
+                       if ( v < mins[j] ) {
+                               mins[j] = v;
+                       }
+                       if ( v > maxs[j] ) {
+                               maxs[j] = v;
+                       }
+               }
+       }
 }
 
-void DWinding::WindingCentre(vec3_t centre)
-{
-    VectorCopy(vec3_origin, centre);
-    for (int i = 0; i < numpoints; i++)
-        VectorAdd(p[i], centre, centre);
+void DWinding::WindingCentre( vec3_t centre ){
+       VectorCopy( vec3_origin, centre );
+       for ( int i = 0; i < numpoints; i++ )
+               VectorAdd( p[i], centre, centre );
 
-    float scale = 1.0f / numpoints;
-    VectorScale(centre, scale, centre);
+       float scale = 1.0f / numpoints;
+       VectorScale( centre, scale, centre );
 }
 
 
-DWinding *DWinding::CopyWinding()
-{
-    DWinding *c = new DWinding;
-    c->AllocWinding(numpoints);
-    memcpy(c->p, p, numpoints * sizeof(vec3_t));
-    return c;
+DWinding* DWinding::CopyWinding(){
+       DWinding* c = new DWinding;
+       c->AllocWinding( numpoints );
+       memcpy( c->p, p, numpoints * sizeof( vec3_t ) );
+       return c;
 }
 
 
-int DWinding::WindingOnPlaneSide(vec3_t normal, vec_t dist)
-{
-    bool front = false;
-    bool back = false;
-
-    for (int i = 0; i < numpoints; i++) {
-        vec_t d = DotProduct(p[i], normal) - dist;
-        if (d < -ON_EPSILON) {
-            if (front) {
-                return SIDE_CROSS;
-            }
-            back = true;
-            continue;
-        }
-        if (d > ON_EPSILON) {
-            if (back) {
-                return SIDE_CROSS;
-            }
-            front = true;
-            continue;
-        }
-    }
-
-    if (back) {
-        return SIDE_BACK;
-    }
-    if (front) {
-        return SIDE_FRONT;
-    }
-    return SIDE_ON;
+int DWinding::WindingOnPlaneSide( vec3_t normal, vec_t dist ){
+       bool front = false;
+       bool back = false;
+
+       for ( int i = 0; i < numpoints; i++ )
+       {
+               vec_t d = DotProduct( p[i], normal ) - dist;
+               if ( d < -ON_EPSILON ) {
+                       if ( front ) {
+                               return SIDE_CROSS;
+                       }
+                       back = true;
+                       continue;
+               }
+               if ( d > ON_EPSILON ) {
+                       if ( back ) {
+                               return SIDE_CROSS;
+                       }
+                       front = true;
+                       continue;
+               }
+       }
+
+       if ( back ) {
+               return SIDE_BACK;
+       }
+       if ( front ) {
+               return SIDE_FRONT;
+       }
+       return SIDE_ON;
 }
 
-void DWinding::CheckWinding()
-{
-    vec_t *p1, *p2;
-    vec_t edgedist;
-    vec3_t dir, edgenormal;
-
-    if (numpoints < 3) {
-        globalOutputStream() << "CheckWinding: " << numpoints << " points\n";
-    }
-
-    vec_t area = WindingArea();
-    if (area < 1) {
-        globalOutputStream() << "CheckWinding: " << area << " area\n";
-    }
-
-    DPlane *wPlane = WindingPlane();
-    int i;
-    for (i = 0; i < numpoints; i++) {
-        p1 = p[i];
-
-        int j;
-        for (j = 0; j < 3; j++) {
-            if (p1[j] > BOGUS_RANGE || p1[j] < -BOGUS_RANGE) {
-                globalOutputStream() << "CheckFace: BOGUS_RANGE: " << p1[j] << "\n";
-            }
-        }
-
-        j = i + 1 == numpoints ? 0 : i + 1;
-
-        // check the point is on the face plane
-        vec_t d = DotProduct(p1, wPlane->normal) - wPlane->_d;
-        if (d < -ON_EPSILON || d > ON_EPSILON) {
-            globalOutputStream() << "CheckWinding: point off plane\n";
-        }
-
-        // check the edge isnt degenerate
-        p2 = p[j];
-        VectorSubtract(p2, p1, dir);
-
-        if (VectorLength(dir) < ON_EPSILON) {
-            globalOutputStream() << "CheckWinding: degenerate edge\n";
-        }
-
-        CrossProduct(wPlane->normal, dir, edgenormal);
-        VectorNormalize(edgenormal, edgenormal);
-        edgedist = DotProduct(p1, edgenormal);
-
-        // all other points must be on front side
-        for (j = 0; j < numpoints; j++) {
-            if (j == i) {
-                continue;
-            }
-
-            d = DotProduct(p[j], edgenormal);
-            if (d > (edgedist + ON_EPSILON)) {
-                globalOutputStream() << "CheckWinding: non-convex\n";
-            }
-        }
-    }
-
-    delete wPlane;
+void DWinding::CheckWinding(){
+       vec_t   *p1, *p2;
+       vec_t edgedist;
+       vec3_t dir, edgenormal;
+
+       if ( numpoints < 3 ) {
+               globalOutputStream() << "CheckWinding: " << numpoints << " points\n";
+       }
+
+       vec_t area = WindingArea();
+       if ( area < 1 ) {
+               globalOutputStream() << "CheckWinding: " << area << " area\n";
+       }
+
+       DPlane* wPlane = WindingPlane();
+       int i;
+       for ( i = 0; i < numpoints; i++ )
+       {
+               p1 = p[i];
+
+               int j;
+               for ( j = 0; j < 3; j++ )
+                       if ( p1[j] > BOGUS_RANGE || p1[j] < -BOGUS_RANGE ) {
+                               globalOutputStream() << "CheckFace: BOGUS_RANGE: " << p1[j] << "\n";
+                       }
+
+               j = i + 1 == numpoints ? 0 : i + 1;
+
+               // check the point is on the face plane
+               vec_t d = DotProduct( p1, wPlane->normal ) - wPlane->_d;
+               if ( d < -ON_EPSILON || d > ON_EPSILON ) {
+                       globalOutputStream() << "CheckWinding: point off plane\n";
+               }
+
+               // check the edge isnt degenerate
+               p2 = p[j];
+               VectorSubtract( p2, p1, dir );
+
+               if ( VectorLength( dir ) < ON_EPSILON ) {
+                       globalOutputStream() << "CheckWinding: degenerate edge\n";
+               }
+
+               CrossProduct( wPlane->normal, dir, edgenormal );
+               VectorNormalize( edgenormal, edgenormal );
+               edgedist = DotProduct( p1, edgenormal );
+
+               // all other points must be on front side
+               for ( j = 0 ; j < numpoints ; j++ )
+               {
+                       if ( j == i ) {
+                               continue;
+                       }
+
+                       d = DotProduct( p[j], edgenormal );
+                       if ( d > ( edgedist + ON_EPSILON ) ) {
+                               globalOutputStream() << "CheckWinding: non-convex\n";
+                       }
+               }
+       }
+
+       delete wPlane;
 }
 
-DWinding *DWinding::ReverseWinding()
-{
-    DWinding *c = new DWinding;
-    c->AllocWinding(numpoints);
+DWinding* DWinding::ReverseWinding(){
+       DWinding* c = new DWinding;
+       c->AllocWinding( numpoints );
 
-    for (int i = 0; i < numpoints; i++)
-        VectorCopy(p[numpoints - 1 - i], c->p[i]);
+       for ( int i = 0; i < numpoints ; i++ )
+               VectorCopy( p[numpoints - 1 - i], c->p[i] );
 
-    return c;
+       return c;
 }
 
-bool DWinding::ChopWindingInPlace(DPlane *chopPlane, vec_t epsilon)
-{
-    vec_t dists[MAX_POINTS_ON_WINDING + 4];
-    int sides[MAX_POINTS_ON_WINDING + 4];
-    int counts[3];
-    vec_t *p1, *p2;
-    vec3_t mid;
+bool DWinding::ChopWindingInPlace( DPlane* chopPlane, vec_t epsilon ){
+       vec_t dists[MAX_POINTS_ON_WINDING + 4];
+       int sides[MAX_POINTS_ON_WINDING + 4];
+       int counts[3];
+       vec_t   *p1, *p2;
+       vec3_t mid;
 
-    counts[0] = counts[1] = counts[2] = 0;
+       counts[0] = counts[1] = counts[2] = 0;
 
 // determine sides for each point
-    int i;
-    for (i = 0; i < numpoints; i++) {
-        vec_t dot = DotProduct(p[i], chopPlane->normal);
-        dot -= chopPlane->_d;
-        dists[i] = dot;
-
-        if (dot > epsilon) {
-            sides[i] = SIDE_FRONT;
-        } else if (dot < -epsilon) {
-            sides[i] = SIDE_BACK;
-        } else {
-            sides[i] = SIDE_ON;
-        }
-
-        counts[sides[i]]++;
-    }
-    sides[i] = sides[0];
-    dists[i] = dists[0];
-
-    if (!counts[0]) {
-        delete this;
-        return false;
-    }
-
-    if (!counts[1]) {
-        return true;
-    }
-
-    int maxpts = numpoints + 4;   // cant use counts[0]+2 because
-    // of fp grouping errors
-
-    DWinding *f = new DWinding;
-    f->AllocWinding(maxpts);
-    f->numpoints = 0;
-
-    for (i = 0; i < numpoints; i++) {
-        p1 = p[i];
-
-        if (sides[i] == SIDE_ON) {
-            VectorCopy(p1, f->p[f->numpoints]);
-            f->numpoints++;
-            continue;
-        }
-
-        if (sides[i] == SIDE_FRONT) {
-            VectorCopy(p1, f->p[f->numpoints]);
-            f->numpoints++;
-        }
-
-        if (sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i]) {
-            continue;
-        }
-
-        // generate a split point
-        p2 = p[(i + 1) % numpoints];
-
-        vec_t dot = dists[i] / (dists[i] - dists[i + 1]);
-        for (int j = 0; j < 3; j++) {
-            if (chopPlane->normal[j] == 1) {
-                mid[j] = chopPlane->_d;
-            } else if (chopPlane->normal[j] == -1) {
-                mid[j] = -chopPlane->_d;
-            } else {
-                mid[j] = p1[j] + dot * (p2[j] - p1[j]);
-            }
-        }
-
-        VectorCopy(mid, f->p[f->numpoints]);
-        f->numpoints++;
-    }
-
-    if (f->numpoints > maxpts) {
-        globalOutputStream() << "ClipWinding: points exceeded estimate\n";
-    }
-    if (f->numpoints > MAX_POINTS_ON_WINDING) {
-        globalOutputStream() << "ClipWinding: MAX_POINTS_ON_WINDING\n";
-    }
-
-    delete[] p;
-    p = f->p;
-    f->p = NULL;
-    delete f;
-    return true;
+       int i;
+       for ( i = 0; i < numpoints; i++ )
+       {
+               vec_t dot = DotProduct( p[i], chopPlane->normal );
+               dot -= chopPlane->_d;
+               dists[i] = dot;
+
+               if ( dot > epsilon ) {
+                       sides[i] = SIDE_FRONT;
+               }
+               else if ( dot < -epsilon ) {
+                       sides[i] = SIDE_BACK;
+               }
+               else{
+                       sides[i] = SIDE_ON;
+               }
+
+               counts[sides[i]]++;
+       }
+       sides[i] = sides[0];
+       dists[i] = dists[0];
+
+       if ( !counts[0] ) {
+               delete this;
+               return false;
+       }
+
+       if ( !counts[1] ) {
+               return true;
+       }
+
+       int maxpts = numpoints + 4;   // cant use counts[0]+2 because
+                                     // of fp grouping errors
+
+       DWinding* f = new DWinding;
+       f->AllocWinding( maxpts );
+       f->numpoints = 0;
+
+       for ( i = 0; i < numpoints; i++ )
+       {
+               p1 = p[i];
+
+               if ( sides[i] == SIDE_ON ) {
+                       VectorCopy( p1, f->p[f->numpoints] );
+                       f->numpoints++;
+                       continue;
+               }
+
+               if ( sides[i] == SIDE_FRONT ) {
+                       VectorCopy( p1, f->p[f->numpoints] );
+                       f->numpoints++;
+               }
+
+               if ( sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i] ) {
+                       continue;
+               }
+
+               // generate a split point
+               p2 = p[( i + 1 ) % numpoints];
+
+               vec_t dot = dists[i] / ( dists[i] - dists[i + 1] );
+               for ( int j = 0; j < 3; j++ )
+               {
+                       if ( chopPlane->normal[j] == 1 ) {
+                               mid[j] = chopPlane->_d;
+                       }
+                       else if ( chopPlane->normal[j] == -1 ) {
+                               mid[j] = -chopPlane->_d;
+                       }
+                       else{
+                               mid[j] = p1[j] + dot * ( p2[j] - p1[j] );
+                       }
+               }
+
+               VectorCopy( mid, f->p[f->numpoints] );
+               f->numpoints++;
+       }
+
+       if ( f->numpoints > maxpts ) {
+               globalOutputStream() << "ClipWinding: points exceeded estimate\n";
+       }
+       if ( f->numpoints > MAX_POINTS_ON_WINDING ) {
+               globalOutputStream() << "ClipWinding: MAX_POINTS_ON_WINDING\n";
+       }
+
+       delete[] p;
+       p = f->p;
+       f->p = NULL;
+       delete f;
+       return true;
 }
 
-void DWinding::ClipWindingEpsilon(DPlane *chopPlane, vec_t epsilon, DWinding **front, DWinding **back)
-{
-    vec_t dists[MAX_POINTS_ON_WINDING + 4];
-    int sides[MAX_POINTS_ON_WINDING + 4];
-    int counts[3];
-    vec_t *p1, *p2;
-    vec3_t mid;
+void DWinding::ClipWindingEpsilon( DPlane* chopPlane, vec_t epsilon, DWinding **front, DWinding **back ){
+       vec_t dists[MAX_POINTS_ON_WINDING + 4];
+       int sides[MAX_POINTS_ON_WINDING + 4];
+       int counts[3];
+       vec_t   *p1, *p2;
+       vec3_t mid;
 
-    counts[0] = counts[1] = counts[2] = 0;
+       counts[0] = counts[1] = counts[2] = 0;
 
 // determine sides for each point
-    int i;
-    for (i = 0; i < numpoints; i++) {
-        vec_t dot = -chopPlane->DistanceToPoint(p[i]);
-        dists[i] = dot;
-
-        if (dot > epsilon) {
-            sides[i] = SIDE_FRONT;
-        } else if (dot < -epsilon) {
-            sides[i] = SIDE_BACK;
-        } else {
-            sides[i] = SIDE_ON;
-        }
-
-        counts[sides[i]]++;
-    }
-    sides[i] = sides[0];
-    dists[i] = dists[0];
-
-    *front = *back = NULL;
-
-    if (!counts[0]) {
-        *back = CopyWinding();
-        return;
-    }
-    if (!counts[1]) {
-        *front = CopyWinding();
-        return;
-    }
-
-    int maxpts = numpoints + 4;   // cant use counts[0]+2 because
-    // of fp grouping errors
-
-    DWinding *f = new DWinding;
-    DWinding *b = new DWinding;
-
-    f->AllocWinding(maxpts);
-    f->numpoints = 0;
-
-    b->AllocWinding(maxpts);
-    b->numpoints = 0;
-
-    *front = f;
-    *back = b;
-
-    for (i = 0; i < numpoints; i++) {
-        p1 = p[i];
-
-        if (sides[i] == SIDE_ON) {
-            VectorCopy(p1, f->p[f->numpoints]);
-            f->numpoints++;
-            VectorCopy(p1, b->p[b->numpoints]);
-            b->numpoints++;
-            continue;
-        }
-
-        if (sides[i] == SIDE_FRONT) {
-            VectorCopy(p1, f->p[f->numpoints]);
-            f->numpoints++;
-        }
-        if (sides[i] == SIDE_BACK) {
-            VectorCopy(p1, b->p[b->numpoints]);
-            b->numpoints++;
-        }
-
-        if (sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i]) {
-            continue;
-        }
-
-        // generate a split point
-        p2 = p[(i + 1) % numpoints];
-
-        vec_t dot = dists[i] / (dists[i] - dists[i + 1]);
-        for (int j = 0; j < 3; j++) {
-            if (chopPlane->normal[j] == 1) {
-                mid[j] = chopPlane->_d;
-            } else if (chopPlane->normal[j] == -1) {
-                mid[j] = -chopPlane->_d;
-            } else {
-                mid[j] = p1[j] + dot * (p2[j] - p1[j]);
-            }
-        }
-
-        VectorCopy(mid, f->p[f->numpoints]);
-        f->numpoints++;
-        VectorCopy(mid, b->p[b->numpoints]);
-        b->numpoints++;
-    }
-
-    if (f->numpoints > maxpts || b->numpoints > maxpts) {
-        globalOutputStream() << "ClipWinding: points exceeded estimate\n";
-    }
-    if (f->numpoints > MAX_POINTS_ON_WINDING || b->numpoints > MAX_POINTS_ON_WINDING) {
-        globalOutputStream() << "ClipWinding: MAX_POINTS_ON_WINDING\n";
-    }
+       int i;
+       for ( i = 0; i < numpoints; i++ )
+       {
+               vec_t dot = -chopPlane->DistanceToPoint( p[i] );
+               dists[i] = dot;
+
+               if ( dot > epsilon ) {
+                       sides[i] = SIDE_FRONT;
+               }
+               else if ( dot < -epsilon ) {
+                       sides[i] = SIDE_BACK;
+               }
+               else{
+                       sides[i] = SIDE_ON;
+               }
+
+               counts[sides[i]]++;
+       }
+       sides[i] = sides[0];
+       dists[i] = dists[0];
+
+       *front = *back = NULL;
+
+       if ( !counts[0] ) {
+               *back = CopyWinding();
+               return;
+       }
+       if ( !counts[1] ) {
+               *front = CopyWinding();
+               return;
+       }
+
+       int maxpts = numpoints + 4;   // cant use counts[0]+2 because
+                                     // of fp grouping errors
+
+       DWinding* f = new DWinding;
+       DWinding* b = new DWinding;
+
+       f->AllocWinding( maxpts );
+       f->numpoints = 0;
+
+       b->AllocWinding( maxpts );
+       b->numpoints = 0;
+
+       *front = f;
+       *back = b;
+
+       for ( i = 0; i < numpoints ; i++ )
+       {
+               p1 = p[i];
+
+               if ( sides[i] == SIDE_ON ) {
+                       VectorCopy( p1, f->p[f->numpoints] );
+                       f->numpoints++;
+                       VectorCopy( p1, b->p[b->numpoints] );
+                       b->numpoints++;
+                       continue;
+               }
+
+               if ( sides[i] == SIDE_FRONT ) {
+                       VectorCopy( p1, f->p[f->numpoints] );
+                       f->numpoints++;
+               }
+               if ( sides[i] == SIDE_BACK ) {
+                       VectorCopy( p1, b->p[b->numpoints] );
+                       b->numpoints++;
+               }
+
+               if ( sides[i + 1] == SIDE_ON || sides[i + 1] == sides[i] ) {
+                       continue;
+               }
+
+               // generate a split point
+               p2 = p[( i + 1 ) % numpoints];
+
+               vec_t dot = dists[i] / ( dists[i] - dists[i + 1] );
+               for ( int j = 0; j < 3; j++ )
+               {
+                       if ( chopPlane->normal[j] == 1 ) {
+                               mid[j] = chopPlane->_d;
+                       }
+                       else if ( chopPlane->normal[j] == -1 ) {
+                               mid[j] = -chopPlane->_d;
+                       }
+                       else{
+                               mid[j] = p1[j] + dot * ( p2[j] - p1[j] );
+                       }
+               }
+
+               VectorCopy( mid, f->p[f->numpoints] );
+               f->numpoints++;
+               VectorCopy( mid, b->p[b->numpoints] );
+               b->numpoints++;
+       }
+
+       if ( f->numpoints > maxpts || b->numpoints > maxpts ) {
+               globalOutputStream() << "ClipWinding: points exceeded estimate\n";
+       }
+       if ( f->numpoints > MAX_POINTS_ON_WINDING || b->numpoints > MAX_POINTS_ON_WINDING ) {
+               globalOutputStream() << "ClipWinding: MAX_POINTS_ON_WINDING\n";
+       }
 }
 
-bool DWinding::ChopWinding(DPlane *chopPlane)
-{
-    DWinding *f, *b;
+bool DWinding::ChopWinding( DPlane* chopPlane ){
+       DWinding *f, *b;
 
-    ClipWindingEpsilon(chopPlane, (float) ON_EPSILON, &f, &b);
+       ClipWindingEpsilon( chopPlane, (float)ON_EPSILON, &f, &b );
 
-    if (b) {
-        delete (b);
-    }
+       if ( b ) {
+               delete ( b );
+       }
 
 
-    if (!f) {
-        delete this;
-        return false;
-    }
+       if ( !f ) {
+               delete this;
+               return false;
+       }
 
-    delete[] p;
-    p = f->p;
-    f->p = NULL;
-    numpoints = f->numpoints;
-    delete f;
+       delete[] p;
+       p = f->p;
+       f->p = NULL;
+       numpoints = f->numpoints;
+       delete f;
 
-    return true;
+       return true;
 }