[Bf-blender-cvs] [fe312ba] soc-2016-multiview: WIP: correspondence update and drawing functions
Tianwei Shen
noreply at git.blender.org
Fri Jul 29 16:57:00 CEST 2016
Commit: fe312bab5e6eb60e58fb1b1c7506479a6073389a
Author: Tianwei Shen
Date: Fri Jul 29 22:56:32 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBfe312bab5e6eb60e58fb1b1c7506479a6073389a
WIP: correspondence update and drawing functions
===================================================================
M source/blender/editors/include/ED_clip.h
M source/blender/editors/space_clip/clip_editor.c
M source/blender/makesdna/DNA_space_types.h
M source/blender/makesrna/intern/rna_space.c
===================================================================
diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index 4929f46..83b6b66 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -82,7 +82,7 @@ struct MovieClip *ED_space_clip_get_clip(struct SpaceClip *sc);
struct MovieClip *ED_space_clip_get_secondary_clip(struct SpaceClip *sc);
void ED_space_clip_set_clip(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip);
void ED_space_clip_set_secondary_clip(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *secondary_clip);
-void ED_clip_update_correspondence_mode();
+void ED_clip_update_correspondence_mode(struct bContext *C, struct SpaceClip *sc);
struct Mask *ED_space_clip_get_mask(struct SpaceClip *sc);
void ED_space_clip_set_mask(struct bContext *C, struct SpaceClip *sc, struct Mask *mask);
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index 7ce487e..9577dae 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -49,6 +49,7 @@
#include "BLI_math.h"
#include "BLI_rect.h"
#include "BLI_task.h"
+#include "BLI_listbase.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -57,7 +58,7 @@
#include "BKE_context.h"
#include "BKE_tracking.h"
#include "BKE_library.h"
-
+#include "BKE_screen.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf_types.h"
@@ -675,9 +676,99 @@ void ED_space_clip_set_secondary_clip(bContext *C, bScreen *screen, SpaceClip *s
WM_event_add_notifier(C, NC_MOVIECLIP | NA_SELECTED, sc->secondary_clip);
}
-void ED_clip_update_correspondence_mode()
+/* ******** split view when changing to correspondence mode ******** */
+void ED_clip_update_correspondence_mode(bContext *C, SpaceClip *sc)
{
+ ARegion *ar = CTX_wm_region(C);
+ /* some rules related to changing between correspondence mode and other mode*/
+ if (ar->regiontype != RGN_TYPE_WINDOW) {
+ return;
+ }
+ else if (ar->alignment == RGN_ALIGN_VSPLIT) {
+ ///* Exit split-view */
+ //ScrArea *sa = CTX_wm_area(C);
+ //ARegion *arn;
+
+ ///* keep current region */
+ //ar->alignment = 0;
+
+ //if (sa->spacetype == SPACE_VIEW3D) {
+ // ARegion *ar_iter;
+ // RegionView3D *rv3d = ar->regiondata;
+
+ // /* if this is a locked view, use settings from 'User' view */
+ // if (rv3d->viewlock) {
+ // View3D *v3d_user;
+ // ARegion *ar_user;
+
+ // if (ED_view3d_context_user_region(C, &v3d_user, &ar_user)) {
+ // if (ar != ar_user) {
+ // SWAP(void *, ar->regiondata, ar_user->regiondata);
+ // rv3d = ar->regiondata;
+ // }
+ // }
+ // }
+
+ // rv3d->viewlock_quad = RV3D_VIEWLOCK_INIT;
+ // rv3d->viewlock = 0;
+ // rv3d->rflag &= ~RV3D_CLIPPING;
+
+ // /* accumulate locks, incase they're mixed */
+ // for (ar_iter = sa->regionbase.first; ar_iter; ar_iter = ar_iter->next) {
+ // if (ar_iter->regiontype == RGN_TYPE_WINDOW) {
+ // RegionView3D *rv3d_iter = ar_iter->regiondata;
+ // rv3d->viewlock_quad |= rv3d_iter->viewlock;
+ // }
+ // }
+ //}
+
+ //for (ar = sa->regionbase.first; ar; ar = arn) {
+ // arn = ar->next;
+ // if (ar->alignment == RGN_ALIGN_QSPLIT) {
+ // ED_region_exit(C, ar);
+ // BKE_area_region_free(sa->type, ar);
+ // BLI_remlink(&sa->regionbase, ar);
+ // MEM_freeN(ar);
+ // }
+ //}
+ //ED_area_tag_redraw(sa);
+ //WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
+ }
+ else if (ar->next) {
+ return; // Only last region can be splitted
+ }
+ else {
+ /* Enter split-view */
+ ScrArea *sa = CTX_wm_area(C);
+
+ ar->alignment = RGN_ALIGN_VSPLIT;
+
+ ARegion *newar = BKE_area_region_copy(sa->type, ar);
+ BLI_addtail(&sa->regionbase, newar);
+
+ ///* lock views and set them */
+ //if (sa->spacetype == SPACE_CLIP) {
+ // View3D *v3d = sa->spacedata.first;
+ // int index_qsplit = 0;
+
+ // /* run ED_view3d_lock() so the correct 'rv3d->viewquat' is set,
+ // * otherwise when restoring rv3d->localvd the 'viewquat' won't
+ // * match the 'view', set on entering localview See: [#26315],
+ // *
+ // * We could avoid manipulating rv3d->localvd here if exiting
+ // * localview with a 4-split would assign these view locks */
+ // RegionView3D *rv3d = ar->regiondata;
+ // const char viewlock = (rv3d->viewlock_quad & RV3D_VIEWLOCK_INIT) ?
+ // (rv3d->viewlock_quad & ~RV3D_VIEWLOCK_INIT) : RV3D_LOCKED;
+
+ // region_quadview_init_rv3d(sa, ar, viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO);
+ // region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO);
+ // region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO);
+ //}
+ ED_area_tag_redraw(sa);
+ WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
+ }
}
/* ******** masking editing functions ******** */
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index f97b8a7..6b10acd 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -1290,6 +1290,7 @@ typedef struct RegionSpaceClip {
float xof, yof; /* user defined offset, image is centered */
float xlockof, ylockof; /* user defined offset from locked position */
float zoom; /* user defined zoom level */
+ float loc[2], scale, angle; /* pre-composed stabilization data */
float stabmat[4][4], unistabmat[4][4]; /* current stabilization matrix and the same matrix in unified space,
* defined when drawing and used for mouse position calculation */
} RegionSpaceClip;
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index da4290a..9038871 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1558,14 +1558,14 @@ static void rna_SpaceClipEditor_mask_set(PointerRNA *ptr, PointerRNA value)
ED_space_clip_set_mask(NULL, sc, (Mask *)value.data);
}
-static void rna_SpaceClipEditor_clip_mode_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_SpaceClipEditor_clip_mode_update(bContext *C, PointerRNA *ptr)
{
SpaceClip *sc = (SpaceClip *)(ptr->data);
sc->scopes.ok = 0;
/* update split view if in correspondence mode */
- ED_clip_update_correspondence_mode();
+ ED_clip_update_correspondence_mode(C, sc);
}
static void rna_SpaceClipEditor_lock_selection_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -4547,6 +4547,7 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, rna_enum_clip_editor_mode_items);
RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, "rna_SpaceClipEditor_clip_mode_update");
/* view */
More information about the Bf-blender-cvs
mailing list