=bmesh= merge from trunk at r36529
[blender.git] / source / blender / editors / space_view3d / view3d_view.c
index b46c7236170c9ec2f15ef7be18ea1f165f102e91..124b7949658636272492a01fffd617c0596582d8 100644 (file)
@@ -740,11 +740,12 @@ void view3d_unproject(bglMats *mats, float out[3], const short x, const short y,
        out[2] = uz;
 }
 
-/* use above call to get projecting mat */
+/* use view3d_get_object_project_mat to get projecting mat */
 void view3d_project_float(ARegion *ar, const float vec[3], float adr[2], float mat[4][4])
 {
        float vec4[4];
        
+       VECCOPY(vec4, vec);
        adr[0]= IS_CLIPPED;
        copy_v3_v3(vec4, vec);
        vec4[3]= 1.0;
@@ -759,6 +760,26 @@ void view3d_project_float(ARegion *ar, const float vec[3], float adr[2], float m
        }
 }
 
+/* use view3d_get_object_project_mat to get projecting mat */
+void view3d_project_float_v3(ARegion *ar, float *vec, float *adr, float mat[4][4])
+{
+       float vec4[4];
+       
+       VECCOPY(vec4, vec);
+       adr[0]= IS_CLIPPED;
+       vec4[3]= 1.0;
+       
+       mul_m4_v4(mat, vec4);
+       
+       if( vec4[3]>FLT_EPSILON ) {
+               adr[0] = (float)(ar->winx/2.0f)+(ar->winx/2.0f)*vec4[0]/vec4[3];        
+               adr[1] = (float)(ar->winy/2.0f)+(ar->winy/2.0f)*vec4[1]/vec4[3];
+               adr[2] = vec4[2]/vec4[3];
+       } else {
+               adr[0] = adr[1] = adr[2] = 0.0f;
+       }
+}
+
 int boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb)
 {
        /* return 1: draw */