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:
authorCampbell Barton <ideasman42@gmail.com>2012-04-20 16:05:08 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-04-20 16:05:08 +0400
commitaa02acfe952cb8464df24e2fea94a1f8f2403642 (patch)
treeaf21a3c77faf3f467247f88bbd2b3d0175ede2b6 /source/blender/editors/mesh/editmesh_knife.c
parent617af9d99d2960b96e308d09abf230a92b7d14f1 (diff)
knife tool: store color once on initializations, de-select only when cutting selected.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_knife.c')
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c66
1 files changed, 35 insertions, 31 deletions
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index a99bd9b5f3a..65b65a68a6f 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -71,6 +71,15 @@
#define KMAXDIST 10 /* max mouse distance from edge before not detecting it */
+typedef struct KnifeColors {
+ unsigned char line[3];
+ unsigned char edge[3];
+ unsigned char curpoint[3];
+ unsigned char curpoint_a[4];
+ unsigned char point[3];
+ unsigned char point_a[4];
+} KnifeColors;
+
/* knifetool operator */
typedef struct KnifeVert {
BMVert *v; /* non-NULL if this is an original vert */
@@ -158,13 +167,14 @@ typedef struct knifetool_opdata {
float projmat[4][4];
- short is_ortho;
+ KnifeColors colors;
/* operatpr options */
char cut_through; /* preference, can be modified at runtime (that feature may go) */
char only_select; /* set on initialization */
char select_result; /* set on initialization */
+ short is_ortho;
float clipsta, clipend;
enum {
@@ -876,23 +886,19 @@ static void knifetool_draw_angle_snapping(knifetool_opdata *kcd)
glEnd();
}
-static void knife_colors(unsigned char c_line[3],
- unsigned char c_edge[3],
- unsigned char c_curpoint[3],
- unsigned char c_curpoint_a[4],
- unsigned char c_point[3],
- unsigned char c_point_a[4]) {
- /* possible BMESH_TODO: add explicit themes or calculate these by
- * figuring out constrasting colors with grid / edges / verts
- * a la UI_make_axis_color */
- UI_GetThemeColor3ubv(TH_NURB_VLINE, c_line);
- UI_GetThemeColor3ubv(TH_NURB_ULINE, c_edge);
- UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint);
- UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, c_curpoint_a);
- c_curpoint_a[3] = 0.4;
- UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point);
- UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, c_point_a);
- c_point_a[3] = 0.4;
+static void knife_init_colors(KnifeColors *colors)
+{
+ /* possible BMESH_TODO: add explicit themes or calculate these by
+ * figuring out constrasting colors with grid / edges / verts
+ * a la UI_make_axis_color */
+ UI_GetThemeColor3ubv(TH_NURB_VLINE, colors->line);
+ UI_GetThemeColor3ubv(TH_NURB_ULINE, colors->edge);
+ UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint);
+ UI_GetThemeColor3ubv(TH_HANDLE_SEL_VECT, colors->curpoint_a);
+ colors->curpoint_a[3] = 0.4;
+ UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point);
+ UI_GetThemeColor3ubv(TH_ACTIVE_SPLINE, colors->point_a);
+ colors->point_a[3] = 0.4;
}
/* modal loop selection drawing callback */
@@ -900,8 +906,6 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
{
View3D *v3d = CTX_wm_view3d(C);
knifetool_opdata *kcd = arg;
- unsigned char c_line[3], c_edge[3], c_curpoint[3], c_point[3];
- unsigned char c_curpoint_a[4], c_point_a[4];
if(v3d->zbuf) glDisable(GL_DEPTH_TEST);
@@ -910,13 +914,11 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glPushMatrix();
glMultMatrixf(kcd->ob->obmat);
- knife_colors(c_line, c_edge, c_curpoint, c_curpoint_a, c_point, c_point_a);
-
if (kcd->mode == MODE_DRAGGING) {
if (kcd->angle_snapping != ANGLE_FREE)
knifetool_draw_angle_snapping(kcd);
- glColor3ubv(c_line);
+ glColor3ubv(kcd->colors.line);
glLineWidth(2.0);
@@ -929,7 +931,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
}
if (kcd->cur.edge) {
- glColor3ubv(c_edge);
+ glColor3ubv(kcd->colors.edge);
glLineWidth(2.0);
glBegin(GL_LINES);
@@ -940,7 +942,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glLineWidth(1.0);
}
else if (kcd->cur.vert) {
- glColor3ubv(c_point);
+ glColor3ubv(kcd->colors.point);
glPointSize(11);
glBegin(GL_POINTS);
@@ -949,7 +951,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
}
if (kcd->cur.bmface) {
- glColor3ubv(c_curpoint);
+ glColor3ubv(kcd->colors.curpoint);
glPointSize(9);
glBegin(GL_POINTS);
@@ -965,7 +967,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* draw any snapped verts first */
- glColor4ubv(c_point_a);
+ glColor4ubv(kcd->colors.point_a);
glPointSize(11);
glBegin(GL_POINTS);
lh = kcd->linehits;
@@ -990,7 +992,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glEnd();
/* now draw the rest */
- glColor4ubv(c_curpoint_a);
+ glColor4ubv(kcd->colors.curpoint_a);
glPointSize(7);
glBegin(GL_POINTS);
lh = kcd->linehits;
@@ -1013,7 +1015,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
if (!kfe->draw)
continue;
- glColor3ubv(c_line);
+ glColor3ubv(kcd->colors.line);
glVertex3fv(kfe->v1->cageco);
glVertex3fv(kfe->v2->cageco);
@@ -1035,7 +1037,7 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
if (!kfv->draw)
continue;
- glColor3ubv(c_point);
+ glColor3ubv(kcd->colors.point);
glVertex3fv(kfv->cageco);
}
@@ -2655,7 +2657,7 @@ static void knife_make_cuts(knifetool_opdata *kcd)
}
}
- if (kcd->select_result) {
+ if (kcd->only_select) {
EDBM_flag_disable_all(kcd->em, BM_ELEM_SELECT);
}
@@ -2845,6 +2847,8 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut))
knife_pos_data_clear(&kcd->cur);
knife_pos_data_clear(&kcd->prev);
+ knife_init_colors(&kcd->colors);
+
return 1;
}