[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18639] branches/etch-a-ton/source/blender /src/editarmature_sketch.c: Prevent overdrawing to trigger when starting a stroke by snapping to an existing point .
Martin Poirier
theeth at yahoo.com
Fri Jan 23 22:34:59 CET 2009
Revision: 18639
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18639
Author: theeth
Date: 2009-01-23 22:34:51 +0100 (Fri, 23 Jan 2009)
Log Message:
-----------
Prevent overdrawing to trigger when starting a stroke by snapping to an existing point.
Overdrawing copies point type from start and end point (better for polyline)
misc renaming some structs and vars (cleanup mostly)
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-23 21:08:01 UTC (rev 18638)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c 2009-01-23 21:34:51 UTC (rev 18639)
@@ -92,14 +92,14 @@
int selected;
} SK_Stroke;
-#define SK_ADJUST_LIMIT 5
+#define SK_OVERDRAW_LIMIT 5
-typedef struct SK_Adjustment
+typedef struct SK_Overdraw
{
SK_Stroke *target;
int start, end;
int count;
-} SK_Adjustment;
+} SK_Overdraw;
#define SK_Stroke_BUFFER_INIT_SIZE 20
@@ -127,7 +127,7 @@
SK_Stroke *active_stroke;
SK_Stroke *gesture;
SK_Point next_point;
- SK_Adjustment adj;
+ SK_Overdraw over;
} SK_Sketch;
typedef struct SK_StrokeIterator {
@@ -203,8 +203,8 @@
void sk_applyConvertGesture(SK_Gesture *gest, SK_Sketch *sketch);
-void sk_resetAdjust(SK_Sketch *sketch);
-int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk);
+void sk_resetOverdraw(SK_Sketch *sketch);
+int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk);
/******************** GESTURE ACTIONS ******************************/
@@ -1065,7 +1065,7 @@
{
if (sketch->active_stroke != NULL)
{
- sk_resetAdjust(sketch);
+ sk_resetOverdraw(sketch);
sk_removeStroke(sketch, sketch->active_stroke);
}
}
@@ -1407,30 +1407,36 @@
return pt;
}
-void sk_resetAdjust(SK_Sketch *sketch)
+void sk_resetOverdraw(SK_Sketch *sketch)
{
- sketch->adj.target = NULL;
- sketch->adj.start = -1;
- sketch->adj.end = -1;
- sketch->adj.count = 0;
+ sketch->over.target = NULL;
+ sketch->over.start = -1;
+ sketch->over.end = -1;
+ sketch->over.count = 0;
}
-int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk)
+int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk)
{
- return sketch->adj.target &&
- sketch->adj.count >= SK_ADJUST_LIMIT &&
- (sketch->adj.target == stk || stk == NULL) &&
- (sketch->adj.start != -1 || sketch->adj.end != -1);
+ return sketch->over.target &&
+ sketch->over.count >= SK_OVERDRAW_LIMIT &&
+ (sketch->over.target == stk || stk == NULL) &&
+ (sketch->over.start != -1 || sketch->over.end != -1);
}
-void sk_updateAdjust(SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+void sk_updateOverdraw(SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
{
- if (sketch->adj.target == NULL)
+ if (sketch->over.target == NULL)
{
SK_Stroke *target;
int closest_index = -1;
int dist = SNAP_MIN_DISTANCE * 2;
+ /* If snapping, don't start overdraw */
+ if (sk_lastStrokePoint(stk)->mode == PT_SNAP)
+ {
+ return;
+ }
+
for (target = sketch->strokes.first; target; target = target->next)
{
if (target != stk)
@@ -1441,60 +1447,60 @@
if (spt != NULL)
{
- sketch->adj.target = target;
+ sketch->over.target = target;
closest_index = index;
}
}
}
- if (sketch->adj.target != NULL)
+ if (sketch->over.target != NULL)
{
if (closest_index > -1)
{
if (sk_lastStrokePoint(stk)->type == PT_EXACT)
{
- sketch->adj.count = SK_ADJUST_LIMIT;
+ sketch->over.count = SK_OVERDRAW_LIMIT;
}
else
{
- sketch->adj.count++;
+ sketch->over.count++;
}
}
if (stk->nb_points == 1)
{
- sketch->adj.start = closest_index;
+ sketch->over.start = closest_index;
}
else
{
- sketch->adj.end = closest_index;
+ sketch->over.end = closest_index;
}
}
}
- else if (sketch->adj.target != NULL)
+ else if (sketch->over.target != NULL)
{
SK_Point *closest_pt = NULL;
int dist = SNAP_MIN_DISTANCE * 2;
int index;
- closest_pt = sk_snapPointStroke(sketch->adj.target, dd->mval, &dist, &index);
+ closest_pt = sk_snapPointStroke(sketch->over.target, dd->mval, &dist, &index);
if (closest_pt != NULL)
{
if (sk_lastStrokePoint(stk)->type == PT_EXACT)
{
- sketch->adj.count = SK_ADJUST_LIMIT;
+ sketch->over.count = SK_OVERDRAW_LIMIT;
}
else
{
- sketch->adj.count++;
+ sketch->over.count++;
}
- sketch->adj.end = index;
+ sketch->over.end = index;
}
else
{
- sketch->adj.end = -1;
+ sketch->over.end = -1;
}
}
}
@@ -1504,8 +1510,8 @@
{
int retval = 0;
- *start = sketch->adj.start;
- *end = sketch->adj.end;
+ *start = sketch->over.start;
+ *end = sketch->over.end;
if (*start == -1)
{
@@ -1514,7 +1520,7 @@
if (*end == -1)
{
- *end = sketch->adj.target->nb_points - 1;
+ *end = sketch->over.target->nb_points - 1;
}
if (*end < *start)
@@ -1528,11 +1534,11 @@
return retval;
}
-void sk_endAdjust(SK_Sketch *sketch)
+void sk_endOverdraw(SK_Sketch *sketch)
{
SK_Stroke *stk = sketch->active_stroke;
- if (sk_hasAdjust(sketch, NULL))
+ if (sk_hasOverdraw(sketch, NULL))
{
int start;
int end;
@@ -1544,22 +1550,15 @@
if (stk->nb_points > 1)
{
- if (start != 0)
- {
- stk->points->type = PT_CONTINUOUS;
- }
-
- if (end != sketch->adj.target->nb_points - 1)
- {
- sk_lastStrokePoint(stk)->type = PT_CONTINUOUS;
- }
+ stk->points->type = sketch->over.target->points[start].type;
+ sk_lastStrokePoint(stk)->type = sketch->over.target->points[end].type;
}
- sk_inserStrokePoints(sketch->adj.target, stk->points, stk->nb_points, start, end);
+ sk_inserStrokePoints(sketch->over.target, stk->points, stk->nb_points, start, end);
sk_removeStroke(sketch, stk);
- sk_resetAdjust(sketch);
+ sk_resetOverdraw(sketch);
}
}
@@ -1571,7 +1570,7 @@
BLI_addtail(&sketch->strokes, stk);
sketch->active_stroke = stk;
- sk_resetAdjust(sketch);
+ sk_resetOverdraw(sketch);
}
void sk_endStroke(SK_Sketch *sketch)
@@ -1580,7 +1579,7 @@
if (G.scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
{
- sk_endAdjust(sketch);
+ sk_endOverdraw(sketch);
}
sketch->active_stroke = NULL;
@@ -1929,7 +1928,7 @@
if (G.scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
{
- sk_updateAdjust(sketch, stk, dd);
+ sk_updateOverdraw(sketch, stk, dd);
}
}
@@ -2953,7 +2952,7 @@
int start = -1;
int end = -1;
- if (sk_hasAdjust(sketch, stk))
+ if (sk_hasOverdraw(sketch, stk))
{
sk_adjustIndexes(sketch, &start, &end);
}
More information about the Bf-blender-cvs
mailing list