From dc500038248e3edc47347c6de4fd7d0312ace54f Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Tue, 17 May 2011 18:37:44 +0000 Subject: This fixes: [#27422] Strobe setting does not work with effect strip [#27421] Some Settings of Adjustment Layers are not Functional. --- source/blender/blenkernel/intern/sequencer.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index fb72ab676b0..30abb6278a7 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -977,16 +977,22 @@ static float give_stripelem_index(Sequence *seq, float cfra) int sta = seq->start; int end = seq->start+seq->len-1; - if(seq->len == 0) return -1; + if (seq->type & SEQ_EFFECT) { + end = seq->enddisp; + } + + if(end < sta) { + return -1; + } if(seq->flag&SEQ_REVERSE_FRAMES) { /*reverse frame in this sequence */ - if(cfra <= sta) nr= seq->len-1; + if(cfra <= sta) nr= end - sta; else if(cfra >= end) nr= 0; else nr= end - cfra; } else { if(cfra <= sta) nr= 0; - else if(cfra >= end) nr= seq->len-1; + else if(cfra >= end) nr= end - sta; else nr= cfra - sta; } @@ -2036,8 +2042,9 @@ static ImBuf * seq_render_strip(SeqRenderData context, Sequence * seq, float cfr break; } case SEQ_EFFECT: - { - ibuf = seq_render_effect_strip_impl(context, seq, cfra); + { + ibuf = seq_render_effect_strip_impl( + context, seq, seq->start + nr); break; } case SEQ_IMAGE: -- cgit v1.2.3 From 37178ab0fdb2132dff1d7170613b53a10269607c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 May 2011 06:27:32 +0000 Subject: cleanup only - rename 'name', 'dir' --> 'filepath' where these actually represent a file path to avoid confusion. - bugfix for possible (but unlikely) uninitialized string. - remove commented script append function, now we have a python api for this. --- source/blender/blenkernel/intern/blender.c | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 75c6303d800..2fce1175fe1 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -191,7 +191,7 @@ static void clean_paths(Main *main) /* note, this is called on Undo so any slow conversion functions here * should be avoided or check (mode!='u') */ -static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filename) +static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filepath) { bScreen *curscreen= NULL; Scene *curscene= NULL; @@ -295,18 +295,18 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filename if(recover && bfd->filename[0] && G.relbase_valid) { /* in case of autosave or quit.blend, use original filename instead * use relbase_valid to make sure the file is saved, else we get in the filename */ - filename= bfd->filename; + filepath= bfd->filename; } #if 0 else if (!G.relbase_valid) { /* otherwise, use an empty string as filename, rather than */ - filename=""; + filepath=""; } #endif /* these are the same at times, should never copy to the same location */ - if(G.main->name != filename) - BLI_strncpy(G.main->name, filename, FILE_MAX); + if(G.main->name != filepath) + BLI_strncpy(G.main->name, filepath, FILE_MAX); /* baseflags, groups, make depsgraph, etc */ set_scene_bg(G.main, CTX_data_scene(C)); @@ -353,15 +353,15 @@ void BKE_userdef_free(void) BLI_freelistN(&U.addons); } -int BKE_read_file(bContext *C, const char *dir, ReportList *reports) +int BKE_read_file(bContext *C, const char *filepath, ReportList *reports) { BlendFileData *bfd; int retval= BKE_READ_FILE_OK; - if(strstr(dir, BLENDER_STARTUP_FILE)==NULL) /* dont print user-pref loading */ - printf("read blend: %s\n", dir); + if(strstr(filepath, BLENDER_STARTUP_FILE)==NULL) /* dont print user-pref loading */ + printf("read blend: %s\n", filepath); - bfd= BLO_read_from_file(dir, reports); + bfd= BLO_read_from_file(filepath, reports); if (bfd) { if(bfd->user) retval= BKE_READ_FILE_OK_USERPREFS; @@ -372,10 +372,10 @@ int BKE_read_file(bContext *C, const char *dir, ReportList *reports) retval= BKE_READ_FILE_FAIL; } else - setup_app_data(C, bfd, dir); // frees BFD + setup_app_data(C, bfd, filepath); // frees BFD } else - BKE_reports_prependf(reports, "Loading %s failed: ", dir); + BKE_reports_prependf(reports, "Loading %s failed: ", filepath); return (bfd?retval:BKE_READ_FILE_FAIL); } @@ -521,19 +521,19 @@ void BKE_write_undo(bContext *C, const char *name) /* disk save version */ if(UNDO_DISK) { static int counter= 0; - char tstr[FILE_MAXDIR+FILE_MAXFILE]; + char filepath[FILE_MAXDIR+FILE_MAXFILE]; char numstr[32]; - /* calculate current filename */ + /* calculate current filepath */ counter++; counter= counter % U.undosteps; BLI_snprintf(numstr, sizeof(numstr), "%d.blend", counter); - BLI_make_file_string("/", tstr, btempdir, numstr); + BLI_make_file_string("/", filepath, btempdir, numstr); - success= BLO_write_file(CTX_data_main(C), tstr, G.fileflags, NULL, NULL); + success= BLO_write_file(CTX_data_main(C), filepath, G.fileflags, NULL, NULL); - BLI_strncpy(curundo->str, tstr, sizeof(curundo->str)); + BLI_strncpy(curundo->str, filepath, sizeof(curundo->str)); } else { MemFile *prevfile=NULL; -- cgit v1.2.3 From 2fe38407803a749e193062aff7ba83120a49ab71 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 May 2011 08:16:33 +0000 Subject: 2 minor glitches - removing bone groups didnt set the next one active. - removing poselib was using int for enum rna property. --- source/blender/blenkernel/intern/action.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 5b49d9a9841..77f56058a4f 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -831,7 +831,10 @@ void pose_remove_group (Object *ob) /* now, remove it from the pose */ BLI_freelinkN(&pose->agroups, grp); - pose->active_group= 0; + pose->active_group--; + if(pose->active_group < 0 || pose->agroups.first == NULL) { + pose->active_group= 0; + } } } -- cgit v1.2.3 From c04f9b779c4384f3cc6961b2ed54456bdab14f43 Mon Sep 17 00:00:00 2001 From: Andrea Weikert Date: Wed, 18 May 2011 19:42:30 +0000 Subject: fix [#27158] Appending crash with preview. * fixed incorrect reading of PreviewImage struct from .blend * fixed memory leak, PreviewImage data wasn't correctly free'd --- source/blender/blenkernel/BKE_icons.h | 8 ++++++-- source/blender/blenkernel/intern/icons.c | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h index 5404402718d..3c12a5d615d 100644 --- a/source/blender/blenkernel/BKE_icons.h +++ b/source/blender/blenkernel/BKE_icons.h @@ -52,6 +52,7 @@ struct Icon typedef struct Icon Icon; struct PreviewImage; +struct ID; void BKE_icons_init(int first_dyn_id); @@ -74,11 +75,14 @@ void BKE_icon_changed(int icon_id); /* free all icons */ void BKE_icons_free(void); +/* free the preview image for use in list */ +void BKE_previewimg_freefunc(void *link); + /* free the preview image */ void BKE_previewimg_free(struct PreviewImage **prv); /* free the preview image belonging to the id */ -void BKE_previewimg_free_id(ID *id); +void BKE_previewimg_free_id(struct ID *id); /* create a new preview image */ struct PreviewImage* BKE_previewimg_create(void) ; @@ -87,6 +91,6 @@ struct PreviewImage* BKE_previewimg_create(void) ; struct PreviewImage* BKE_previewimg_copy(struct PreviewImage *prv); /* retrieve existing or create new preview image */ -PreviewImage* BKE_previewimg_get(ID *id); +struct PreviewImage* BKE_previewimg_get(struct ID *id); #endif /* BKE_ICONS_H */ diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c index 18eda831c47..9effd25c142 100644 --- a/source/blender/blenkernel/intern/icons.c +++ b/source/blender/blenkernel/intern/icons.c @@ -132,18 +132,26 @@ struct PreviewImage* BKE_previewimg_create(void) return prv_img; } -void BKE_previewimg_free(PreviewImage **prv) +void BKE_previewimg_freefunc(void *link) { - if(prv && (*prv)) { + PreviewImage *prv = (PreviewImage *)link; + if (prv) { int i; - + for (i=0; irect[i]) { - MEM_freeN((*prv)->rect[i]); - (*prv)->rect[i] = NULL; + if (prv->rect[i]) { + MEM_freeN(prv->rect[i]); + prv->rect[i] = NULL; } } - MEM_freeN((*prv)); + MEM_freeN(prv); + } +} + +void BKE_previewimg_free(PreviewImage **prv) +{ + if(prv && (*prv)) { + BKE_previewimg_freefunc(*prv); *prv = NULL; } } -- cgit v1.2.3 From 3aaa03e1f8a1cfa62758aa983d5c0b304128e546 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 May 2011 11:21:37 +0000 Subject: Add localize_lamp and localize_world functions as already existed for materials and textures, unused still. --- source/blender/blenkernel/BKE_object.h | 1 + source/blender/blenkernel/BKE_world.h | 1 + source/blender/blenkernel/intern/material.c | 3 +-- source/blender/blenkernel/intern/object.c | 29 +++++++++++++++++++++++++---- source/blender/blenkernel/intern/world.c | 29 ++++++++++++++++++++++++----- 5 files changed, 52 insertions(+), 11 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 3a98f892bd8..a6b5c04b5c3 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -83,6 +83,7 @@ float dof_camera(struct Object *ob); void *add_lamp(const char *name); struct Lamp *copy_lamp(struct Lamp *la); +struct Lamp *localize_lamp(struct Lamp *la); void make_local_lamp(struct Lamp *la); void free_camera(struct Camera *ca); void free_lamp(struct Lamp *la); diff --git a/source/blender/blenkernel/BKE_world.h b/source/blender/blenkernel/BKE_world.h index 30780b87085..6c8d1ba7945 100644 --- a/source/blender/blenkernel/BKE_world.h +++ b/source/blender/blenkernel/BKE_world.h @@ -40,6 +40,7 @@ struct World; void free_world(struct World *sc); struct World *add_world(const char *name); struct World *copy_world(struct World *wrld); +struct World *localize_world(struct World *wrld); void make_local_world(struct World *wrld); #endif diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index fd58dc2dfc0..334f018efc9 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -258,9 +258,8 @@ Material *localize_material(Material *ma) man->preview = NULL; - if(ma->nodetree) { + if(ma->nodetree) man->nodetree= ntreeLocalize(ma->nodetree); - } man->gpumaterial.first= man->gpumaterial.last= NULL; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index c3ea40b09d6..bad6c6248a1 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -867,11 +867,32 @@ Lamp *copy_lamp(Lamp *la) lan->curfalloff = curvemapping_copy(la->curfalloff); -#if 0 // XXX old animation system - id_us_plus((ID *)lan->ipo); -#endif // XXX old animation system + if(la->preview) + lan->preview = BKE_previewimg_copy(la->preview); + + return lan; +} + +Lamp *localize_lamp(Lamp *la) +{ + Lamp *lan; + int a; + + lan= copy_libblock(la); + BLI_remlink(&G.main->lamp, lan); + + for(a=0; amtex[a]) { + lan->mtex[a]= MEM_mallocN(sizeof(MTex), "localize_lamp"); + memcpy(lan->mtex[a], la->mtex[a], sizeof(MTex)); + /* free lamp decrements */ + id_us_plus((ID *)lan->mtex[a]->tex); + } + } + + lan->curfalloff = curvemapping_copy(la->curfalloff); - if (la->preview) lan->preview = BKE_previewimg_copy(la->preview); + lan->preview= NULL; return lan; } diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index 7a76e61c17b..8cecad97902 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -117,17 +117,36 @@ World *copy_world(World *wrld) for(a=0; amtex[a]) { - wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "copymaterial"); + wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "copy_world"); memcpy(wrldn->mtex[a], wrld->mtex[a], sizeof(MTex)); id_us_plus((ID *)wrldn->mtex[a]->tex); } } - if (wrld->preview) wrldn->preview = BKE_previewimg_copy(wrld->preview); + if(wrld->preview) + wrldn->preview = BKE_previewimg_copy(wrld->preview); -#if 0 // XXX old animation system - id_us_plus((ID *)wrldn->ipo); -#endif // XXX old animation system + return wrldn; +} + +World *localize_world(World *wrld) +{ + World *wrldn; + int a; + + wrldn= copy_libblock(wrld); + BLI_remlink(&G.main->world, wrldn); + + for(a=0; amtex[a]) { + wrldn->mtex[a]= MEM_mallocN(sizeof(MTex), "localize_world"); + memcpy(wrldn->mtex[a], wrld->mtex[a], sizeof(MTex)); + /* free world decrements */ + id_us_plus((ID *)wrldn->mtex[a]->tex); + } + } + + wrldn->preview= NULL; return wrldn; } -- cgit v1.2.3 From ae0c552bd1d7edc83b6790e54ac682ec7c2a07cd Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 May 2011 11:24:56 +0000 Subject: Fix crash when accessing mesh from python while a mesh with a subsurf modifier is in editmode. --- source/blender/blenkernel/BKE_subsurf.h | 2 +- source/blender/blenkernel/intern/multires.c | 4 ++-- source/blender/blenkernel/intern/shrinkwrap.c | 2 +- source/blender/blenkernel/intern/subsurf_ccg.c | 11 +++++++---- 4 files changed, 11 insertions(+), 8 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h index b82db853d37..a400c1e27b9 100644 --- a/source/blender/blenkernel/BKE_subsurf.h +++ b/source/blender/blenkernel/BKE_subsurf.h @@ -54,7 +54,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( struct DerivedMesh *dm, struct SubsurfModifierData *smd, int useRenderParams, float (*vertCos)[3], - int isFinalCalc, int editMode); + int isFinalCalc, int forEditMode, int inEditMode); void subsurf_calculate_limit_positions(struct Mesh *me, float (*positions_r)[3]); diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 5706a3997e6..637f5da45af 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -465,7 +465,7 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0, 0); } -static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, int lvl, int simple, int optimal) +static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal) { SubsurfModifierData smd= {{NULL}}; @@ -476,7 +476,7 @@ static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, if(optimal) smd.flags |= eSubsurfModifierFlag_ControlEdges; - return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0); + return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0, (ob->mode & OB_MODE_EDIT)); } diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index 5b6c6bf8732..7b04a72666d 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -562,7 +562,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM ssmd.subdivType = ME_CC_SUBSURF; //catmull clark ssmd.levels = smd->subsurfLevels; //levels - ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0); + ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0, (ob->mode & OB_MODE_EDIT)); if(ss_mesh) { diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 5d44841df8b..a66caf8879f 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -2617,7 +2617,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( struct DerivedMesh *dm, struct SubsurfModifierData *smd, int useRenderParams, float (*vertCos)[3], - int isFinalCalc, int editMode) + int isFinalCalc, int forEditMode, int inEditMode) { int useSimple = smd->subdivType == ME_SIMPLE_SUBSURF; int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; @@ -2625,7 +2625,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges); CCGDerivedMesh *result; - if(editMode) { + if(forEditMode) { int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels; smd->emCache = _getSubSurf(smd->emCache, levels, useAging, 0, @@ -2656,7 +2656,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived( int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels; CCGSubSurf *ss; - + /* It is quite possible there is a much better place to do this. It * depends a bit on how rigourously we expect this function to never * be called in editmode. In semi-theory we could share a single @@ -2664,8 +2664,11 @@ struct DerivedMesh *subsurf_make_derived_from_derived( * the same so we would need some way of converting them. Its probably * not worth the effort. But then why am I even writing this long * comment that no one will read? Hmmm. - zr + * + * Addendum: we can't really ensure that this is never called in edit + * mode, so now we have a parameter to verify it. - brecht */ - if(smd->emCache) { + if(!inEditMode && smd->emCache) { ccgSubSurf_free(smd->emCache); smd->emCache = NULL; } -- cgit v1.2.3 From e088f592bd82f5c3863368f49eabd3e8afffe119 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 19 May 2011 11:54:03 +0000 Subject: Fix some compile warnings. --- source/blender/blenkernel/intern/world.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index 8cecad97902..d413177873f 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -43,6 +43,7 @@ #include "DNA_scene_types.h" #include "DNA_texture_types.h" +#include "BLI_listbase.h" #include "BLI_utildefines.h" #include "BKE_world.h" -- cgit v1.2.3 From fbe541d1a85dd4700e153e17bd6bcbcbc7d9cbb6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 19 May 2011 12:39:57 +0000 Subject: modify fcurve evaluation for bool/enum/int values. was converting from a float to an int which means 0.9x evaluates to 0.0, negative numbers are also rounded up. Round at 0.5 instead & treat negative numbers the same. --- source/blender/blenkernel/intern/fcurve.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index b1272ee2d53..d6a9d950015 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2039,7 +2039,7 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) * here so that the curve can be sampled correctly */ if (fcu->flag & FCURVE_INT_VALUES) - cvalue= (float)((int)cvalue); + cvalue= floorf(cvalue + 0.5f); /* return evaluated value */ return cvalue; -- cgit v1.2.3 From 984d2e42e4a81c1f92dc405ce1b265842bc94b9a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 20 May 2011 04:14:29 +0000 Subject: make api functions for converting rv3d->camzoom, so the odd logic for this isn't inlined all over. --- source/blender/blenkernel/BKE_screen.h | 3 +++ source/blender/blenkernel/intern/screen.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index 56b0cd63e01..bc443b4a3a6 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -246,6 +246,9 @@ void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene); void BKE_screen_view3d_scene_sync(struct bScreen *sc); void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene); +/* zoom factor conversion */ +float BKE_screen_view3d_zoom_to_fac(float camzoom); +float BKE_screen_view3d_zoom_from_fac(float zoomfac); /* screen */ void free_screen(struct bScreen *sc); diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 63e35408381..3207975c6f9 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -416,3 +416,20 @@ void BKE_screen_view3d_main_sync(ListBase *screen_lb, Scene *scene) } } +/* magic zoom calculation, no idea what + * it signifies, if you find out, tell me! -zr + */ + +/* simple, its magic dude! + * well, to be honest, this gives a natural feeling zooming + * with multiple keypad presses (ton) + */ +float BKE_screen_view3d_zoom_to_fac(float camzoom) +{ + return powf(((float)M_SQRT2 + camzoom/50.0f), 2.0f) / 4.0f; +} + +float BKE_screen_view3d_zoom_from_fac(float zoomfac) +{ + return ((sqrtf(4.0f * zoomfac) - (float)M_SQRT2) * 50.0f); +} -- cgit v1.2.3 From 3ddaaa37842f6fb9a30a5f403c71e51a2718b20a Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Fri, 20 May 2011 08:52:52 +0000 Subject: Remedy compile error on windows/msvc introduced in r36787. --- source/blender/blenkernel/intern/screen.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 3207975c6f9..50b3e32278a 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -31,6 +31,7 @@ * \ingroup bke */ +#include "BLI_winstuff.h" #include #include -- cgit v1.2.3