[Bf-blender-cvs] [d62750ecf90] greasepencil-object: GPencil: Add menu for trace and more options
Antonio Vazquez
noreply at git.blender.org
Thu Apr 9 18:56:33 CEST 2020
Commit: d62750ecf90c4bcee0ce9d1f3f2f2b611d9f63de
Author: Antonio Vazquez
Date: Thu Apr 9 12:30:35 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd62750ecf90c4bcee0ce9d1f3f2f2b611d9f63de
GPencil: Add menu for trace and more options
===================================================================
M release/scripts/startup/bl_operators/__init__.py
A release/scripts/startup/bl_operators/gpencil_trace_image.py
M release/scripts/startup/bl_ui/space_image.py
M source/blender/editors/gpencil/gpencil_mesh.c
M source/blender/editors/gpencil/gpencil_trace.h
M source/blender/editors/gpencil/gpencil_trace_ops.c
M source/blender/editors/gpencil/gpencil_trace_utils.c
===================================================================
diff --git a/release/scripts/startup/bl_operators/__init__.py b/release/scripts/startup/bl_operators/__init__.py
index bca9bce8fea..e52a32a6e0d 100644
--- a/release/scripts/startup/bl_operators/__init__.py
+++ b/release/scripts/startup/bl_operators/__init__.py
@@ -49,6 +49,7 @@ _modules = [
"vertexpaint_dirt",
"view3d",
"gpencil_mesh_bake",
+ "gpencil_trace_image",
"wm",
]
diff --git a/release/scripts/startup/bl_operators/gpencil_trace_image.py b/release/scripts/startup/bl_operators/gpencil_trace_image.py
new file mode 100644
index 00000000000..3cab16f7d66
--- /dev/null
+++ b/release/scripts/startup/bl_operators/gpencil_trace_image.py
@@ -0,0 +1,114 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8-80 compliant>
+
+import bpy
+from bpy.types import Operator
+from bpy.props import (
+ IntProperty,
+ FloatProperty,
+ BoolProperty,
+ EnumProperty,
+)
+
+gp_object_items = []
+
+
+def my_objlist_callback(scene, context):
+ gp_object_items.clear()
+ gp_object_items.append(('*NEW', "New Object", ""))
+ for o in context.scene.objects:
+ if o.type == 'GPENCIL':
+ gp_object_items.append((o.name, o.name, ""))
+
+ return gp_object_items
+
+
+class GPENCIL_OT_trace(Operator):
+ bl_idname = "gpencil.trace"
+ bl_label = "Trace Image to Grease Pencil"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ target: EnumProperty(
+ name="Target Object",
+ description="Grease Pencil Object",
+ items=my_objlist_callback
+ )
+ frame_target: IntProperty(
+ name="Target Frame",
+ description="Destination frame for the baked animation",
+ min=1, max=300000,
+ default=1,
+ )
+ thickness: IntProperty(
+ name="Thickness",
+ description="Thickness of the stroke lines",
+ min=1, max=100,
+ default=10,
+ )
+ resolution: IntProperty(
+ name="Resolution",
+ description="Resolution of the generated curves",
+ min=1, max=20,
+ default=5,
+ )
+ scale: FloatProperty(
+ name="Scale",
+ description="Scale of the final output",
+ min=0.001,
+ max=100.0,
+ default=1.0,
+ )
+ threshold: FloatProperty(
+ name="Colot Threshold",
+ description="Determine what is considered white and what blackl",
+ soft_min=0.0, soft_max=1.0,
+ min=0.0, max=1.0,
+ default=0.5,
+ precision=3,
+ step=1,
+ )
+
+ @classmethod
+ def poll(self, context):
+ return True
+
+ def execute(self, context):
+ bpy.ops.gpencil.trace_image(
+ target=self.target,
+ frame_target=self.frame_target,
+ thickness=self.thickness,
+ resolution=self.resolution,
+ scale=self.scale,
+ threshold=self.threshold
+ )
+
+ return {'FINISHED'}
+
+ def invoke(self, context, _event):
+ scene = context.scene
+ self.frame_target = scene.frame_start
+
+ wm = context.window_manager
+ return wm.invoke_props_dialog(self)
+
+
+classes = (
+ GPENCIL_OT_trace,
+)
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 980f89eaaa4..462681806cf 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -242,6 +242,7 @@ class IMAGE_MT_image(Menu):
layout.separator()
layout.operator("palette.extract_from_image", text="Extract Palette")
layout.operator("gpencil.image_to_grease_pencil", text="Generate Grease Pencil")
+ layout.operator("gpencil.trace", text="Trace Image to Grease Pencil...")
class IMAGE_MT_image_invert(Menu):
diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c
index 4ad5d36a312..43d1e01ce20 100644
--- a/source/blender/editors/gpencil/gpencil_mesh.c
+++ b/source/blender/editors/gpencil/gpencil_mesh.c
@@ -396,9 +396,9 @@ void GPENCIL_OT_bake_mesh_animation(wmOperatorType *ot)
RNA_def_int(ot->srna, "frame_target", 1, 1, 100000, "Frame Target", "", 1, 100000);
RNA_def_string(ot->srna,
"target",
- "Target",
+ "*NEW",
64,
- "",
+ "Target Object",
"Target grease pencil object name. Leave empty for new object");
RNA_def_enum(ot->srna, "project_type", reproject_type, GP_REPROJECT_VIEW, "Projection Type", "");
diff --git a/source/blender/editors/gpencil/gpencil_trace.h b/source/blender/editors/gpencil/gpencil_trace.h
index a020785fc07..dfbf1ccd8a8 100644
--- a/source/blender/editors/gpencil/gpencil_trace.h
+++ b/source/blender/editors/gpencil/gpencil_trace.h
@@ -67,6 +67,9 @@ void ED_gpencil_trace_image_to_bm(struct ImBuf *ibuf,
void ED_gpencil_trace_data_to_gp(potrace_state_t *st,
struct Object *ob,
struct bGPDframe *gpf,
- int offset[2]);
+ int offset[2],
+ const float scale,
+ const int resolution,
+ const int thickness);
#endif /* __GPENCIL_TRACE_H__ */
diff --git a/source/blender/editors/gpencil/gpencil_trace_ops.c b/source/blender/editors/gpencil/gpencil_trace_ops.c
index 348dc2faba8..6916399d0bd 100644
--- a/source/blender/editors/gpencil/gpencil_trace_ops.c
+++ b/source/blender/editors/gpencil/gpencil_trace_ops.c
@@ -88,6 +88,9 @@ static int gp_trace_image_exec(bContext *C, wmOperator *op)
RNA_string_get(op->ptr, "target", target);
const int frame_target = RNA_int_get(op->ptr, "frame_target");
const float threshold = RNA_float_get(op->ptr, "threshold");
+ const float scale = RNA_float_get(op->ptr, "scale");
+ const int resolution = RNA_int_get(op->ptr, "resolution");
+ const int thickness = RNA_int_get(op->ptr, "thickness");
ImBuf *ibuf;
void *lock;
@@ -163,7 +166,7 @@ static int gp_trace_image_exec(bContext *C, wmOperator *op)
int offset[2];
offset[0] = ibuf->x / 2;
offset[1] = ibuf->y / 2;
- ED_gpencil_trace_data_to_gp(st, ob_gpencil, gpf, offset);
+ ED_gpencil_trace_data_to_gp(st, ob_gpencil, gpf, offset, scale, resolution, thickness);
/* Free memory. */
potrace_state_free(st);
@@ -206,17 +209,29 @@ void GPENCIL_OT_trace_image(wmOperatorType *ot)
"target",
"*NEW",
64,
- "",
+ "Target Object",
"Target grease pencil object name. Leave empty for new object");
RNA_def_int(ot->srna, "frame_target", 1, 1, 100000, "Frame Target", "", 1, 100000);
-
+ RNA_def_int(ot->srna, "thickness", 10, 1, 1000, "Thickness", "", 1, 1000);
+ RNA_def_int(
+ ot->srna, "resolution", 5, 1, 20, "Resolution", "Resolution of the generated curves", 1, 20);
+
+ RNA_def_float(ot->srna,
+ "scale",
+ 1.0f,
+ 0.001f,
+ 100.0f,
+ "Scale",
+ "Scale of the final stroke",
+ 0.001f,
+ 100.0f);
RNA_def_float_factor(ot->srna,
"threshold",
0.5f,
0.0f,
1.0f,
"Color Threshold",
- "Determine what is considered whithe and what black",
+ "Determine what is considered white and what black",
0.0f,
1.0f);
}
diff --git a/source/blender/editors/gpencil/gpencil_trace_utils.c b/source/blender/editors/gpencil/gpencil_trace_utils.c
index defa3fb80c7..f69fb9b4a97 100644
--- a/source/blender/editors/gpencil/gpencil_trace_utils.c
+++ b/source/blender/editors/gpencil/gpencil_trace_utils.c
@@ -232,13 +232,19 @@ static void add_bezier(bGPDstroke *gps,
* \param gpf: Currect grease pencil frame
* \param offset: Offset to center
*/
-void ED_gpencil_trace_data_to_gp(potrace_state_t *st, Object *ob, bGPDframe *gpf, int offset[2])
+void ED_gpencil_trace_data_to_gp(potrace_state_t *st,
+ Object *ob,
+ bGPDframe *gpf,
+ int offset[2],
+ const float scale,
+ const int resolution,
+ const int thickness)
{
potrace_path_t *path = st->plist;
int n, *tag;
potrace_dpoint_t(*c)[3];
- const float scale = 0.005f;
+ const float scalef = 0.005f * scale;
/* Draw each curve. */
path = st->plist;
while (path != NULL) {
@@ -246,7 +252,7 @@ void ED_gpencil_trace_data_to_gp(potrace_state_t *st, Object *ob, bGPDframe *gpf
tag = path->curve.tag;
c = path->curve.c;
/* Create a new stroke. */
- bGPDstroke *gps = BKE_gpencil_stroke_add(gpf, 0, 0, 10, false);
+ bGPDstroke *gps = BKE_gpencil_stroke_add(gpf, 0, 0, thickness, false);
/* Last point that is equals to start point. */
float start_point[2], last[2];
start_point[0] = c[n - 1][2].x;
@@ -256,11 +262,11 @@ void ED_gpencil_trace_data_to_gp(potrace_state_t *st, Object *ob, bGPDframe *gpf
switch (tag[i]) {
case POTRACE_CORNER: {
if (gps->totpoints == 0) {
- add_poin
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list