Page MenuHome

Fix for T39028
ActivePublic

Authored by Bastien Montagne (mont29) on Mar 8 2014, 4:22 PM.
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 98c855d..6894814 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2694,7 +2694,7 @@ class VIEW3D_PT_view3d_properties(Panel):
col = layout.column()
col.active = bool(view.region_3d.view_perspective != 'CAMERA' or
- view.region_quadview)
+ view.region_quadview_right)
col.prop(view, "lens")
col.label(text="Lock to Object:")
col.prop(view, "lock_object", text="")
@@ -2817,7 +2817,7 @@ class VIEW3D_PT_view3d_display(Panel):
layout.separator()
- region = view.region_quadview
+ region = view.region_quadview_right
layout.operator("screen.region_quadview", text="Toggle Quad View")
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 0cc37a6..f69c8e5 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -472,24 +472,45 @@ static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
}
-static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr)
+static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr, int index)
{
View3D *v3d = (View3D *)(ptr->data);
ScrArea *sa = rna_area_from_space(ptr);
void *regiondata = NULL;
+ index = 4 - index;
+
if (sa) {
ListBase *regionbase = (sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase;
ARegion *ar = regionbase->last; /* always before last in list, weak .. */
- ar = (ar->alignment == RGN_ALIGN_QSPLIT) ? ar->prev : NULL;
- if (ar) {
- regiondata = ar->regiondata;
+ if (ar->alignment == RGN_ALIGN_QSPLIT) {
+ while (index-- && ar) {
+ ar = ar->prev;
+ }
+ if (ar) {
+ regiondata = ar->regiondata;
+ }
}
}
return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
}
+static PointerRNA rna_SpaceView3D_region_quadview_front_get(PointerRNA *ptr)
+{
+ return rna_SpaceView3D_region_quadview_get(ptr, 1);
+}
+
+static PointerRNA rna_SpaceView3D_region_quadview_top_get(PointerRNA *ptr)
+{
+ return rna_SpaceView3D_region_quadview_get(ptr, 2);
+}
+
+static PointerRNA rna_SpaceView3D_region_quadview_right_get(PointerRNA *ptr)
+{
+ return rna_SpaceView3D_region_quadview_get(ptr, 3);
+}
+
static void rna_RegionView3D_quadview_update(Main *UNUSED(main), Scene *UNUSED(scene), PointerRNA *ptr)
{
ScrArea *sa;
@@ -2033,9 +2054,19 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_3d_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "3D Region", "3D region in this space, in case of quad view the camera region");
- prop = RNA_def_property(srna, "region_quadview", PROP_POINTER, PROP_NONE);
+ prop = RNA_def_property(srna, "region_quadview_front", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "RegionView3D");
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_front_get", NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings");
+
+ prop = RNA_def_property(srna, "region_quadview_top", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "RegionView3D");
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_top_get", NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings");
+
+ prop = RNA_def_property(srna, "region_quadview_right", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "RegionView3D");
- RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_get", NULL, NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_right_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings");
prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE);

Event Timeline

Bastien Montagne (mont29) changed the title of this paste from untitled to Fix for T39028.
Bastien Montagne (mont29) updated the paste's language from autodetect to autodetect.

Rather not have this hard coded, an array of regions should be possible.

@Campbell Barton (campbellbarton) was a bit hard, but finally manage to get a Collection of four regions (when quadview is enabled!)...

1diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
2index 98c855d..a4f1820 100644
3--- a/release/scripts/startup/bl_ui/space_view3d.py
4+++ b/release/scripts/startup/bl_ui/space_view3d.py
5@@ -2694,7 +2694,7 @@ class VIEW3D_PT_view3d_properties(Panel):
6
7 col = layout.column()
8 col.active = bool(view.region_3d.view_perspective != 'CAMERA' or
9- view.region_quadview)
10+ view.region_quadviews)
11 col.prop(view, "lens")
12 col.label(text="Lock to Object:")
13 col.prop(view, "lock_object", text="")
14@@ -2817,7 +2817,7 @@ class VIEW3D_PT_view3d_display(Panel):
15
16 layout.separator()
17
18- region = view.region_quadview
19+ region = view.region_quadviews[2] if view.region_quadviews else None
20
21 layout.operator("screen.region_quadview", text="Toggle Quad View")
22
23diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
24index 0cc37a6..e6db586 100644
25--- a/source/blender/makesrna/intern/rna_space.c
26+++ b/source/blender/makesrna/intern/rna_space.c
27@@ -472,22 +472,33 @@ static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
28 return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
29 }
30
31-static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr)
32+static void rna_SpaceView3D_region_quadviews_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
33 {
34 View3D *v3d = (View3D *)(ptr->data);
35 ScrArea *sa = rna_area_from_space(ptr);
36- void *regiondata = NULL;
37- if (sa) {
38- ListBase *regionbase = (sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase;
39- ARegion *ar = regionbase->last; /* always before last in list, weak .. */
40+ int i = 3;
41+
42+ ARegion *ar = ((sa && sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase)->last;
43+ ListBase lb = {NULL, NULL};
44+
45+ if (ar && ar->alignment == RGN_ALIGN_QSPLIT) {
46+ while (i-- && ar) {
47+ ar = ar->prev;
48+ }
49
50- ar = (ar->alignment == RGN_ALIGN_QSPLIT) ? ar->prev : NULL;
51- if (ar) {
52- regiondata = ar->regiondata;
53+ if (i < 0) {
54+ lb.first = ar;
55 }
56 }
57
58- return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
59+ rna_iterator_listbase_begin(iter, &lb, NULL);
60+}
61+
62+static PointerRNA rna_SpaceView3D_region_quadviews_get(CollectionPropertyIterator *iter)
63+{
64+ void *regiondata = ((ARegion *)rna_iterator_listbase_get(iter))->regiondata;
65+
66+ return rna_pointer_inherit_refine(&iter->parent, &RNA_RegionView3D, regiondata);
67 }
68
69 static void rna_RegionView3D_quadview_update(Main *UNUSED(main), Scene *UNUSED(scene), PointerRNA *ptr)
70@@ -2033,10 +2044,13 @@ static void rna_def_space_view3d(BlenderRNA *brna)
71 RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_3d_get", NULL, NULL, NULL);
72 RNA_def_property_ui_text(prop, "3D Region", "3D region in this space, in case of quad view the camera region");
73
74- prop = RNA_def_property(srna, "region_quadview", PROP_POINTER, PROP_NONE);
75+ prop = RNA_def_property(srna, "region_quadviews", PROP_COLLECTION, PROP_NONE);
76 RNA_def_property_struct_type(prop, "RegionView3D");
77- RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_get", NULL, NULL, NULL);
78- RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings");
79+ RNA_def_property_collection_funcs(prop, "rna_SpaceView3D_region_quadviews_begin", "rna_iterator_listbase_next",
80+ "rna_iterator_listbase_end", "rna_SpaceView3D_region_quadviews_get",
81+ NULL, NULL, NULL, NULL);
82+ RNA_def_property_ui_text(prop, "Quad View Regions", "3D regions (the third one defines quad view settings, "
83+ "the forth one is same as 'region_quadviews')");
84
85 prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE);
86 RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION);

Could this patch be merged to trunk?