[Bf-blender-cvs] [4ce6dfcd85c] greasepencil-object: GP: Primitive: Arc tool changes
Charlie Jolly
noreply at git.blender.org
Wed Dec 12 15:13:31 CET 2018
Commit: 4ce6dfcd85c48498c302a2310c7b266111fb980d
Author: Charlie Jolly
Date: Wed Dec 12 14:13:03 2018 +0000
Branches: greasepencil-object
https://developer.blender.org/rB4ce6dfcd85c48498c302a2310c7b266111fb980d
GP: Primitive: Arc tool changes
Added back constraint option to draw perfect arcs
Added back flip option
===================================================================
M source/blender/editors/gpencil/gpencil_intern.h
M source/blender/editors/gpencil/gpencil_primitive.c
===================================================================
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index df36529ca18..956ad0643c9 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -156,6 +156,7 @@ typedef struct tGPDprimitive {
struct bGPDframe *gpf; /* frame */
int type; /* type of primitive */
bool curve; /* type of primitive is a curve */
+ short flip; /* flip option */
tGPspoint *points; /* array of data-points for stroke */
int point_count; /* number of edges allocated */
int tot_stored_edges; /* stored number of polygon edges */
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index e2f072530a6..3feb8b9ce5a 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -466,7 +466,8 @@ static void gp_primitive_arc(tGPDprimitive *tgpi, tGPspoint *points2D)
float corner[2];
float midpoint[2];
float a = 0.0f;
-
+
+ mid_v2_v2v2(tgpi->midpoint, tgpi->start, tgpi->end);
copy_v2_v2(start, tgpi->start);
copy_v2_v2(end, tgpi->end);
copy_v2_v2(cp1, tgpi->cp1);
@@ -485,8 +486,12 @@ static void gp_primitive_arc(tGPDprimitive *tgpi, tGPspoint *points2D)
UI_GetThemeColor4fv(TH_ACTIVE_VERT, color);
gp_primitive_set_cp(tgpi, tgpi->start, color, BIG_SIZE_CTL);
gp_primitive_set_cp(tgpi, tgpi->end, color, BIG_SIZE_CTL);
+ /*UI_GetThemeColor4fv(TH_REDALERT, color);
+ gp_primitive_set_cp(tgpi, tgpi->midpoint, color, SMALL_SIZE_CTL);
+ gp_primitive_set_cp(tgpi, corner, color, SMALL_SIZE_CTL);*/
UI_GetThemeColor4fv(TH_GP_VERTEX_SELECT, color);
gp_primitive_set_cp(tgpi, tgpi->cp1, color, BIG_SIZE_CTL * 0.9f);
+
}
/* create a bezier */
@@ -569,6 +574,7 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
/* compute screen-space coordinates for points */
tGPspoint *points2D = tgpi->points;
+
switch (tgpi->type) {
case GP_STROKE_BOX:
gp_primitive_rectangle(tgpi, points2D);
@@ -998,14 +1004,6 @@ static void gpencil_primitive_interaction_end(bContext *C, wmOperator *op, wmWin
gpencil_primitive_exit(C, op);
}
-/* Helper to set bezier cp */
-static void gpencil_primitive_set_midpoint(tGPDprimitive *tgpi)
-{
- mid_v2_v2v2(tgpi->midpoint, tgpi->start, tgpi->end);
- copy_v2_v2(tgpi->cp1, tgpi->midpoint);
- copy_v2_v2(tgpi->cp2, tgpi->cp1);
-}
-
/* Helper to square a primitive */
static void gpencil_primitive_to_square(tGPDprimitive *tgpi, const float x, const float y)
{
@@ -1025,6 +1023,23 @@ static void gpencil_primitive_to_square(tGPDprimitive *tgpi, const float x, cons
}
}
+/* Helper to update cps */
+static void gp_primitive_update_cps(tGPDprimitive *tgpi)
+{
+ if (tgpi->type == GP_STROKE_ARC) {
+ if (tgpi->flip)
+ copy_v2_fl2(tgpi->cp1, tgpi->start[0], tgpi->end[1]);
+ else
+ copy_v2_fl2(tgpi->cp1, tgpi->end[0], tgpi->start[1]);
+ mid_v2_v2v2(tgpi->midpoint, tgpi->start, tgpi->end);
+ }
+ else if (tgpi->type == GP_STROKE_CURVE) {
+ mid_v2_v2v2(tgpi->midpoint, tgpi->start, tgpi->end);
+ copy_v2_v2(tgpi->cp1, tgpi->midpoint);
+ copy_v2_v2(tgpi->cp2, tgpi->cp1);
+ }
+}
+
#define MOVE_NONE 0
#define MOVE_ENDS 1
#define MOVE_CP 2
@@ -1066,12 +1081,12 @@ static void gpencil_primitive_arc_event_handling(bContext *C, wmOperator *op, wm
copy_v2_v2(tgpi->cp2, tgpi->cp1);
}
copy_v2_v2(tgpi->mvalo, tgpi->mval);
-
+
/* update screen */
gpencil_primitive_update(C, op, tgpi);
}
- else if ((event->val == KM_PRESS)) {
- gpencil_primitive_set_midpoint(tgpi);
+ else if ((tgpi->flag == IN_PROGRESS)) {
+ gp_primitive_update_cps(tgpi);
gpencil_primitive_update(C, op, tgpi);
}
break;
@@ -1090,21 +1105,38 @@ static void gpencil_primitive_arc_event_handling(bContext *C, wmOperator *op, wm
else if ((event->val == KM_RELEASE) && (tgpi->flag == IN_PROGRESS)) {
/* set control points and enter edit mode */
tgpi->flag = IN_CURVE_EDIT;
- gpencil_primitive_set_midpoint(tgpi);
- copy_v2_v2(tgpi->mvalo, tgpi->mval);
+ gp_primitive_update_cps(tgpi);
gpencil_primitive_update(C, op, tgpi);
}
else {
tgpi->sel_cp = SELECT_NONE;
}
break;
+ case FKEY:
+ {
+ if ((event->val == KM_RELEASE)) {
+ tgpi->flip ^= 1;
+
+ if ((tgpi->flag == IN_PROGRESS)) {
+ gp_primitive_update_cps(tgpi);
+ }
+ else if ((tgpi->flag == IN_CURVE_EDIT)) {
+ mid_v2_v2v2(tgpi->midpoint, tgpi->start, tgpi->end);
+ tgpi->cp1[0] = tgpi->midpoint[0] - (tgpi->cp1[0] - tgpi->midpoint[0]);
+ tgpi->cp1[1] = tgpi->midpoint[1] - (tgpi->cp1[1] - tgpi->midpoint[1]);
+ }
+ gpencil_primitive_update(C, op, tgpi);
+ }
+ break;
+ }
+
case AKEY:
if (tgpi->flag == IN_CURVE_EDIT) {
tgpi->flag = IN_PROGRESS;
gpencil_primitive_add_segment(tgpi);
copy_v2_v2(tgpi->start, tgpi->end);
copy_v2_v2(tgpi->origin, tgpi->start);
- gpencil_primitive_set_midpoint(tgpi);
+ gp_primitive_update_cps(tgpi);
copy_v2_v2(tgpi->mvalo, tgpi->mval);
}
break;
@@ -1163,7 +1195,7 @@ static void gpencil_primitive_bezier_event_handling(bContext *C, wmOperator *op,
gpencil_primitive_update(C, op, tgpi);
}
else if ((event->val == KM_PRESS)) {
- gpencil_primitive_set_midpoint(tgpi);
+ gp_primitive_update_cps(tgpi);
gpencil_primitive_update(C, op, tgpi);
}
break;
@@ -1182,7 +1214,7 @@ static void gpencil_primitive_bezier_event_handling(bContext *C, wmOperator *op,
else if ((event->val == KM_RELEASE) && (tgpi->flag == IN_PROGRESS)) {
/* set control points and enter edit mode */
tgpi->flag = IN_CURVE_EDIT;
- gpencil_primitive_set_midpoint(tgpi);
+ gp_primitive_update_cps(tgpi);
copy_v2_v2(tgpi->mvalo, tgpi->mval);
gpencil_primitive_update(C, op, tgpi);
}
@@ -1196,7 +1228,7 @@ static void gpencil_primitive_bezier_event_handling(bContext *C, wmOperator *op,
gpencil_primitive_add_segment(tgpi);
copy_v2_v2(tgpi->start, tgpi->end);
copy_v2_v2(tgpi->origin, tgpi->start);
- gpencil_primitive_set_midpoint(tgpi);
+ gp_primitive_update_cps(tgpi);
copy_v2_v2(tgpi->mvalo, tgpi->mval);
}
break;
More information about the Bf-blender-cvs
mailing list