[Bf-blender-cvs] [a4a7073f6c8] greasepencil-object: GPencil: New Tools for transforming UVs
Antonio Vazquez
noreply at git.blender.org
Wed Oct 2 15:42:59 CEST 2019
Commit: a4a7073f6c878efeb604501a2682c72c8fc4bd21
Author: Antonio Vazquez
Date: Tue Oct 1 13:42:22 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rBa4a7073f6c878efeb604501a2682c72c8fc4bd21
GPencil: New Tools for transforming UVs
The new tools are for translate, rotate and scale the UVs for any fill stroke using texture.
This was a missing option for UVs in grease pencil.
===================================================================
M release/scripts/presets/keyconfig/keymap_data/blender_default.py
M release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M source/blender/blenkernel/intern/gpencil.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M source/blender/editors/gpencil/CMakeLists.txt
M source/blender/editors/gpencil/annotate_paint.c
M source/blender/editors/gpencil/gpencil_intern.h
M source/blender/editors/gpencil/gpencil_ops.c
M source/blender/editors/gpencil/gpencil_primitive.c
A source/blender/editors/gpencil/gpencil_uv.c
M source/blender/editors/space_view3d/view3d_gizmo_ruler.c
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesrna/intern/rna_gpencil.c
===================================================================
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index fafe950dfd8..0c726dca66d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5959,6 +5959,39 @@ def km_3d_view_tool_edit_gpencil_to_sphere(params):
)
+def km_3d_view_tool_edit_gpencil_translate_uv(params):
+ return (
+ "3D View Tool: Edit Gpencil, Translate UV",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("gpencil.transform_uv", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("mode", 'TRANSLATE'), ("release_confirm", True)]}),
+ ]},
+ )
+
+
+def km_3d_view_tool_edit_gpencil_rotate_uv(params):
+ return (
+ "3D View Tool: Edit Gpencil, Rotate UV",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("gpencil.transform_uv", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("mode", 'ROTATE'), ("release_confirm", True)]}),
+ ]},
+ )
+
+
+def km_3d_view_tool_edit_gpencil_scale_uv(params):
+ return (
+ "3D View Tool: Edit Gpencil, Scale UV",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("gpencil.transform_uv", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("mode", 'SCALE'), ("release_confirm", True)]}),
+ ]},
+ )
+
+
# Also used for weight paint.
def km_3d_view_tool_sculpt_gpencil_paint(_params):
return (
@@ -6216,6 +6249,9 @@ def generate_keymaps(params=None):
km_3d_view_tool_edit_gpencil_bend(params),
km_3d_view_tool_edit_gpencil_shear(params),
km_3d_view_tool_edit_gpencil_to_sphere(params),
+ km_3d_view_tool_edit_gpencil_translate_uv(params),
+ km_3d_view_tool_edit_gpencil_rotate_uv(params),
+ km_3d_view_tool_edit_gpencil_scale_uv(params),
km_3d_view_tool_sculpt_gpencil_paint(params),
km_3d_view_tool_sculpt_gpencil_select(params),
km_3d_view_tool_sculpt_gpencil_select_box(params),
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index aa5be13c01b..2ac2e256f74 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1522,6 +1522,38 @@ class _defs_gpencil_edit:
draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings,
)
+ @ToolDef.from_fn
+ def transform_uv_translate():
+ return dict(
+ idname="builtin.translate_uv",
+ label="Translate UV",
+ icon="ops.gpencil.translate_uv",
+ cursor='DEFAULT',
+ widget=None,
+ keymap=(),
+ )
+
+ @ToolDef.from_fn
+ def transform_uv_rotate():
+ return dict(
+ idname="builtin.rotate_uv",
+ label="Rotate UV",
+ icon="ops.gpencil.rotate_uv",
+ cursor='DEFAULT',
+ widget=None,
+ keymap=(),
+ )
+
+ @ToolDef.from_fn
+ def transform_uv_scale():
+ return dict(
+ idname="builtin.scale_uv",
+ label="Scale UV",
+ icon="ops.gpencil.scale_uv",
+ cursor='DEFAULT',
+ widget=None,
+ keymap=(),
+ )
class _defs_gpencil_sculpt:
@@ -2063,7 +2095,10 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
_defs_gpencil_edit.shear,
_defs_gpencil_edit.tosphere,
),
-
+ None,
+ _defs_gpencil_edit.transform_uv_translate,
+ _defs_gpencil_edit.transform_uv_rotate,
+ _defs_gpencil_edit.transform_uv_scale,
],
'SCULPT_GPENCIL': [
_defs_gpencil_sculpt.generate_from_brushes,
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index f78833a0ebe..26fa7c5058c 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -484,6 +484,8 @@ bGPDstroke *BKE_gpencil_add_stroke(bGPDframe *gpf, int mat_idx, int totpoints, s
gps->gradient_s[0] = 1.0f;
gps->gradient_s[1] = 1.0f;
+ gps->uv_scale = 1.0f;
+
gps->inittime = 0;
/* enable recalculation flag by default */
@@ -2739,6 +2741,8 @@ static void gpencil_convert_spline(Main *bmain,
bGPDstroke *gps = MEM_callocN(sizeof(bGPDstroke), "bGPDstroke");
gps->thickness = 1.0f;
gps->gradient_f = 1.0f;
+ gps->uv_scale = 1.0f;
+
ARRAY_SET_ITEMS(gps->gradient_s, 1.0f, 1.0f);
ARRAY_SET_ITEMS(gps->caps, GP_STROKE_CAP_ROUND, GP_STROKE_CAP_ROUND);
gps->inittime = 0.0f;
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 7ea1d25f86d..c8d0ea0c01b 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3857,7 +3857,6 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
- /* Fix wrong 3D viewport copying causing corrupt pointers (T69974). */
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
@@ -3902,5 +3901,20 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
+
+ {
+ /* Fix new grease pencil uv scale. */
+ if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", "float", "uv_scale")) {
+ for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ gps->uv_scale = 1.0f;
+ }
+ }
+ }
+ }
+ }
+ }
}
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index ce5d8cbf732..7dc5c164ccb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -308,17 +308,43 @@ static void gpencil_calc_2d_bounding_box(const float (*points2d)[2],
/* calc texture coordinates using flat projected points */
static void gpencil_calc_stroke_fill_uv(const float (*points2d)[2],
- int totpoints,
+ bGPDstroke *gps,
const float minv[2],
float maxv[2],
float (*r_uv)[2])
{
+ const float s = sin(gps->uv_rotation);
+ const float c = cos(gps->uv_rotation);
+
+ /* Calc center for rotation. */
+ float center[2] = {0.5f, 0.5f};
+ // sub_v2_v2v2(center, maxv, minv);
+ // mul_v2_fl(center, 0.5f);
+
float d[2];
d[0] = maxv[0] - minv[0];
d[1] = maxv[1] - minv[1];
- for (int i = 0; i < totpoints; i++) {
+ for (int i = 0; i < gps->totpoints; i++) {
r_uv[i][0] = (points2d[i][0] - minv[0]) / d[0];
r_uv[i][1] = (points2d[i][1] - minv[1]) / d[1];
+
+ /* Apply translation. */
+ add_v2_v2(r_uv[i], gps->uv_translation);
+
+ /* Apply Rotation. */
+ r_uv[i][0] -= center[0];
+ r_uv[i][1] -= center[1];
+
+ float x = r_uv[i][0] * c - r_uv[i][1] * s;
+ float y = r_uv[i][0] * s + r_uv[i][1] * c;
+
+ r_uv[i][0] = x + center[0];
+ r_uv[i][1] = y + center[1];
+
+ /* Apply scale. */
+ if (gps->uv_scale != 0.0f) {
+ mul_v2_fl(r_uv[i], 1.0f / gps->uv_scale);
+ }
}
}
@@ -1525,7 +1551,7 @@ void gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
}
/* calc uv data */
- gpencil_calc_stroke_fill_uv(points2d, gps->totpoints, minv, maxv, uv);
+ gpencil_calc_stroke_fill_uv(points2d, gps, minv, maxv, uv);
/* Number of triangles */
gps->tot_triangles = gps->totpoints - 2;
diff --git a/source/blender/editors/gpencil/CMakeLists.txt b/source/blender/editors/gpencil/CMakeLists.txt
index 21f1801f7eb..0ba081de8ca 100644
--- a/source/blender/editors/gpencil/CMakeLists.txt
+++ b/source/blender/editors/gpencil/CMakeLists.txt
@@ -57,6 +57,7 @@ set(SRC
gpencil_select.c
gpencil_undo.c
gpencil_utils.c
+ gpencil_uv.c
gpencil_intern.h
)
diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c
index 7a10547f35c..c19a9276d01 100644
--- a/source/blender/editors/gpencil/annotate_paint.c
+++ b/source/blender/editors/gpencil/annotate_paint.c
@@ -614,6 +614,7 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
gps->gradient_f = 1.0f;
gps->gradient_s[0] = 1.0f;
gps->gradient_s[1] = 1.0f;
+ gps->uv_scale = 1.0f;
gps->flag = gpd->runtime.sbuffer_sflag;
gps->inittime = p->inittime;
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index a8f8ec0e8c5..be526186709 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -492,6 +492,8 @@ void GPENCIL_OT_stroke_cutter(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_trim(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_merge_by_distance(struct wmOperatorType *ot);
+void GPENCIL_OT_transform_uv(struct wmOperatorType *ot);
+
void GPENCIL_OT_brush_presets_create(struct wmOperatorType *ot);
/* undo stack ---------- */
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index ce410f3e52d..6c960bd46e7 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -322,6 +322,8 @@ void ED_operatortypes_gpencil(void)
WM_operatortype_append(GPENCIL_OT_stroke_trim);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list