c4d.utils.GeRayCollider¶
-
class
c4d.utils.
GeRayCollider
¶ Evaluates intersections between a ray and a polygon object. The ray is defined by a point, a ray and length.
In the following example a ray intersects a cube:
Methods Signatures
GeRayCollider.__init__(self) |
|
GeRayCollider.Init(self, goal[, force]) |
Initializes the ray collider with the object specified by goal. |
GeRayCollider.Intersect(self, ray_p, ray_dir, ...) |
Checks if the line segment specified by ray_p to ray_p + ray_dir*ray_length intersects the object. |
GeRayCollider.GetIntersectionCount(self) |
Returns the number of intersections found by Intersect() . |
GeRayCollider.GetIntersection(self, number) |
Retrieves the intersection information, found by GeRayCollider.Intersect() , by index: |
GeRayCollider.GetNearestIntersection(self) |
Retrieves the intersection, found by Intersect() , closest to the start of the ray. |
Methods Documentation
-
GeRayCollider.
__init__
(self)¶ Return type: c4d.utils.GeRayCollider Returns: A new ray collider.
-
GeRayCollider.
Init
(self, goal, force=False)¶ Initializes the ray collider with the object specified by goal.
Parameters: - goal (c4d.PolygonObject) – The object to check for intersections. The object is copied.
- force (bool) – If False then Cinema checks if the passed object’s
C4DAtom.GetDirty(c4d.DIRTYFLAGS_DATA)
is unchanged. If yes, it does nothing and returns True.If True it always rebuilds the cache.
Return type: bool
Returns: True if successful, otherwise False.
-
GeRayCollider.
Intersect
(self, ray_p, ray_dir, length, only_test=False)¶ Checks if the line segment specified by ray_p to ray_p + ray_dir*ray_length intersects the object.
Parameters: - ray_p (c4d.Vector) – Start point of the ray in object coordinates
- ray_dir (c4d.Vector) – Ray direction in object coordinates.
- ray_length (number) – Ray length.
- only_test (bool) – If this is True no information about the intersections are stored, so only the return value can be used to tell if there were intersections or not.
Return type: bool
Returns: True if there was in intersection, otherwise False
-
GeRayCollider.
GetIntersectionCount
(self)¶ Returns the number of intersections found by
Intersect()
.Return type: int Returns: Number of intersections.
-
GeRayCollider.
GetIntersection
(self, number)¶ Retrieves the intersection information, found by
GeRayCollider.Intersect()
, by index:import c4d rc = c4d.utils.GeRayCollider() intersection = rc.GetIntersection(id) intersection["face_id"] # The polygon index, int intersection["tri_face_id"] # If first half of quad or triangle face_id + 1, else -(face_id + 1), int intersection["hitpos"] # Position of the intersection, c4d.Vector intersection["distance"] # Distance to the intersection, float intersection["s_normal"] # Same as f_normal (reserved for phong normal at the intersection (Not normalized)), c4d.Vector intersection["f_normal"] # Face normal (Not normalized), c4d.Vector intersection["barrycoords"] # Barycentric coordinates of the intersection (x = u, y = v, z = d), c4d.Vector intersection["backface"] # True if the intersected face's normal points away from the camera, otherwise False, bool
Parameters: number (int) – Intersection index. Raises: IndexError – If intersection index is out of range : 0<=number< GetIntersectionCount()
.Return type: dict Returns: The intersection information.
-
GeRayCollider.
GetNearestIntersection
(self)¶ Retrieves the intersection, found by
Intersect()
, closest to the start of the ray.Return type: dict Returns: The nearest intersection or None if there was no intersection.