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:
Diffstat (limited to 'source/blender/blenlib/intern/lasso_2d.c')
-rw-r--r--source/blender/blenlib/intern/lasso_2d.c101
1 files changed, 57 insertions, 44 deletions
diff --git a/source/blender/blenlib/intern/lasso_2d.c b/source/blender/blenlib/intern/lasso_2d.c
index a8eb9f09041..f1e9b1e655f 100644
--- a/source/blender/blenlib/intern/lasso_2d.c
+++ b/source/blender/blenlib/intern/lasso_2d.c
@@ -30,63 +30,76 @@
void BLI_lasso_boundbox(rcti *rect, const int mcords[][2], const unsigned int moves)
{
- unsigned int a;
-
- rect->xmin = rect->xmax = mcords[0][0];
- rect->ymin = rect->ymax = mcords[0][1];
-
- for (a = 1; a < moves; a++) {
- if (mcords[a][0] < rect->xmin) { rect->xmin = mcords[a][0]; }
- else if (mcords[a][0] > rect->xmax) { rect->xmax = mcords[a][0]; }
- if (mcords[a][1] < rect->ymin) { rect->ymin = mcords[a][1]; }
- else if (mcords[a][1] > rect->ymax) { rect->ymax = mcords[a][1]; }
- }
+ unsigned int a;
+
+ rect->xmin = rect->xmax = mcords[0][0];
+ rect->ymin = rect->ymax = mcords[0][1];
+
+ for (a = 1; a < moves; a++) {
+ if (mcords[a][0] < rect->xmin) {
+ rect->xmin = mcords[a][0];
+ }
+ else if (mcords[a][0] > rect->xmax) {
+ rect->xmax = mcords[a][0];
+ }
+ if (mcords[a][1] < rect->ymin) {
+ rect->ymin = mcords[a][1];
+ }
+ else if (mcords[a][1] > rect->ymax) {
+ rect->ymax = mcords[a][1];
+ }
+ }
}
-
-bool BLI_lasso_is_point_inside(const int mcords[][2], const unsigned int moves,
- const int sx, const int sy,
+bool BLI_lasso_is_point_inside(const int mcords[][2],
+ const unsigned int moves,
+ const int sx,
+ const int sy,
const int error_value)
{
- if (sx == error_value || moves == 0) {
- return false;
- }
- else {
- int pt[2] = {sx, sy};
- return isect_point_poly_v2_int(pt, mcords, moves, true);
- }
+ if (sx == error_value || moves == 0) {
+ return false;
+ }
+ else {
+ int pt[2] = {sx, sy};
+ return isect_point_poly_v2_int(pt, mcords, moves, true);
+ }
}
/* edge version for lasso select. we assume boundbox check was done */
-bool BLI_lasso_is_edge_inside(const int mcords[][2], const unsigned int moves,
- int x0, int y0, int x1, int y1,
+bool BLI_lasso_is_edge_inside(const int mcords[][2],
+ const unsigned int moves,
+ int x0,
+ int y0,
+ int x1,
+ int y1,
const int error_value)
{
- if (x0 == error_value || x1 == error_value || moves == 0) {
- return false;
- }
+ if (x0 == error_value || x1 == error_value || moves == 0) {
+ return false;
+ }
- const int v1[2] = {x0, y0}, v2[2] = {x1, y1};
+ const int v1[2] = {x0, y0}, v2[2] = {x1, y1};
- /* check points in lasso */
- if (BLI_lasso_is_point_inside(mcords, moves, v1[0], v1[1], error_value)) {
- return true;
- }
- if (BLI_lasso_is_point_inside(mcords, moves, v2[0], v2[1], error_value)) {
- return true;
- }
+ /* check points in lasso */
+ if (BLI_lasso_is_point_inside(mcords, moves, v1[0], v1[1], error_value)) {
+ return true;
+ }
+ if (BLI_lasso_is_point_inside(mcords, moves, v2[0], v2[1], error_value)) {
+ return true;
+ }
- /* no points in lasso, so we have to intersect with lasso edge */
+ /* no points in lasso, so we have to intersect with lasso edge */
- if (isect_seg_seg_v2_int(mcords[0], mcords[moves - 1], v1, v2) > 0) {
- return true;
- }
- for (unsigned int a = 0; a < moves - 1; a++) {
- if (isect_seg_seg_v2_int(mcords[a], mcords[a + 1], v1, v2) > 0) {
- return true;
- }
- }
+ if (isect_seg_seg_v2_int(mcords[0], mcords[moves - 1], v1, v2) > 0) {
+ return true;
+ }
+ for (unsigned int a = 0; a < moves - 1; a++) {
+ if (isect_seg_seg_v2_int(mcords[a], mcords[a + 1], v1, v2) > 0) {
+ return true;
+ }
+ }
- return false;
+ return false;
}