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:
authorAntonio Vazquez <blendergit@gmail.com>2020-11-13 15:17:17 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-11-13 17:21:15 +0300
commite9b955b99cd3cde127b52bff8c4559e2d57eeeb0 (patch)
tree1bdc8ebdada1b23948ef59c5751ca6f43f2fe636 /source/blender/editors/gpencil
parent50ccf346f0b8bbf91811a88ba5f31a85dcab8467 (diff)
GPencil: Remove ID from operators to fix T82597
Instead to use the ID of the object, now the parameter is an Enum with Selected object or New. If use selected mode, the first grease pencil object selected is used. If none of the selected objects is a grease pencil object, a new object is created. Small cleanup changes to the original patch. Differential Revision: https://developer.blender.org/D9529
Diffstat (limited to 'source/blender/editors/gpencil')
-rw-r--r--source/blender/editors/gpencil/gpencil_mesh.c37
-rw-r--r--source/blender/editors/gpencil/gpencil_trace_ops.c38
2 files changed, 45 insertions, 30 deletions
diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c
index c136ef2070e..2f3a4d747a7 100644
--- a/source/blender/editors/gpencil/gpencil_mesh.c
+++ b/source/blender/editors/gpencil/gpencil_mesh.c
@@ -39,6 +39,7 @@
#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_object.h"
@@ -191,7 +192,6 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
ARegion *region = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
- Object *ob_gpencil = NULL;
ListBase ob_selected_list = {NULL, NULL};
gpencil_bake_ob_list(C, depsgraph, scene, &ob_selected_list);
@@ -222,10 +222,16 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op)
const float offset = RNA_float_get(op->ptr, "offset");
const int frame_offset = RNA_int_get(op->ptr, "frame_target") - frame_start;
const int project_type = RNA_enum_get(op->ptr, "project_type");
- ob_gpencil = (Object *)RNA_pointer_get(op->ptr, "target").data;
+ eGP_TargetObjectMode target = RNA_enum_get(op->ptr, "target");
- /* Create a new grease pencil object in origin. */
+ /* Create a new grease pencil object in origin or resuse 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);
+ }
+
if (ob_gpencil == NULL) {
ushort local_view_bits = (v3d && v3d->localvd) ? v3d->local_view_uuid : 0;
const float loc[3] = {0.0f, 0.0f, 0.0f};
@@ -244,6 +250,9 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op)
if (project_type != GP_REPROJECT_KEEP) {
/* Init space conversion stuff. */
gpencil_point_conversion_init(C, &gsc);
+ /* Move the grease pencil object to conversion data. */
+ gsc.ob = ob_gpencil;
+
/* Init snap context for geometry projection. */
sctx = ED_transform_snap_object_context_create_view3d(scene, 0, region, CTX_wm_view3d(C));
@@ -383,10 +392,6 @@ static int gpencil_bake_mesh_animation_invoke(bContext *C,
return WM_operator_props_dialog_popup(C, op, 250);
}
-static bool rna_GPencil_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
-{
- return ((Object *)value.owner_id)->type == OB_GPENCIL;
-}
void GPENCIL_OT_bake_mesh_animation(wmOperatorType *ot)
{
static const EnumPropertyItem reproject_type[] = {
@@ -408,6 +413,12 @@ void GPENCIL_OT_bake_mesh_animation(wmOperatorType *ot)
{0, NULL, 0, NULL, NULL},
};
+ static const EnumPropertyItem target_object_modes[] = {
+ {GP_TARGET_OB_NEW, "NEW", 0, "New Object", ""},
+ {GP_TARGET_OB_SELECTED, "SELECTED", 0, "Selected Object", ""},
+ {0, NULL, 0, NULL, NULL},
+ };
+
PropertyRNA *prop;
/* identifiers */
@@ -424,12 +435,12 @@ void GPENCIL_OT_bake_mesh_animation(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
- ot->prop = RNA_def_pointer_runtime(ot->srna,
- "target",
- &RNA_Object,
- "Target Object",
- "Target grease pencil object. Leave empty for new object");
- RNA_def_property_poll_runtime(ot->prop, rna_GPencil_object_poll);
+ ot->prop = RNA_def_enum(ot->srna,
+ "target",
+ target_object_modes,
+ GP_TARGET_OB_NEW,
+ "Target Object",
+ "Target grease pencil");
RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE);
prop = RNA_def_int(
diff --git a/source/blender/editors/gpencil/gpencil_trace_ops.c b/source/blender/editors/gpencil/gpencil_trace_ops.c
index 2d04c31e60d..75683c9ccf3 100644
--- a/source/blender/editors/gpencil/gpencil_trace_ops.c
+++ b/source/blender/editors/gpencil/gpencil_trace_ops.c
@@ -38,6 +38,7 @@
#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_material.h"
@@ -320,7 +321,13 @@ static int gpencil_trace_image_exec(bContext *C, wmOperator *op)
job->image = (Image *)job->ob_active->data;
job->frame_target = CFRA;
- job->ob_gpencil = (Object *)RNA_pointer_get(op->ptr, "target").data;
+ /* Create a new grease pencil object or resuse 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->was_ob_created = false;
job->threshold = RNA_float_get(op->ptr, "threshold");
@@ -368,15 +375,8 @@ static int gpencil_trace_image_invoke(bContext *C, wmOperator *op, const wmEvent
return WM_operator_props_dialog_popup(C, op, 250);
}
-static bool rna_GPencil_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
-{
- return ((Object *)value.owner_id)->type == OB_GPENCIL;
-}
-
void GPENCIL_OT_trace_image(wmOperatorType *ot)
{
- PropertyRNA *prop;
-
static const EnumPropertyItem turnpolicy_type[] = {
{POTRACE_TURNPOLICY_BLACK,
"BLACK",
@@ -412,6 +412,12 @@ void GPENCIL_OT_trace_image(wmOperatorType *ot)
{0, NULL, 0, NULL, NULL},
};
+ static const EnumPropertyItem target_object_modes[] = {
+ {GP_TARGET_OB_NEW, "NEW", 0, "New Object", ""},
+ {GP_TARGET_OB_SELECTED, "SELECTED", 0, "Selected Object", ""},
+ {0, NULL, 0, NULL, NULL},
+ };
+
/* identifiers */
ot->name = "Trace Image to Grease Pencil";
ot->idname = "GPENCIL_OT_trace_image";
@@ -426,15 +432,13 @@ void GPENCIL_OT_trace_image(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
- prop = RNA_def_pointer_runtime(
- ot->srna,
- "target",
- &RNA_Object,
- "Target Object",
- "Target grease pencil object name. Leave empty to create a new object");
- RNA_def_property_poll_runtime(prop, rna_GPencil_object_poll);
-
- RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ ot->prop = RNA_def_enum(ot->srna,
+ "target",
+ target_object_modes,
+ GP_TARGET_OB_NEW,
+ "Target Object",
+ "Target grease pencil");
+ RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE);
RNA_def_int(ot->srna, "thickness", 10, 1, 1000, "Thickness", "", 1, 1000);
RNA_def_int(