- grease pencil drawing on the surface of objects (only when enable face snap & proje...
[blender.git] / source / blender / editors / space_view3d / view3d_edit.c
index 2444c461bd09eba48f9889ade6698f93470d9558..9737e0cb167bc4331832446136d87be1958e0d07 100644 (file)
@@ -2205,7 +2205,53 @@ int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mou
        return 1;
 }
 
+int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d) //, float *autodist )
+{
+       RegionView3D *rv3d= ar->regiondata;
+
+       /* Get Z Depths, needed for perspective, nice for ortho */
+       draw_depth(scene, ar, v3d, NULL);
+
+       /* force updating */
+       if (rv3d->depths) {
+               rv3d->depths->damaged = 1;
+       }
+
+       view3d_update_depths(ar, v3d);
+       return 1;
+}
+
+// no 4x4 sampling, run view_autodist_init first
+int view_autodist_simple(ARegion *ar, short *mval, float mouse_worldloc[3] ) //, float *autodist )
+{
+       RegionView3D *rv3d= ar->regiondata;
+       bglMats mats; /* ZBuffer depth vars, could cache? */
+       float depth;
+       double cent[2],  p[3];
+
+       if (mval[0] < 0) return 0;
+       if (mval[1] < 0) return 0;
+       if (mval[0] >= rv3d->depths->w) return 0;
+       if (mval[1] >= rv3d->depths->h) return 0;
+
+       /* Get Z Depths, needed for perspective, nice for ortho */
+       bgl_get_mats(&mats);
+       depth= rv3d->depths->depths[mval[1]*rv3d->depths->w+mval[0]];
 
+       if (depth==MAXFLOAT)
+               return 0;
+
+       cent[0] = (double)mval[0];
+       cent[1] = (double)mval[1];
+
+       if (!gluUnProject(cent[0], cent[1], depth, mats.modelview, mats.projection, (GLint *)mats.viewport, &p[0], &p[1], &p[2]))
+               return 0;
+
+       mouse_worldloc[0] = (float)p[0];
+       mouse_worldloc[1] = (float)p[1];
+       mouse_worldloc[2] = (float)p[2];
+       return 1;
+}
 
 /* ********************* NDOF ************************ */
 /* note: this code is confusing and unclear... (ton) */