[Bf-blender-cvs] [6c54cdaab53] lanpr-under-gp: LineArt: Limit near-by bounding area look up to only one level.

YimingWu noreply at git.blender.org
Mon Oct 19 14:38:44 CEST 2020


Commit: 6c54cdaab53044293cff3bd42d738c25c5c34dc3
Author: YimingWu
Date:   Mon Oct 19 20:38:27 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB6c54cdaab53044293cff3bd42d738c25c5c34dc3

LineArt: Limit near-by bounding area look up to only one level.

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

M	source/blender/editors/lineart/lineart_chain.c

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

diff --git a/source/blender/editors/lineart/lineart_chain.c b/source/blender/editors/lineart/lineart_chain.c
index b2ca98e9a0b..289b2cc0b10 100644
--- a/source/blender/editors/lineart/lineart_chain.c
+++ b/source/blender/editors/lineart/lineart_chain.c
@@ -716,7 +716,8 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
                                                                 unsigned char transparency_mask,
                                                                 float dist,
                                                                 int do_geometry_space,
-                                                                float *result_new_len)
+                                                                float *result_new_len,
+                                                                LineartBoundingArea *caller_ba)
 {
 
   LineartChainRegisterEntry *cre, *next_cre, *closest_cre = NULL;
@@ -776,14 +777,15 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
 #define LRT_TEST_ADJACENT_AREAS(dist_to, list)\
   if(dist_to<dist && dist_to>0){\
     LISTBASE_FOREACH(LinkData* ,ld,list){\
-      adjacent_closest = lineart_chain_get_closest_cre(rb,(LineartBoundingArea*)ld->data,rlc,rlci,occlusion,transparency_mask,dist,do_geometry_space,&adjacent_new_len);\
+      LineartBoundingArea* sba = (LineartBoundingArea*)ld->data;\
+      adjacent_closest = lineart_chain_get_closest_cre(rb,sba,rlc,rlci,occlusion,transparency_mask,dist,do_geometry_space,&adjacent_new_len, ba);\
       if(adjacent_new_len < dist){\
         dist=  adjacent_new_len;\
         closest_cre = adjacent_closest;\
       }\
     }\
   }
-  if(!do_geometry_space){
+  if(!do_geometry_space && !caller_ba){
     LRT_TEST_ADJACENT_AREAS(rlci->pos[0] - ba->l, &ba->lp);
     LRT_TEST_ADJACENT_AREAS(ba->r - rlci->pos[0], &ba->rp);
     LRT_TEST_ADJACENT_AREAS(ba->u - rlci->pos[1], &ba->up);
@@ -834,9 +836,9 @@ void ED_lineart_chain_connect(LineartRenderBuffer *rb, const int do_geometry_spa
     while ((ba_l = lineart_bounding_area_get_end_point(rb, rlci_l)) &&
            (ba_r = lineart_bounding_area_get_end_point(rb, rlci_r))) {
       closest_cre_l = lineart_chain_get_closest_cre(
-          rb, ba_l, rlc, rlci_l, occlusion, transparency_mask, dist, do_geometry_space, &dist_l);
+          rb, ba_l, rlc, rlci_l, occlusion, transparency_mask, dist, do_geometry_space, &dist_l, NULL);
       closest_cre_r = lineart_chain_get_closest_cre(
-          rb, ba_r, rlc, rlci_r, occlusion, transparency_mask, dist, do_geometry_space, &dist_r);
+          rb, ba_r, rlc, rlci_r, occlusion, transparency_mask, dist, do_geometry_space, &dist_r, NULL);
       if (closest_cre_l && closest_cre_r) {
         if (dist_l < dist_r) {
           closest_cre = closest_cre_l;



More information about the Bf-blender-cvs mailing list