[Bf-blender-cvs] [bc1b7a7af19] soc-2019-npr: LANPR: Chain connection is now working properly

Yiming Wu noreply at git.blender.org
Wed Jun 12 15:06:03 CEST 2019


Commit: bc1b7a7af19e229812ff56e0825b56b977fbed43
Author: Yiming Wu
Date:   Wed Jun 12 21:05:53 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBbc1b7a7af19e229812ff56e0825b56b977fbed43

LANPR: Chain connection is now working properly

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

M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_data_types.h

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index dc2986e4eb9..5df0b79fbc4 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -456,6 +456,7 @@ void lanpr_link_point_with_bounding_area_recursive(
   if (!root->child) {
     LANPR_ChainRegisterEntry* cre = list_append_pointer_static_sized(&root->linked_chains, &rb->render_data_pool, rlc, sizeof(LANPR_ChainRegisterEntry));
     cre->rlci = rlci;
+    if(rlci==rlc->chain.first) cre->is_left = 1;
   }
   else {
     LANPR_BoundingArea* ch = root->child;
@@ -568,9 +569,12 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
   rb->chains.last = rb->chains.first = NULL;
 
   while (rlc = BLI_pophead(&swap)) {
+    rlc->item.next=rlc->item.prev=NULL;
     BLI_addtail(&rb->chains, rlc);
     if(rlc->picked) continue;
 
+    rlc->picked = 1;
+
     occlusion = ((LANPR_RenderLineChainItem*)rlc->chain.first)->occlusion;
 
     rlci = rlc->chain.last;
@@ -591,17 +595,16 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
           dist = new_len;
         }
       }
-      if(dist<0.05f && closest_cre){
+      if(dist<0.01f && closest_cre){
         closest_cre->picked = 1;
         closest_cre->rlc->picked = 1;
         BLI_remlink(&ba->linked_chains,cre);
-        if(closest_cre->rlci == closest_cre->rlc->chain.first){
+        if(closest_cre->is_left){
           lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,0,0);
-          BLI_remlink(&swap,closest_cre->rlc);
         }else{
           lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,0,1);
-          BLI_remlink(&swap,closest_cre->rlc);
         }
+        BLI_remlink(&swap,closest_cre->rlc);
       }else{
         break;
       }
@@ -627,17 +630,16 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
           dist = new_len;
         }
       }
-      if(dist<0.05f && closest_cre){
+      if(dist<0.01f && closest_cre){
         closest_cre->picked = 1;
         closest_cre->rlc->picked = 1;
         BLI_remlink(&ba->linked_chains,cre);
-        if(closest_cre->rlci == closest_cre->rlc->chain.first){
-          BLI_remlink(&swap,closest_cre->rlc);
+        if(closest_cre->is_left){
           lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,1,0);
         }else{
           lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,1,1);
-          BLI_remlink(&swap,closest_cre->rlc);
         }
+        BLI_remlink(&swap,closest_cre->rlc);
       }else{
         break;
       }
diff --git a/source/blender/draw/engines/lanpr/lanpr_data_types.h b/source/blender/draw/engines/lanpr/lanpr_data_types.h
index d7a32899d40..1b248ce167f 100644
--- a/source/blender/draw/engines/lanpr/lanpr_data_types.h
+++ b/source/blender/draw/engines/lanpr/lanpr_data_types.h
@@ -139,6 +139,7 @@ typedef struct LANPR_ChainRegisterEntry{
   LANPR_RenderLineChain*     rlc;
   LANPR_RenderLineChainItem* rlci;
   char                       picked;
+  char                       is_left; // left/right mark. Because we revert list in chaining and we need the flag.
 } LANPR_ChainRegisterEntry;
 
 #endif
\ No newline at end of file



More information about the Bf-blender-cvs mailing list