[Bf-blender-cvs] [57d31171d0c] master: Object.raycast: more minor improvements ... - if it is to check a bool, let it be local; - removes gotos;

Germano Cavalcante noreply at git.blender.org
Sun Apr 16 23:50:21 CEST 2017


Commit: 57d31171d0c92358325869bdbcd3dbddbf2cdfd5
Author: Germano Cavalcante
Date:   Sun Apr 16 18:50:06 2017 -0300
Branches: master
https://developer.blender.org/rB57d31171d0c92358325869bdbcd3dbddbf2cdfd5

Object.raycast: more minor improvements ...
- if it is to check a bool, let it be local;
- removes gotos;

===================================================================

M	source/blender/makesrna/intern/rna_object_api.c

===================================================================

diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 55852139065..6b3f4dc7bcc 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -321,60 +321,51 @@ static void rna_Object_ray_cast(
         float origin[3], float direction[3], float distance,
         int *r_success, float r_location[3], float r_normal[3], int *r_index)
 {
+	bool success = false;
+
 	if (ob->derivedFinal == NULL) {
 		BKE_reportf(reports, RPT_ERROR, "Object '%s' has no mesh data to be used for ray casting", ob->id.name + 2);
 		return;
 	}
 
-	*r_success = false;
-
 	/* Test BoundBox first (efficiency) */
 	BoundBox *bb = BKE_object_boundbox_get(ob);
-	if (bb) {
-		float distmin, distmax;
-		if (isect_ray_aabb_v3_simple(origin, direction, bb->vec[0], bb->vec[6], &distmin, &distmax)) {
-			float dist = distmin >= 0 ? distmin : distmax;
-			if (dist > distance) {
-				goto finally;
-			}
-		}
-		else {
-			goto finally;
-		}
-	}
+	float distmin;
+	if (!bb || isect_ray_aabb_v3_simple(origin, direction, bb->vec[0], bb->vec[6], &distmin, NULL) && distmin <= distance) {
 
-	BVHTreeFromMesh treeData = {NULL};
+		BVHTreeFromMesh treeData = {NULL};
 
-	/* no need to managing allocation or freeing of the BVH data. this is generated and freed as needed */
-	bvhtree_from_mesh_looptri(&treeData, ob->derivedFinal, 0.0f, 4, 6);
+		/* no need to managing allocation or freeing of the BVH data. this is generated and freed as needed */
+		bvhtree_from_mesh_looptri(&treeData, ob->derivedFinal, 0.0f, 4, 6);
 
-	/* may fail if the mesh has no faces, in that case the ray-cast misses */
-	if (treeData.tree != NULL) {
-		BVHTreeRayHit hit;
+		/* may fail if the mesh has no faces, in that case the ray-cast misses */
+		if (treeData.tree != NULL) {
+			BVHTreeRayHit hit;
 
-		hit.index = -1;
-		hit.dist = distance;
-		
-		normalize_v3(direction);
+			hit.index = -1;
+			hit.dist = distance;
 
+			normalize_v3(direction);
 
-		if (BLI_bvhtree_ray_cast(treeData.tree, origin, direction, 0.0f, &hit,
-		                         treeData.raycast_callback, &treeData) != -1)
-		{
-			if (hit.dist <= distance) {
-				*r_success = true;
 
-				copy_v3_v3(r_location, hit.co);
-				copy_v3_v3(r_normal, hit.no);
-				*r_index = dm_looptri_to_poly_index(ob->derivedFinal, &treeData.looptri[hit.index]);
+			if (BLI_bvhtree_ray_cast(treeData.tree, origin, direction, 0.0f, &hit,
+			                         treeData.raycast_callback, &treeData) != -1)
+			{
+				if (hit.dist <= distance) {
+					*r_success = success = true;
+
+					copy_v3_v3(r_location, hit.co);
+					copy_v3_v3(r_normal, hit.no);
+					*r_index = dm_looptri_to_poly_index(ob->derivedFinal, &treeData.looptri[hit.index]);
+				}
 			}
-		}
 
-		free_bvhtree_from_mesh(&treeData);
+			free_bvhtree_from_mesh(&treeData);
+		}
 	}
+	if (success == false) {
+		*r_success = false;
 
-	if (*r_success == false) {
-finally:
 		zero_v3(r_location);
 		zero_v3(r_normal);
 		*r_index = -1;




More information about the Bf-blender-cvs mailing list