diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2016-05-11 12:59:02 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-05-11 13:20:25 +0300 |
commit | 67d2de882841f56c9cd35f0f0e7329b0c9190c97 (patch) | |
tree | 49778334fe1d4e71e19a62a5876a8d10e4a6e2ff /source/blender/editors/include/ED_transform_snap_object_context.h | |
parent | 4a135ad2b7886c3a4731f7db7ddce60af8068f32 (diff) |
Transform Volume rewrite/refactor
Take advantage of the efficiency provided by the snap_context.
Also fixes errors:
- volume snap fails based on view angle (T48394).
- multiple instances of dupli-objects break volume calculation.
Diffstat (limited to 'source/blender/editors/include/ED_transform_snap_object_context.h')
-rw-r--r-- | source/blender/editors/include/ED_transform_snap_object_context.h | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h index e591a91a90f..900b7593f2e 100644 --- a/source/blender/editors/include/ED_transform_snap_object_context.h +++ b/source/blender/editors/include/ED_transform_snap_object_context.h @@ -29,6 +29,7 @@ struct BMVert; struct BMEdge; struct BMFace; +struct ListBase; struct Scene; struct Main; struct Object; @@ -38,6 +39,24 @@ struct View3D; /* transform_snap_object.c */ /* ED_transform_snap_object_*** API */ + +/** used for storing multiple hits */ +struct SnapObjectHitDepth { + struct SnapObjectHitDepth *next, *prev; + + float depth; + float co[3]; + float no[3]; + int index; + + struct Object *ob; + float obmat[4][4]; + + /* needed to tell which ray-cast this was part of, + * the same object may be part of many ray-casts when dupli's are used. */ + unsigned int ob_uuid; +}; + struct SnapObjectParams { int snap_select; /* SnapSelect */ union { @@ -81,9 +100,16 @@ bool ED_transform_snap_object_project_ray_ex( struct Object **r_ob, float r_obmat[4][4]); bool ED_transform_snap_object_project_ray( SnapObjectContext *sctx, - const float ray_origin[3], const float ray_direction[3], float *ray_dist, + const float ray_origin[3], const float ray_direction[3], float *ray_depth, float r_co[3], float r_no[3]); +bool ED_transform_snap_object_project_ray_all( + SnapObjectContext *sctx, + const struct SnapObjectParams *params, + const float ray_start[3], const float ray_normal[3], + float ray_depth, bool sort, + struct ListBase *r_hit_list); + bool ED_transform_snap_object_project_view3d_ex( struct SnapObjectContext *sctx, const struct SnapObjectParams *params, @@ -104,4 +130,11 @@ bool ED_transform_snap_object_project_view3d_mixed( bool use_depth, float r_co[3], float r_no[3]); +bool ED_transform_snap_object_project_all_view3d_ex( + SnapObjectContext *sctx, + const struct SnapObjectParams *params, + const float mval[2], + float ray_depth, bool sort, + ListBase *r_hit_list); + #endif /* __ED_TRANSFORM_SNAP_OBJECT_CONTEXT_H__ */ |