[Bf-blender-cvs] [48a7fcdf758] lanpr-under-gp: LANPR: Duplicating points in chaining stage is taken care of.

YimingWu noreply at git.blender.org
Sun Jun 7 16:29:11 CEST 2020


Commit: 48a7fcdf758277417e86833610a017bea68bf5a6
Author: YimingWu
Date:   Sun Jun 7 22:03:44 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB48a7fcdf758277417e86833610a017bea68bf5a6

LANPR: Duplicating points in chaining stage is taken care of.

===================================================================

M	source/blender/editors/lanpr/lanpr_chain.c

===================================================================

diff --git a/source/blender/editors/lanpr/lanpr_chain.c b/source/blender/editors/lanpr/lanpr_chain.c
index 91e957fd354..8f9ee9e3db2 100644
--- a/source/blender/editors/lanpr/lanpr_chain.c
+++ b/source/blender/editors/lanpr/lanpr_chain.c
@@ -21,8 +21,8 @@
  * \ingroup editors
  */
 
-#include "BLI_listbase.h"
 #include "BLI_linklist.h"
+#include "BLI_listbase.h"
 #include "BLI_math.h"
 
 #include "BKE_customdata.h"
@@ -103,6 +103,21 @@ static LANPR_RenderLineChain *lanpr_create_render_line_chain(LANPR_RenderBuffer
   return rlc;
 }
 
+static bool lanpr_check_point_overlapping(LANPR_RenderLineChainItem *rlci,
+                                          float x,
+                                          float y,
+                                          float threshold)
+{
+  if (!rlci) {
+    return false;
+  }
+  if (rlci->pos[0] + threshold > x && rlci->pos[0] - threshold < x &&
+      rlci->pos[1] + threshold > y && rlci->pos[1] - threshold < y) {
+    return true;
+  }
+  return false;
+}
+
 static LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_RenderBuffer *rb,
                                                                        LANPR_RenderLineChain *rlc,
                                                                        float x,
@@ -115,6 +130,11 @@ static LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_Ren
                                                                        int level)
 {
   LANPR_RenderLineChainItem *rlci;
+
+  if (lanpr_check_point_overlapping(rlc->chain.last, x, y, 1e-5)) {
+    return rlc->chain.last;
+  }
+
   rlci = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineChainItem));
 
   rlci->pos[0] = x;
@@ -144,6 +164,11 @@ static LANPR_RenderLineChainItem *lanpr_push_render_line_chain_point(LANPR_Rende
                                                                      int level)
 {
   LANPR_RenderLineChainItem *rlci;
+
+  if (lanpr_check_point_overlapping(rlc->chain.first, x, y, 1e-5)) {
+    return rlc->chain.first;
+  }
+
   rlci = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineChainItem));
 
   rlci->pos[0] = x;
@@ -563,10 +588,15 @@ static void lanpr_connect_two_chains(LANPR_RenderBuffer *UNUSED(rb),
                                      int reverse_1,
                                      int reverse_2)
 {
+  LANPR_RenderLineChainItem *rlci;
   if (!reverse_1) {  /*  L--R L-R */
     if (reverse_2) { /*  L--R R-L */
       BLI_listbase_reverse(&sub->chain);
     }
+    rlci = sub->chain.first;
+    if (lanpr_check_point_overlapping(onto->chain.last, rlci->pos[0], rlci->pos[1], 1e-5)) {
+      BLI_pophead(&sub->chain);
+    }
     ((LANPR_RenderLineChainItem *)onto->chain.last)->next = sub->chain.first;
     ((LANPR_RenderLineChainItem *)sub->chain.first)->prev = onto->chain.last;
     onto->chain.last = sub->chain.last;
@@ -575,6 +605,10 @@ static void lanpr_connect_two_chains(LANPR_RenderBuffer *UNUSED(rb),
     if (!reverse_2) { /*  R-L L--R */
       BLI_listbase_reverse(&sub->chain);
     }
+    rlci = onto->chain.first;
+    if (lanpr_check_point_overlapping(sub->chain.last, rlci->pos[0], rlci->pos[1], 1e-5)) {
+      BLI_pophead(&onto->chain);
+    }
     ((LANPR_RenderLineChainItem *)sub->chain.last)->next = onto->chain.first;
     ((LANPR_RenderLineChainItem *)onto->chain.first)->prev = sub->chain.last;
     onto->chain.first = sub->chain.first;



More information about the Bf-blender-cvs mailing list