Cleanup: de-duplicate view3d clipping
authorCampbell Barton <ideasman42@gmail.com>
Fri, 6 Mar 2015 13:25:27 +0000 (00:25 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 12 Mar 2015 12:49:15 +0000 (23:49 +1100)
source/blender/editors/include/ED_view3d.h
source/blender/editors/space_view3d/view3d_edit.c
source/blender/editors/space_view3d/view3d_view.c

index 5bf077b6293f15c4a3e3d813b5ba4aae35ab6977..30f8fb4f9228e9a11e1281eeb1031974403048a7 100644 (file)
@@ -241,6 +241,7 @@ void ED_view3d_calc_camera_border_size(struct Scene *scene, struct ARegion *ar,
 bool ED_view3d_calc_render_border(struct Scene *scene, struct View3D *v3d,
                                   struct ARegion *ar, struct rcti *rect);
 
+void ED_view3d_clipping_calc_from_boundbox(float clip[6][4], const struct BoundBox *clipbb, const bool is_flip);
 void ED_view3d_clipping_calc(struct BoundBox *bb, float planes[4][4], struct bglMats *mats, const struct rcti *rect);
 void ED_view3d_clipping_local(struct RegionView3D *rv3d, float mat[4][4]);
 bool ED_view3d_clipping_test(struct RegionView3D *rv3d, const float co[3], const bool is_local);
index 7169fa9576325f263067a894dc52d212894e53ff..233a0bd03cd0fcc6225d7abbba902395b20f0fde 100644 (file)
@@ -4429,20 +4429,6 @@ void VIEW3D_OT_background_image_remove(wmOperatorType *ot)
 
 /* ********************* set clipping operator ****************** */
 
-static void calc_clipping_plane(float clip[6][4], const BoundBox *clipbb, const bool is_flip)
-{
-       int val;
-
-       for (val = 0; val < 4; val++) {
-               normal_tri_v3(clip[val], clipbb->vec[val], clipbb->vec[val == 3 ? 0 : val + 1], clipbb->vec[val + 4]);
-               if (UNLIKELY(is_flip)) {
-                       negate_v3(clip[val]);
-               }
-
-               clip[val][3] = -dot_v3v3(clip[val], clipbb->vec[val]);
-       }
-}
-
 static void calc_local_clipping(float clip_local[6][4], BoundBox *clipbb, float mat[4][4])
 {
        BoundBox clipbb_local;
@@ -4455,7 +4441,7 @@ static void calc_local_clipping(float clip_local[6][4], BoundBox *clipbb, float
                mul_v3_m4v3(clipbb_local.vec[i], imat, clipbb->vec[i]);
        }
 
-       calc_clipping_plane(clip_local, &clipbb_local, is_negative_m4(mat));
+       ED_view3d_clipping_calc_from_boundbox(clip_local, &clipbb_local, is_negative_m4(mat));
 }
 
 void ED_view3d_clipping_local(RegionView3D *rv3d, float mat[4][4])
index 5a3893f733ffab2ab8e2dae7dfeeabec7ecc085c..76d9762ab0997a1ae8cf91b71c075ff9257ada49 100644 (file)
@@ -609,6 +609,20 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
 
 /* ********************************** */
 
+void ED_view3d_clipping_calc_from_boundbox(float clip[4][4], const BoundBox *bb, const bool is_flip)
+{
+       int val;
+
+       for (val = 0; val < 4; val++) {
+               normal_tri_v3(clip[val], bb->vec[val], bb->vec[val == 3 ? 0 : val + 1], bb->vec[val + 4]);
+               if (UNLIKELY(is_flip)) {
+                       negate_v3(clip[val]);
+               }
+
+               clip[val][3] = -dot_v3v3(clip[val], bb->vec[val]);
+       }
+}
+
 void ED_view3d_clipping_calc(BoundBox *bb, float planes[4][4], bglMats *mats, const rcti *rect)
 {
        float modelview[4][4];
@@ -644,16 +658,7 @@ void ED_view3d_clipping_calc(BoundBox *bb, float planes[4][4], bglMats *mats, co
                ((float *)modelview)[a] = mats->modelview[a];
        flip_sign = is_negative_m4(modelview);
 
-       /* then plane equations */
-       for (val = 0; val < 4; val++) {
-
-               normal_tri_v3(planes[val], bb->vec[val], bb->vec[val == 3 ? 0 : val + 1], bb->vec[val + 4]);
-
-               if (flip_sign)
-                       negate_v3(planes[val]);
-
-               planes[val][3] = -dot_v3v3(planes[val], bb->vec[val]);
-       }
+       ED_view3d_clipping_calc_from_boundbox(planes, bb, flip_sign);
 }
 
 static bool view3d_boundbox_clip_m4(const BoundBox *bb, float persmatob[4][4])