Merge branch 'blender-v3.3-release'

This commit is contained in:
Bastien Montagne 2022-08-02 12:55:29 +02:00
commit 33e4ecc750
6 changed files with 91 additions and 25 deletions

View File

@ -1640,7 +1640,8 @@ static void animchannels_group_channels(bAnimContext *ac,
int filter;
/* find selected F-Curves to re-group */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL);
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL |
ANIMFILTER_FCURVESONLY);
ANIM_animdata_filter(ac, &anim_data, filter, adt_ref, ANIMCONT_CHANNEL);
if (anim_data.first) {
@ -1754,7 +1755,7 @@ static int animchannels_ungroup_exec(bContext *C, wmOperator *UNUSED(op))
/* just selected F-Curves... */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL |
ANIMFILTER_NODUPLIS);
ANIMFILTER_NODUPLIS | ANIMFILTER_FCURVESONLY);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
for (ale = anim_data.first; ale; ale = ale->next) {
@ -2454,7 +2455,7 @@ static int animchannels_enable_exec(bContext *C, wmOperator *UNUSED(op))
}
/* filter data */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_NODUPLIS);
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_NODUPLIS | ANIMFILTER_FCURVESONLY);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
/* loop through filtered data and clean curves */
@ -3454,7 +3455,8 @@ static bool select_anim_channel_keys(bAnimContext *ac, int channel_index, bool e
/* get the channel that was clicked on */
/* filter channels */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS |
ANIMFILTER_FCURVESONLY);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* get channel from index */

View File

@ -218,7 +218,7 @@ static short ob_keyframes_loop(KeyframeEditData *ked,
ac.datatype = ANIMCONT_CHANNEL;
/* get F-Curves to take keyframes from */
filter = ANIMFILTER_DATA_VISIBLE; /* curves only */
filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FCURVESONLY;
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
/* Loop through each F-Curve, applying the operation as required,
@ -267,7 +267,7 @@ static short scene_keyframes_loop(KeyframeEditData *ked,
ac.datatype = ANIMCONT_CHANNEL;
/* get F-Curves to take keyframes from */
filter = ANIMFILTER_DATA_VISIBLE; /* curves only */
filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FCURVESONLY;
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
/* Loop through each F-Curve, applying the operation as required,

View File

@ -943,7 +943,8 @@ void scene_to_keylist(bDopeSheet *ads, Scene *sce, AnimKeylist *keylist, const i
ac.datatype = ANIMCONT_CHANNEL;
/* get F-Curves to take keyframes from */
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE; /* curves only */
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FCURVESONLY;
ANIM_animdata_filter(
&ac, &anim_data, filter, ac.data, static_cast<eAnimCont_Types>(ac.datatype));
@ -980,7 +981,7 @@ void ob_to_keylist(bDopeSheet *ads, Object *ob, AnimKeylist *keylist, const int
ac.datatype = ANIMCONT_CHANNEL;
/* get F-Curves to take keyframes from */
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE; /* curves only */
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FCURVESONLY;
ANIM_animdata_filter(
&ac, &anim_data, filter, ac.data, static_cast<eAnimCont_Types>(ac.datatype));
@ -1015,7 +1016,7 @@ void cachefile_to_keylist(bDopeSheet *ads,
/* get F-Curves to take keyframes from */
ListBase anim_data = {nullptr, nullptr};
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE; /* curves only */
const eAnimFilter_Flags filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FCURVESONLY;
ANIM_animdata_filter(
&ac, &anim_data, filter, ac.data, static_cast<eAnimCont_Types>(ac.datatype));

View File

@ -334,6 +334,7 @@ typedef enum eAnimFilter_Flags {
ANIMFILTER_TMP_IGNORE_ONLYSEL = (1u << 31),
} eAnimFilter_Flags;
ENUM_OPERATORS(eAnimFilter_Flags, ANIMFILTER_TMP_IGNORE_ONLYSEL);
/** \} */

View File

@ -625,7 +625,7 @@ static void graph_refresh_fcurve_colors(const bContext *C)
* - we don't include ANIMFILTER_CURVEVISIBLE filter, as that will result in a
* mismatch between channel-colors and the drawn curves
*/
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_NODUPLIS);
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_NODUPLIS | ANIMFILTER_FCURVESONLY);
items = ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
/* loop over F-Curves, assigning colors */

View File

@ -39,6 +39,7 @@ const EnumPropertyItem rna_enum_collection_color_items[] = {
# include "DEG_depsgraph.h"
# include "DEG_depsgraph_build.h"
# include "DEG_depsgraph_query.h"
# include "BKE_collection.h"
# include "BKE_global.h"
@ -79,26 +80,45 @@ static PointerRNA rna_Collection_objects_get(CollectionPropertyIterator *iter)
return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, cob->ob);
}
static bool rna_collection_objects_edit_check(Collection *collection,
ReportList *reports,
Object *object)
{
if (!DEG_is_original_id(&collection->id)) {
BKE_reportf(
reports, RPT_ERROR, "Collection '%s' is not an original ID", collection->id.name + 2);
return false;
}
if (!DEG_is_original_id(&object->id)) {
BKE_reportf(reports, RPT_ERROR, "Collection '%s' is not an original ID", object->id.name + 2);
return false;
}
/* Currently this should not be allowed (might be supported in the future though...). */
if (ID_IS_OVERRIDE_LIBRARY(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not (un)link the object '%s' because the collection '%s' is overridden",
object->id.name + 2,
collection->id.name + 2);
return false;
}
if (ID_IS_LINKED(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not (un)link the object '%s' because the collection '%s' is linked",
object->id.name + 2,
collection->id.name + 2);
return false;
}
return true;
}
static void rna_Collection_objects_link(Collection *collection,
Main *bmain,
ReportList *reports,
Object *object)
{
/* Currently this should not be allowed (might be supported in the future though...). */
if (ID_IS_OVERRIDE_LIBRARY(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not link the object '%s' because the collection '%s' is overridden",
object->id.name + 2,
collection->id.name + 2);
return;
}
if (ID_IS_LINKED(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not link the object '%s' because the collection '%s' is linked",
object->id.name + 2,
collection->id.name + 2);
if (!rna_collection_objects_edit_check(collection, reports, object)) {
return;
}
if (!BKE_collection_object_add(bmain, collection, object)) {
@ -120,6 +140,9 @@ static void rna_Collection_objects_unlink(Collection *collection,
ReportList *reports,
Object *object)
{
if (!rna_collection_objects_edit_check(collection, reports, object)) {
return;
}
if (!BKE_collection_object_remove(bmain, collection, object, false)) {
BKE_reportf(reports,
RPT_ERROR,
@ -204,11 +227,47 @@ static PointerRNA rna_Collection_children_get(CollectionPropertyIterator *iter)
return rna_pointer_inherit_refine(&iter->parent, &RNA_Collection, child->collection);
}
static bool rna_collection_children_edit_check(Collection *collection,
ReportList *reports,
Collection *child)
{
if (!DEG_is_original_id(&collection->id)) {
BKE_reportf(
reports, RPT_ERROR, "Collection '%s' is not an original ID", collection->id.name + 2);
return false;
}
if (!DEG_is_original_id(&child->id)) {
BKE_reportf(reports, RPT_ERROR, "Collection '%s' is not an original ID", child->id.name + 2);
return false;
}
/* Currently this should not be allowed (might be supported in the future though...). */
if (ID_IS_OVERRIDE_LIBRARY(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not (un)link the collection '%s' because the collection '%s' is overridden",
child->id.name + 2,
collection->id.name + 2);
return false;
}
if (ID_IS_LINKED(&collection->id)) {
BKE_reportf(reports,
RPT_ERROR,
"Could not (un)link the collection '%s' because the collection '%s' is linked",
child->id.name + 2,
collection->id.name + 2);
return false;
}
return true;
}
static void rna_Collection_children_link(Collection *collection,
Main *bmain,
ReportList *reports,
Collection *child)
{
if (!rna_collection_children_edit_check(collection, reports, child)) {
return;
}
if (!BKE_collection_child_add(bmain, collection, child)) {
BKE_reportf(reports,
RPT_ERROR,
@ -228,6 +287,9 @@ static void rna_Collection_children_unlink(Collection *collection,
ReportList *reports,
Collection *child)
{
if (!rna_collection_children_edit_check(collection, reports, child)) {
return;
}
if (!BKE_collection_child_remove(bmain, collection, child)) {
BKE_reportf(reports,
RPT_ERROR,