[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56034] trunk/blender/source/blender: modify snapObjectsRayEx() to use a pointer to 'ray_dist' rather then passing the dist, this is to better support multiple calls to ray-cast where only closer distances are accepted .

Campbell Barton ideasman42 at gmail.com
Sun Apr 14 07:37:50 CEST 2013


Revision: 56034
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56034
Author:   campbellbarton
Date:     2013-04-14 05:37:43 +0000 (Sun, 14 Apr 2013)
Log Message:
-----------
modify snapObjectsRayEx() to use a pointer to 'ray_dist' rather then passing the dist, this is to better support multiple calls to ray-cast where only closer distances are accepted. 

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2013-04-14 00:40:54 UTC (rev 56033)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2013-04-14 05:37:43 UTC (rev 56034)
@@ -178,6 +178,7 @@
 } SnapMode;
 
 #define SNAP_MIN_DISTANCE 30
+#define TRANSFORM_DIST_MAX_RAY (FLT_MAX / 2.0f)
 
 bool peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
 bool peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
@@ -187,7 +188,7 @@
 bool snapObjectsEx(struct Scene *scene, struct Base *base_act, struct View3D *v3d, struct ARegion *ar, struct Object *obedit, short snap_mode,
                    const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode);
 bool snapObjectsRayEx(struct Scene *scene, struct Base *base_act, struct View3D *v3d, struct ARegion *ar, struct Object *obedit, short snap_mode,
-                      const float ray_start[3], const float ray_normal[3], const float ray_dist,
+                      const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
                       const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode);
 
 bool snapNodesTransform(struct TransInfo *t, const int mval[2], float *r_dist_px, float r_loc[2], char *r_node_border, SnapMode mode);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-04-14 00:40:54 UTC (rev 56033)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-04-14 05:37:43 UTC (rev 56034)
@@ -95,6 +95,7 @@
 {
 	float dist_px = 12;  /* snap dist */
 	float r_no_dummy[3];
+	float ray_dist = TRANSFORM_DIST_MAX_RAY;
 	bool ret;
 
 	Scene *scene = CTX_data_scene(C);
@@ -104,7 +105,7 @@
 
 	/* try snap edge, then face if it fails */
 	ret = snapObjectsRayEx(scene, NULL, v3d, ar, obedit, SCE_SNAP_MODE_FACE,
-	                       ray_start, ray_normal, v3d->far,
+	                       ray_start, ray_normal, &ray_dist,
 	                       NULL, &dist_px, r_co, r_no_dummy, SNAP_ALL);
 
 	return ret;

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2013-04-14 00:40:54 UTC (rev 56033)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2013-04-14 05:37:43 UTC (rev 56034)
@@ -84,7 +84,6 @@
 #define TRANSFORM_DIST_MAX_PX 1000.0f
 #define TRANSFORM_SNAP_MAX_PX 100.0f
 /* use half of flt-max so we can scale up without an exception */
-#define TRANSFORM_DIST_MAX_RAY (FLT_MAX / 2.0f)
 
 /********************* PROTOTYPES ***********************/
 
@@ -1550,17 +1549,16 @@
 }
 
 static bool snapObjectsRay(Scene *scene, short snap_mode, Base *base_act, View3D *v3d, ARegion *ar, Object *obedit,
-                           const float ray_start[3], const float ray_normal[3], const float ray_dist,
+                           const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
                            const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode)
 {
 	Base *base;
-	float depth = ray_dist;
 	bool retval = false;
 
 	if (mode == SNAP_ALL && obedit) {
 		Object *ob = obedit;
 
-		retval |= snapObject(scene, snap_mode, ar, ob, 1, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, &depth);
+		retval |= snapObject(scene, snap_mode, ar, ob, 1, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
 	}
 
 	/* Need an exception for particle edit because the base is flagged with BA_HAS_RECALC_DATA
@@ -1571,7 +1569,7 @@
 	base = base_act;
 	if (base && base->object && base->object->mode & OB_MODE_PARTICLE_EDIT) {
 		Object *ob = base->object;
-		retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, &depth);
+		retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
 	}
 
 	for (base = FIRSTBASE; base != NULL; base = base->next) {
@@ -1590,13 +1588,13 @@
 				for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
 					Object *dob = dupli_ob->ob;
 					
-					retval |= snapObject(scene, snap_mode, ar, dob, 0, dupli_ob->mat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, &depth);
+					retval |= snapObject(scene, snap_mode, ar, dob, 0, dupli_ob->mat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
 				}
 				
 				free_object_duplilist(lb);
 			}
 			
-			retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, &depth);
+			retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
 		}
 	}
 	
@@ -1606,11 +1604,12 @@
                         const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode)
 {
 	float ray_start[3], ray_normal[3];
+	float ray_dist = TRANSFORM_DIST_MAX_RAY;
 
 	ED_view3d_win_to_ray(ar, v3d, mval, ray_start, ray_normal);
 
 	return snapObjectsRay(scene, snap_mode, base_act, v3d, ar, obedit,
-	                      ray_start, ray_normal, TRANSFORM_DIST_MAX_RAY,
+	                      ray_start, ray_normal, &ray_dist,
 	                      mval, r_dist_px, r_loc, r_no, mode);
 }
 
@@ -1636,11 +1635,11 @@
 	                   mval, r_dist_px, r_loc, r_no, mode);
 }
 bool snapObjectsRayEx(Scene *scene, Base *base_act, View3D *v3d, ARegion *ar, Object *obedit, short snap_mode,
-                      const float ray_start[3], const float ray_normal[3], const float ray_dist,
+                      const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
                       const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode)
 {
 	return snapObjectsRay(scene, snap_mode, base_act, v3d, ar, obedit,
-	                      ray_start, ray_normal, ray_dist,
+	                      ray_start, ray_normal, r_ray_dist,
 	                      mval, r_dist_px, r_loc, r_no, mode);
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2013-04-14 00:40:54 UTC (rev 56033)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2013-04-14 05:37:43 UTC (rev 56034)
@@ -96,13 +96,13 @@
 {
 	float dummy_dist_px = 0;
 	float ray_nor[3];
-	float dist;
+	float ray_dist;
 
 	sub_v3_v3v3(ray_nor, ray_end, ray_start);
-	dist = normalize_v3(ray_nor);
+	ray_dist = normalize_v3(ray_nor);
 
 	if (snapObjectsRayEx(scene, NULL, NULL, NULL, NULL, SCE_SNAP_MODE_FACE,
-	                     ray_start, ray_nor, dist,
+	                     ray_start, ray_nor, &ray_dist,
 	                     NULL, &dummy_dist_px, r_location, r_normal, SNAP_ALL))
 	{
 		*r_success = true;




More information about the Bf-blender-cvs mailing list