[Bf-blender-cvs] [9dafc8ee2c5] master: Snap: add support for meshes generated from other types of objects.

mano-wii noreply at git.blender.org
Wed May 29 18:53:40 CEST 2019


Commit: 9dafc8ee2c542949e87e5e81b0ba5088bbd46af9
Author: mano-wii
Date:   Wed May 29 13:17:29 2019 -0300
Branches: master
https://developer.blender.org/rB9dafc8ee2c542949e87e5e81b0ba5088bbd46af9

Snap: add support for meshes generated from other types of objects.

Curves with modifiers generate a mesh internally.
These can be used for raycasting.

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

M	source/blender/editors/transform/transform_snap_object.c

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

diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index f81d01ca754..0043a424208 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -712,22 +712,21 @@ static bool raycastObj(SnapObjectContext *sctx,
                        ListBase *r_hit_list)
 {
   bool retval = false;
+  if (use_occlusion_test) {
+    if (use_obedit && sctx->use_v3d && XRAY_ENABLED(sctx->v3d_data.v3d)) {
+      /* Use of occlude geometry in editing mode disabled. */
+      return false;
+    }
+
+    if (ELEM(ob->dt, OB_BOUNDBOX, OB_WIRE)) {
+      /* Do not hit objects that are in wire or bounding box
+       * display mode. */
+      return false;
+    }
+  }
 
   switch (ob->type) {
     case OB_MESH: {
-      if (use_occlusion_test) {
-        if (use_obedit && sctx->use_v3d && XRAY_ENABLED(sctx->v3d_data.v3d)) {
-          /* Use of occlude geometry in editing mode disabled. */
-          return false;
-        }
-
-        if (ELEM(ob->dt, OB_BOUNDBOX, OB_WIRE)) {
-          /* Do not hit objects that are in wire or bounding box
-           * display mode. */
-          return false;
-        }
-      }
-
       Mesh *me = ob->data;
       bool use_hide = false;
       if (BKE_object_is_in_editmode(ob)) {
@@ -767,6 +766,26 @@ static bool raycastObj(SnapObjectContext *sctx,
                            r_hit_list);
       break;
     }
+    case OB_CURVE:
+    case OB_SURF:
+    case OB_FONT: {
+      if (ob->runtime.mesh_eval) {
+        retval = raycastMesh(sctx,
+                             ray_start,
+                             ray_dir,
+                             ob,
+                             ob->runtime.mesh_eval,
+                             obmat,
+                             ob_index,
+                             false,
+                             ray_depth,
+                             r_loc,
+                             r_no,
+                             r_index,
+                             r_hit_list);
+        break;
+      }
+    }
   }
 
   if (retval) {



More information about the Bf-blender-cvs mailing list