[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18423] branches/etch-a-ton/source/blender /src/editarmature_sketch.c: display overdrawn stroke in gray, to easily see what is being replaced.
Martin Poirier
theeth at yahoo.com
Thu Jan 8 19:23:51 CET 2009
Revision: 18423
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18423
Author: theeth
Date: 2009-01-08 19:23:48 +0100 (Thu, 08 Jan 2009)
Log Message:
-----------
display overdrawn stroke in gray, to easily see what is being replaced.
Modified Paths:
--------------
branches/etch-a-ton/source/blender/src/editarmature_sketch.c
Modified: branches/etch-a-ton/source/blender/src/editarmature_sketch.c
===================================================================
--- branches/etch-a-ton/source/blender/src/editarmature_sketch.c 2009-01-08 18:20:47 UTC (rev 18422)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c 2009-01-08 18:23:48 UTC (rev 18423)
@@ -96,6 +96,7 @@
{
SK_Stroke *target;
int start, end;
+ int count;
} SK_Adjustment;
#define SK_Stroke_BUFFER_INIT_SIZE 20
@@ -200,6 +201,9 @@
void sk_applyConvertGesture(SK_Gesture *gest, SK_Sketch *sketch);
+void sk_resetAdjust(SK_Sketch *sketch);
+int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk);
+
/******************** GESTURE ACTIONS ******************************/
SK_GestureAction GESTURE_ACTIONS[] =
@@ -1013,6 +1017,7 @@
{
if (sketch->active_stroke != NULL)
{
+ sk_resetAdjust(sketch);
sk_removeStroke(sketch, sketch->active_stroke);
}
}
@@ -1122,7 +1127,7 @@
return pt;
}
-void sk_drawStroke(SK_Stroke *stk, int id, float color[3])
+void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
{
float rgb[3];
int i;
@@ -1153,7 +1158,14 @@
for (i = 0; i < stk->nb_points; i++)
{
- glColor3fv(rgb);
+ if (i >= start && i <= end)
+ {
+ glColor3f(0.3, 0.3, 0.3);
+ }
+ else
+ {
+ glColor3fv(rgb);
+ }
glVertex3fv(stk->points[i].p);
VecAddf(rgb, rgb, d_rgb);
}
@@ -1345,12 +1357,25 @@
return pt;
}
+void sk_resetAdjust(SK_Sketch *sketch)
+{
+ sketch->adj.target = NULL;
+ sketch->adj.start = 0;
+ sketch->adj.end = 0;
+ sketch->adj.count = 0;
+}
+
+int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk)
+{
+ return sketch->adj.target && sketch->adj.count >= 3 && (sketch->adj.target == stk || stk == NULL);
+}
+
void sk_updateAdjust(SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
if (sketch->adj.target == NULL)
{
SK_Stroke *target;
- int closest_index = 0;
+ int closest_index = -1;
int dist = SNAP_MIN_DISTANCE * 2;
for (target = sketch->strokes.first; target; target = target->next)
@@ -1371,6 +1396,11 @@
if (sketch->adj.target != NULL)
{
+ if (closest_index > -1)
+ {
+ sketch->adj.count++;
+ }
+
if (stk->nb_points == 1)
{
sketch->adj.start = closest_index;
@@ -1379,7 +1409,6 @@
{
sketch->adj.end = closest_index;
}
- sketch->adj.target->selected = 1;
}
}
else if (sketch->adj.target != NULL)
@@ -1392,49 +1421,69 @@
if (closest_pt != NULL)
{
+ sketch->adj.count++;
sketch->adj.end = index;
}
else
{
- sketch->adj.end = 0;
+ sketch->adj.end = -1;
}
}
}
+/* return 1 on reverse needed */
+int sk_adjustIndexes(SK_Sketch *sketch, int *start, int *end)
+{
+ int retval = 0;
+
+ *start = sketch->adj.start;
+ *end = sketch->adj.end;
+
+ if (*end == -1)
+ {
+ *end = sketch->adj.target->nb_points - 1;
+ }
+
+ if (*end < *start)
+ {
+ int tmp = *start;
+ *start = *end;
+ *end = tmp;
+ retval = 1;
+ }
+
+ return retval;
+}
+
void sk_endAdjust(SK_Sketch *sketch)
{
SK_Stroke *stk = sketch->active_stroke;
- if (sketch->adj.target)
+ if (sk_hasAdjust(sketch, NULL))
{
- int start = sketch->adj.start;
- int end = sketch->adj.end;
+ int start;
+ int end;
- if (end == 0)
+ if (sk_adjustIndexes(sketch, &start, &end))
{
- end = sketch->adj.target->nb_points - 1;
+ sk_reverseStroke(stk);
}
- else
- {
- sk_lastStrokePoint(stk)->type = PT_CONTINUOUS;
- }
if (start != 0)
{
stk->points->type = PT_CONTINUOUS;
}
- if (end < start)
+ if (end != sketch->adj.target->nb_points - 1)
{
- int tmp = start;
- start = end;
- end = tmp;
- sk_reverseStroke(stk);
+ sk_lastStrokePoint(stk)->type = PT_CONTINUOUS;
}
sk_inserStrokePoints(sketch->adj.target, stk->points, stk->nb_points, start, end);
sk_removeStroke(sketch, stk);
+
+ sk_resetAdjust(sketch);
}
}
@@ -1445,10 +1494,8 @@
BLI_addtail(&sketch->strokes, stk);
sketch->active_stroke = stk;
-
- sketch->adj.target = NULL;
- sketch->adj.start = 0;
- sketch->adj.end = 0;
+
+ sk_resetAdjust(sketch);
}
void sk_endStroke(SK_Sketch *sketch)
@@ -2812,7 +2859,7 @@
int id;
for (id = 1, stk = sketch->strokes.first; stk; id++, stk = stk->next)
{
- sk_drawStroke(stk, id, NULL);
+ sk_drawStroke(stk, id, NULL, -1, -1);
}
glLoadName(-1);
@@ -2824,7 +2871,15 @@
for (stk = sketch->strokes.first; stk; stk = stk->next)
{
- sk_drawStroke(stk, -1, (stk->selected==1?selected_rgb:unselected_rgb));
+ int start = -1;
+ int end = -1;
+
+ if (sk_hasAdjust(sketch, stk))
+ {
+ sk_adjustIndexes(sketch, &start, &end);
+ }
+
+ sk_drawStroke(stk, -1, (stk->selected==1?selected_rgb:unselected_rgb), start, end);
if (stk->selected == 1)
{
@@ -2836,7 +2891,7 @@
if (sketch->gesture != NULL && area_is_active_area(G.vd->area))
{
float gesture_rgb[3] = {0, 0.5, 1};
- sk_drawStroke(sketch->gesture, -1, gesture_rgb);
+ sk_drawStroke(sketch->gesture, -1, gesture_rgb, -1, -1);
}
if (sketch->active_stroke != NULL)
@@ -2860,7 +2915,7 @@
}
glEnable(GL_LINE_STIPPLE);
- glColor3f(1, 0.5, 0);
+ glColor3fv(selected_rgb);
glBegin(GL_LINE_STRIP);
glVertex3fv(last->p);
More information about the Bf-blender-cvs
mailing list