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>2020-11-16 08:48:44 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-11-16 08:48:44 +0300
commit64ab084ca5fa171d39e799f143cff1d661267cf3 (patch)
tree30e232e915e8777542a0e0c38e8566ae09338235 /source/blender/editors/gpencil
parenta3a6d6a670f1074de3a83fef2f58c72bd66b270d (diff)
Grease Pencil: adjust behavior of target object detection
First detect the other selected object, then check it can be written to. Otherwise the target object could be the first one found when looping over objects which is random from the user perspective. Move the type check to the operator, which also checks the data isn't library data which was being ignored.
Diffstat (limited to 'source/blender/editors/gpencil')
-rw-r--r--source/blender/editors/gpencil/gpencil_mesh.c16
-rw-r--r--source/blender/editors/gpencil/gpencil_trace_ops.c20
2 files changed, 28 insertions, 8 deletions
diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c
index 2f3a4d747a7..84314202dfc 100644
--- a/source/blender/editors/gpencil/gpencil_mesh.c
+++ b/source/blender/editors/gpencil/gpencil_mesh.c
@@ -224,12 +224,22 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op)
const int project_type = RNA_enum_get(op->ptr, "project_type");
eGP_TargetObjectMode target = RNA_enum_get(op->ptr, "target");
- /* Create a new grease pencil object in origin or resuse selected. */
+ /* Create a new grease pencil object in origin or reuse selected. */
Object *ob_gpencil = NULL;
bool newob = false;
+
if (target == GP_TARGET_OB_SELECTED) {
- ob_gpencil = BKE_view_layer_first_selected_object_by_type(
- CTX_data_view_layer(C), v3d, OB_GPENCIL);
+ ob_gpencil = BKE_view_layer_non_active_selected_object(CTX_data_view_layer(C), v3d);
+ if (ob_gpencil != NULL) {
+ if (ob_gpencil->type != OB_GPENCIL) {
+ BKE_report(op->reports, RPT_WARNING, "Target object not a grease pencil, ignoring!");
+ ob_gpencil = NULL;
+ }
+ else if (BKE_object_obdata_is_libdata(ob_gpencil)) {
+ BKE_report(op->reports, RPT_WARNING, "Target object library-data, ignoring!");
+ ob_gpencil = NULL;
+ }
+ }
}
if (ob_gpencil == NULL) {
diff --git a/source/blender/editors/gpencil/gpencil_trace_ops.c b/source/blender/editors/gpencil/gpencil_trace_ops.c
index 75683c9ccf3..0be9d74278e 100644
--- a/source/blender/editors/gpencil/gpencil_trace_ops.c
+++ b/source/blender/editors/gpencil/gpencil_trace_ops.c
@@ -321,12 +321,22 @@ static int gpencil_trace_image_exec(bContext *C, wmOperator *op)
job->image = (Image *)job->ob_active->data;
job->frame_target = CFRA;
- /* Create a new grease pencil object or resuse selected. */
+ /* Create a new grease pencil object or reuse selected. */
eGP_TargetObjectMode target = RNA_enum_get(op->ptr, "target");
- job->ob_gpencil = (target == GP_TARGET_OB_SELECTED) ?
- BKE_view_layer_first_selected_object_by_type(
- CTX_data_view_layer(C), job->v3d, OB_GPENCIL) :
- NULL;
+ job->ob_gpencil = (target == GP_TARGET_OB_SELECTED) ? BKE_view_layer_non_active_selected_object(
+ CTX_data_view_layer(C), job->v3d) :
+ NULL;
+
+ if (job->ob_gpencil != NULL) {
+ if (job->ob_gpencil->type != OB_GPENCIL) {
+ BKE_report(op->reports, RPT_WARNING, "Target object not a grease pencil, ignoring!");
+ job->ob_gpencil = NULL;
+ }
+ else if (BKE_object_obdata_is_libdata(job->ob_gpencil)) {
+ BKE_report(op->reports, RPT_WARNING, "Target object library-data, ignoring!");
+ job->ob_gpencil = NULL;
+ }
+ }
job->was_ob_created = false;