Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormano-wii <germano.costa@ig.com.br>2019-05-29 19:17:29 +0300
committermano-wii <germano.costa@ig.com.br>2019-05-29 19:18:29 +0300
commit9dafc8ee2c542949e87e5e81b0ba5088bbd46af9 (patch)
treea3f676d5286eb18e6625de4967aa27d8bf1ea4c4 /source/blender/editors/transform/transform_snap_object.c
parentdff24f96f07f3180c601186cb23147bd8437dffe (diff)
Snap: add support for meshes generated from other types of objects.
Curves with modifiers generate a mesh internally. These can be used for raycasting.
Diffstat (limited to 'source/blender/editors/transform/transform_snap_object.c')
-rw-r--r--source/blender/editors/transform/transform_snap_object.c45
1 files changed, 32 insertions, 13 deletions
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) {