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:
authorCampbell Barton <ideasman42@gmail.com>2012-03-05 17:02:45 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-05 17:02:45 +0400
commit4f447921d21275134358781868c898ec74abd93e (patch)
tree8287b8e485fb1925cdd9cd0cf52c0d11b62c6b60 /source/blender/makesrna
parentf6ddb79e20d42a56460f9587326ceaeec1be2e13 (diff)
RegionView3D.update call, to address issue in report:
[#30454] perspective_matrix not update in real time with bpy.ops.view3d.zoom This is so you can modifify the view settings and get the view matrix after without waiting for a redraw.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r--source/blender/makesrna/intern/rna_space.c48
1 files changed, 41 insertions, 7 deletions
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 246673082e7..648dbc0e8d0 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -191,27 +191,33 @@ static ScrArea *rna_area_from_space(PointerRNA *ptr)
return NULL;
}
-static void rna_area_region_from_regiondata(PointerRNA *ptr, ScrArea **sa_r, ARegion **ar_r)
+static void area_region_from_regiondata(bScreen *sc, void *regiondata, ScrArea **r_sa, ARegion **r_ar)
{
- bScreen *sc = (bScreen*)ptr->id.data;
ScrArea *sa;
ARegion *ar;
- void *regiondata= ptr->data;
- *sa_r= NULL;
- *ar_r= NULL;
+ *r_sa= NULL;
+ *r_ar= NULL;
for(sa=sc->areabase.first; sa; sa=sa->next) {
for(ar=sa->regionbase.first; ar; ar=ar->next) {
if(ar->regiondata == regiondata) {
- *sa_r= sa;
- *ar_r= ar;
+ *r_sa= sa;
+ *r_ar= ar;
return;
}
}
}
}
+static void rna_area_region_from_regiondata(PointerRNA *ptr, ScrArea **r_sa, ARegion **r_ar)
+{
+ bScreen *sc = (bScreen*)ptr->id.data;
+ void *regiondata = ptr->data;
+
+ area_region_from_regiondata(sc, regiondata, r_sa, r_ar);
+}
+
static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
{
Scene *scene = ((bScreen*)ptr->id.data)->scene;
@@ -452,6 +458,25 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value
ED_view3d_from_m4((float (*)[4])values, rv3d->ofs, rv3d->viewquat, &rv3d->dist);
}
+/* api call */
+void rna_RegionView3D_update(ID *id, RegionView3D *rv3d)
+{
+ bScreen *sc = (bScreen *)id;
+
+ ScrArea *sa;
+ ARegion *ar;
+
+ area_region_from_regiondata(sc, rv3d, &sa, &ar);
+
+ if (sa && ar && sa->spacetype == SPACE_VIEW3D) {
+ View3D *v3d;
+
+ v3d = (View3D *)sa->spacedata.first;
+
+ ED_view3d_update_viewmat(sc->scene, v3d, ar, NULL, NULL);
+ }
+}
+
static EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), int *free)
{
Scene *scene = ((bScreen*)ptr->id.data)->scene;
@@ -1714,6 +1739,15 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Camera Offset", "View shift in camera view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+
+ /* until we have real api call */
+ {
+ FunctionRNA *func;
+
+ func = RNA_def_function(srna, "update", "rna_RegionView3D_update");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Recalculate the view matrices");
+ }
}
static void rna_def_space_buttons(BlenderRNA *brna)