[Bf-blender-cvs] [9d73d038c78] greasepencil-object: GPencil: Add Offset to Stroke converted and make stronger the thickness
Antonio Vazquez
noreply at git.blender.org
Tue Mar 31 19:45:41 CEST 2020
Commit: 9d73d038c78ec540c526b4715fa64da844a278f6
Author: Antonio Vazquez
Date: Tue Mar 31 19:45:34 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB9d73d038c78ec540c526b4715fa64da844a278f6
GPencil: Add Offset to Stroke converted and make stronger the thickness
===================================================================
M source/blender/blenkernel/BKE_gpencil_geom.h
M source/blender/blenkernel/intern/gpencil_geom.c
M source/blender/editors/object/object_add.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h
index 19de8155cc9..c2564d60d44 100644
--- a/source/blender/blenkernel/BKE_gpencil_geom.h
+++ b/source/blender/blenkernel/BKE_gpencil_geom.h
@@ -113,6 +113,7 @@ void BKE_gpencil_convert_mesh(struct Main *bmain,
struct Object *ob_mesh,
const float angle,
const int thickness,
+ const float offset,
const bool use_seams,
const bool use_faces);
diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index ced14e21b1c..661beaaf4dd 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -2069,6 +2069,7 @@ static void gpencil_generate_edgeloops(Object *ob,
bGPDframe *gpf_stroke,
const float angle,
const int thickness,
+ const float offset,
const bool use_seams)
{
Mesh *me = (Mesh *)ob->data;
@@ -2080,6 +2081,7 @@ static void gpencil_generate_edgeloops(Object *ob,
uint *stroke = MEM_callocN(sizeof(uint) * me->totedge * 2, __func__);
uint *stroke_fw = MEM_callocN(sizeof(uint) * me->totedge, __func__);
uint *stroke_bw = MEM_callocN(sizeof(uint) * me->totedge, __func__);
+ const float scale = (offset > 0.0f) ? 1.0f + offset : 1.0f;
/* Create array with all edges. */
GpEdge *gp_edges = MEM_callocN(sizeof(GpEdge) * me->totedge, __func__);
@@ -2148,18 +2150,18 @@ static void gpencil_generate_edgeloops(Object *ob,
/* Create Stroke. */
bGPDstroke *gps_stroke = BKE_gpencil_stroke_add(
- gpf_stroke, 0, array_len + 1, thickness, false);
+ gpf_stroke, 0, array_len + 1, thickness * thickness, false);
/* Create first segment. */
uint v = stroke[0];
gped = &gp_edges[v];
bGPDspoint *pt = &gps_stroke->points[0];
- copy_v3_v3(&pt->x, gped->v1_co);
+ mul_v3_v3fl(&pt->x, gped->v1_co, scale);
pt->pressure = 1.0f;
pt->strength = 1.0f;
pt = &gps_stroke->points[1];
- copy_v3_v3(&pt->x, gped->v2_co);
+ mul_v3_v3fl(&pt->x, gped->v2_co, scale);
pt->pressure = 1.0f;
pt->strength = 1.0f;
@@ -2169,7 +2171,7 @@ static void gpencil_generate_edgeloops(Object *ob,
gped = &gp_edges[v];
bGPDspoint *pt = &gps_stroke->points[i + 1];
- copy_v3_v3(&pt->x, gped->v2_co);
+ mul_v3_v3fl(&pt->x, gped->v2_co, scale);
pt->pressure = 1.0f;
pt->strength = 1.0f;
}
@@ -2203,6 +2205,7 @@ void BKE_gpencil_convert_mesh(Main *bmain,
Object *ob_mesh,
const float angle,
const int thickness,
+ const float offset,
const bool use_seams,
const bool use_faces)
{
@@ -2279,7 +2282,7 @@ void BKE_gpencil_convert_mesh(Main *bmain,
/* Create stroke from edges. */
bGPDlayer *gpl_stroke = BKE_gpencil_layer_addnew(gpd, DATA_("Lines"), true);
bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get(gpl_stroke, CFRA, GP_GETFRAME_ADD_COPY);
- gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, use_seams);
+ gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, offset, use_seams);
/* Tag for recalculation */
DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 2f88d4f0e56..2d66c3977d2 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -2227,6 +2227,7 @@ static int convert_exec(bContext *C, wmOperator *op)
const int thickness = RNA_int_get(op->ptr, "thickness");
const bool use_seams = RNA_boolean_get(op->ptr, "seams");
const bool use_faces = RNA_boolean_get(op->ptr, "faces");
+ const float offset = RNA_float_get(op->ptr, "offset");
int a, mballConverted = 0;
bool gpencilConverted = false;
@@ -2354,7 +2355,7 @@ static int convert_exec(bContext *C, wmOperator *op)
copy_v3_v3(gpencil_ob->scale, size);
BKE_gpencil_convert_mesh(
- bmain, depsgraph, scene, gpencil_ob, ob, angle, thickness, use_seams, use_faces);
+ bmain, depsgraph, scene, gpencil_ob, ob, angle, thickness, offset, use_seams, use_faces);
gpencilConverted = true;
}
else if (ob->type == OB_MESH) {
@@ -2646,6 +2647,7 @@ static void convert_ui(bContext *C, wmOperator *op)
if (RNA_enum_get(&ptr, "target") == OB_GPENCIL) {
uiItemR(layout, &ptr, "angle", 0, NULL, ICON_NONE);
uiItemR(layout, &ptr, "thickness", 0, NULL, ICON_NONE);
+ uiItemR(layout, &ptr, "offset", 0, NULL, ICON_NONE);
uiItemR(layout, &ptr, "faces", 0, NULL, ICON_NONE);
uiItemR(layout, &ptr, "seams", 0, NULL, ICON_NONE);
}
@@ -2690,9 +2692,18 @@ void OBJECT_OT_convert(wmOperatorType *ot)
DEG2RADF(180.0f));
RNA_def_property_float_default(prop, DEG2RADF(70.0f));
- RNA_def_int(ot->srna, "thickness", 5, 1, 10000, "Thickness", "", 1, 200);
+ RNA_def_int(ot->srna, "thickness", 5, 1, 100, "Thickness", "", 1, 100);
RNA_def_boolean(ot->srna, "seams", 0, "Only Seam Edges", "Convert only seam edges");
RNA_def_boolean(ot->srna, "faces", 1, "Export Faces", "Export faces as filled strokes");
+ RNA_def_float_distance(ot->srna,
+ "offset",
+ 0.01f,
+ 0.0,
+ OBJECT_ADD_SIZE_MAXF,
+ "Offset",
+ "Offset strokes from fill",
+ 0.0,
+ 100.00);
}
/** \} */
More information about the Bf-blender-cvs
mailing list