[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35537] trunk/blender/source/blender: Bugfixes:
Joshua Leung
aligorith at gmail.com
Mon Mar 14 11:45:42 CET 2011
Revision: 35537
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35537
Author: aligorith
Date: 2011-03-14 10:45:42 +0000 (Mon, 14 Mar 2011)
Log Message:
-----------
Bugfixes:
- Sync Markers option works for local markers (or any other list of
markers in future) too now.
- Apply Pose to Restpose operator now displays a warning if an action
was found (warning about the action now being invalid)
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_scene.h
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/editors/animation/anim_markers.c
trunk/blender/source/blender/editors/armature/editarmature.c
trunk/blender/source/blender/editors/armature/poseUtils.c
trunk/blender/source/blender/editors/include/ED_markers.h
trunk/blender/source/blender/editors/transform/transform_conversions.c
Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h 2011-03-14 10:45:42 UTC (rev 35537)
@@ -78,9 +78,6 @@
char *scene_find_marker_name(struct Scene *scene, int frame);
char *scene_find_last_marker_name(struct Scene *scene, int frame);
-int scene_marker_tfm_translate(struct Scene *scene, int delta, unsigned int flag);
-int scene_marker_tfm_extend(struct Scene *scene, int delta, int flag, int frame, char side);
-int scene_marker_tfm_scale(struct Scene *scene, float value, int flag);
struct Base *scene_add_base(struct Scene *sce, struct Object *ob);
void scene_deselect_all(struct Scene *sce);
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2011-03-14 10:45:42 UTC (rev 35537)
@@ -832,55 +832,7 @@
return best_marker ? best_marker->name : NULL;
}
-/* markers need transforming from different parts of the code so have
- * a generic function to do this */
-int scene_marker_tfm_translate(Scene *scene, int delta, unsigned int flag)
-{
- TimeMarker *marker;
- int tot= 0;
- for (marker= scene->markers.first; marker; marker= marker->next) {
- if ((marker->flag & flag) == flag) {
- marker->frame += delta;
- tot++;
- }
- }
-
- return tot;
-}
-
-int scene_marker_tfm_extend(Scene *scene, int delta, int flag, int frame, char side)
-{
- TimeMarker *marker;
- int tot= 0;
-
- for (marker= scene->markers.first; marker; marker= marker->next) {
- if ((marker->flag & flag) == flag) {
- if((side=='L' && marker->frame < frame) || (side=='R' && marker->frame >= frame)) {
- marker->frame += delta;
- tot++;
- }
- }
- }
-
- return tot;
-}
-
-int scene_marker_tfm_scale(struct Scene *scene, float value, int flag)
-{
- TimeMarker *marker;
- int tot= 0;
-
- for (marker= scene->markers.first; marker; marker= marker->next) {
- if ((marker->flag & flag) == flag) {
- marker->frame= CFRA + (int)floorf(((float)(marker->frame - CFRA) * value) + 0.5f);
- tot++;
- }
- }
-
- return tot;
-}
-
Base *scene_add_base(Scene *sce, Object *ob)
{
Base *b= MEM_callocN(sizeof(*b), "scene_add_base");
Modified: trunk/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_markers.c 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/animation/anim_markers.c 2011-03-14 10:45:42 UTC (rev 35537)
@@ -68,6 +68,7 @@
#include "ED_util.h"
#include "ED_numinput.h"
#include "ED_object.h"
+#include "ED_transform.h"
#include "ED_types.h"
/* ************* Marker API **************** */
@@ -114,6 +115,57 @@
/* --------------------------------- */
+/* Apply some transformation to markers after the fact
+ * < markers: list of markers to affect - this may or may not be the scene markers list, so don't assume anything
+ * < scene: current scene (for getting current frame)
+ * < mode: (TfmMode) transform mode that this transform is for
+ * < value: from the transform code, this is t->vec[0] (which is delta transform for grab/extend, and scale factor for scale)
+ * < side: (B/L/R) for 'extend' functionality, which side of current frame to use
+ */
+int ED_markers_post_apply_transform (ListBase *markers, Scene *scene, int mode, float value, char side)
+{
+ TimeMarker *marker;
+ float cfra = (float)CFRA;
+ int changed = 0;
+
+ /* sanity check */
+ if (markers == NULL)
+ return changed;
+
+ /* affect selected markers - it's unlikely that we will want to affect all in this way? */
+ for (marker = markers->first; marker; marker = marker->next) {
+ if (marker->flag & SELECT) {
+ switch (mode) {
+ case TFM_TIME_TRANSLATE:
+ case TFM_TIME_EXTEND:
+ {
+ /* apply delta if marker is on the right side of the current frame */
+ if ((side=='B') ||
+ (side=='L' && marker->frame < cfra) ||
+ (side=='R' && marker->frame >= cfra))
+ {
+ marker->frame += (int)floorf(value + 0.5f);
+ changed++;
+ }
+ }
+ break;
+
+ case TFM_TIME_SCALE:
+ {
+ /* rescale the distance between the marker and the current frame */
+ marker->frame= cfra + (int)floorf(((float)(marker->frame - cfra) * value) + 0.5f);
+ changed++;
+ }
+ break;
+ }
+ }
+ }
+
+ return changed;
+}
+
+/* --------------------------------- */
+
/* Get the marker that is closest to this point */
/* XXX for select, the min_dist should be small */
TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x)
Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/armature/editarmature.c 2011-03-14 10:45:42 UTC (rev 35537)
@@ -638,6 +638,8 @@
/* helpful warnings... */
// TODO: add warnings to be careful about actions, applying deforms first, etc.
+ if (ob->adt && ob->adt->action)
+ BKE_report(op->reports, RPT_WARNING, "Actions on this armature will be destroyed by this new rest pose as the transforms stored are relative to the old rest pose");
/* Get editbones of active armature to alter */
ED_armature_to_edit(ob);
Modified: trunk/blender/source/blender/editors/armature/poseUtils.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poseUtils.c 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/armature/poseUtils.c 2011-03-14 10:45:42 UTC (rev 35537)
@@ -211,7 +211,7 @@
}
/* perform autokeyframing after changes were made + confirmed */
-void poseAnim_mapping_autoKeyframe (bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float UNUSED(cframe))
+void poseAnim_mapping_autoKeyframe (bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float cframe)
{
/* insert keyframes as necessary if autokeyframing */
if (autokeyframe_cfra_can_key(scene, &ob->id)) {
@@ -235,7 +235,7 @@
}
/* insert keyframes for all relevant bones in one go */
- ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
+ ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cframe);
BLI_freelistN(&dsources);
}
}
Modified: trunk/blender/source/blender/editors/include/ED_markers.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_markers.h 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/include/ED_markers.h 2011-03-14 10:45:42 UTC (rev 35537)
@@ -36,6 +36,7 @@
struct wmKeyConfig;
struct bContext;
struct bAnimContext;
+struct Scene;
struct TimeMarker;
/* Drawing API ------------------------------ */
@@ -53,6 +54,8 @@
ListBase *ED_context_get_markers(const struct bContext *C);
ListBase *ED_animcontext_get_markers(const struct bAnimContext *ac);
+int ED_markers_post_apply_transform(ListBase *markers, struct Scene *scene, int mode, float value, char side);
+
struct TimeMarker *ED_markers_find_nearest_marker(ListBase *markers, float x);
int ED_markers_find_nearest_marker_time(ListBase *markers, float x);
Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c 2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c 2011-03-14 10:45:42 UTC (rev 35537)
@@ -4707,10 +4707,10 @@
if(t->mode == TFM_SEQ_SLIDE) {
if(t->frame_side == 'B')
- scene_marker_tfm_translate(t->scene, floor(t->values[0] + 0.5f), SELECT);
+ ED_markers_post_apply_transform(&t->scene->markers, t->scene, TFM_TIME_TRANSLATE, t->vec[0], t->frame_side);
}
else if (ELEM(t->frame_side, 'L', 'R')) {
- scene_marker_tfm_extend(t->scene, floor(t->vec[0] + 0.5f), SELECT, t->scene->r.cfra, t->frame_side);
+ ED_markers_post_apply_transform(&t->scene->markers, t->scene, TFM_TIME_EXTEND, t->vec[0], t->frame_side);
}
}
@@ -4783,22 +4783,6 @@
posttrans_action_clean(&ac, (bAction *)ac.data);
}
}
-
- /* marker transform, not especially nice but we may want to move markers
- * at the same time as keyframes in the dope sheet. */
- // FIXME: this only does scene markers, but fails when action editor is displaying local markers only...
- if ((saction->flag & SACTION_MARKERS_MOVE) && (cancelled == 0)) {
- if (t->mode == TFM_TIME_TRANSLATE) {
- if (ELEM(t->frame_side, 'L', 'R')) /* TFM_TIME_EXTEND */
- scene_marker_tfm_extend(t->scene, floor(t->vec[0] + 0.5f), SELECT, t->scene->r.cfra, t->frame_side);
- else /* TFM_TIME_TRANSLATE */
- scene_marker_tfm_translate(t->scene, floor(t->vec[0] + 0.5f), SELECT);
- }
- else if (t->mode == TFM_TIME_SCALE) {
- scene_marker_tfm_scale(t->scene, t->vec[0], SELECT);
- }
- }
-
else if (ac.datatype == ANIMCONT_GPENCIL) {
/* remove duplicate frames and also make sure points are in order! */
/* 3 cases here for curve cleanups:
@@ -4820,6 +4804,21 @@
}
}
+ /* marker transform, not especially nice but we may want to move markers
+ * at the same time as keyframes in the dope sheet.
+ */
+ if ((saction->flag & SACTION_MARKERS_MOVE) && (cancelled == 0)) {
+ if (t->mode == TFM_TIME_TRANSLATE) {
+ if (ELEM(t->frame_side, 'L', 'R')) /* TFM_TIME_EXTEND */
+ ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+ else /* TFM_TIME_TRANSLATE */
+ ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+ }
+ else if (t->mode == TFM_TIME_SCALE) {
+ ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+ }
+ }
+
/* make sure all F-Curves are set correctly */
ANIM_editkeyframes_refresh(&ac);
More information about the Bf-blender-cvs
mailing list