Mark Mine 22 years ago
parent
commit
e1738377d7
1 changed files with 11 additions and 1 deletions
  1. 11 1
      direct/src/directtools/DirectSelection.py

+ 11 - 1
direct/src/directtools/DirectSelection.py

@@ -488,6 +488,9 @@ class SelectionQueue(CollisionHandlerQueue):
         v.normalize()
         v.normalize()
         return v.dot(n) >= 0
         return v.dot(n) >= 0
 
 
+    def findNextCollisionEntry(self, skipFlags = SKIP_NONE):
+        return self.findCollisionEntry(skipFlags, self.index + 1)
+
     def findCollisionEntry(self, skipFlags = SKIP_NONE, startIndex = 0 ):
     def findCollisionEntry(self, skipFlags = SKIP_NONE, startIndex = 0 ):
         # Init self.index and self.entry
         # Init self.index and self.entry
         self.setCurrentIndex(-1)
         self.setCurrentIndex(-1)
@@ -658,10 +661,17 @@ class SelectionSphere(SelectionQueue):
         # If dot product of collision point surface normal and
         # If dot product of collision point surface normal and
         # ray from sphere origin to collision point is positive, we are
         # ray from sphere origin to collision point is positive, we are
         # looking at the backface of the polygon
         # looking at the backface of the polygon
+        ip = entry.getFromIntersectionPoint()
+        c = entry.getFrom().getCenter()
+        n = entry.getFromSurfaceNormal()
         v = Vec3(entry.getFromIntersectionPoint() -
         v = Vec3(entry.getFromIntersectionPoint() -
                  entry.getFrom().getCenter())
                  entry.getFrom().getCenter())
-        n = entry.getFromSurfaceNormal()
         # Normalize and check angle between to vectors
         # Normalize and check angle between to vectors
+        print '(%0.2f, %0.2f, %0.2f), (%0.2f, %0.2f, %0.2f), (%0.2f, %0.2f, %0.2f), %0.2f' %(ip[0],ip[1],ip[2],c[0],c[1],c[2],n[0],n[1],n[2], v.dot(n))
+        if v.length() < 0.05:
+            # Points almost on top of each other, 
+            # reject face (treat as backfacing)
+            return 1
         v.normalize()
         v.normalize()
         return v.dot(n) >= 0
         return v.dot(n) >= 0