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:
authorYimingWu <xp8110@outlook.com>2021-03-19 15:55:38 +0300
committerSebastian Parborg <darkdefende@gmail.com>2021-03-19 20:26:33 +0300
commit3420c3d8c6cc026df093133799f116021aa9ba51 (patch)
tree648396a9ffe77041653507864b962ae5546ba986 /source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
parenta00249dd22ca2331648588b404cee87668f74aa3 (diff)
LineArt: Remove geometry space chaining
It caused some chaining errors when used in combination with image space chaining. After some internal discussion, we realized it is not useful as chaining in image space essentially does the same thing.
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c')
-rw-r--r--source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c49
1 files changed, 11 insertions, 38 deletions
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
index fae5bcd7c2e..3ac8ec378a2 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
@@ -694,7 +694,6 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
int occlusion,
unsigned char transparency_mask,
float dist,
- int do_geometry_space,
float *result_new_len,
LineartBoundingArea *caller_ba)
{
@@ -739,8 +738,7 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
}
}
- float new_len = do_geometry_space ? len_v3v3(cre->rlci->gpos, rlci->gpos) :
- len_v2v2(cre->rlci->pos, rlci->pos);
+ float new_len = len_v2v2(cre->rlci->pos, rlci->pos);
if (new_len < dist) {
closest_cre = cre;
dist = new_len;
@@ -758,23 +756,15 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
if (dist_to < dist && dist_to > 0) { \
LISTBASE_FOREACH (LinkData *, ld, list) { \
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); \
+ adjacent_closest = lineart_chain_get_closest_cre( \
+ rb, sba, rlc, rlci, occlusion, transparency_mask, dist, &adjacent_new_len, ba); \
if (adjacent_new_len < dist) { \
dist = adjacent_new_len; \
closest_cre = adjacent_closest; \
} \
} \
}
- if (!do_geometry_space && !caller_ba) {
+ if (!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);
@@ -789,20 +779,19 @@ static LineartChainRegisterEntry *lineart_chain_get_closest_cre(LineartRenderBuf
/* This function only connects two different chains. It will not do any clean up or smart chaining.
* So no: removing overlapping chains, removal of short isolated segments, and no loop reduction is
* implemented yet. */
-void MOD_lineart_chain_connect(LineartRenderBuffer *rb, const bool do_geometry_space)
+void MOD_lineart_chain_connect(LineartRenderBuffer *rb)
{
LineartLineChain *rlc;
LineartLineChainItem *rlci_l, *rlci_r;
LineartBoundingArea *ba_l, *ba_r;
LineartChainRegisterEntry *closest_cre_l, *closest_cre_r, *closest_cre;
- float dist = do_geometry_space ? rb->chaining_geometry_threshold : rb->chaining_image_threshold;
+ float dist = rb->chaining_image_threshold;
float dist_l, dist_r;
int occlusion, reverse_main;
unsigned char transparency_mask;
ListBase swap = {0};
- if ((!do_geometry_space && rb->chaining_image_threshold < 0.0001) ||
- (do_geometry_space && rb->chaining_geometry_threshold < 0.0001)) {
+ if (rb->chaining_image_threshold < 0.0001) {
return;
}
@@ -825,26 +814,10 @@ void MOD_lineart_chain_connect(LineartRenderBuffer *rb, const bool do_geometry_s
rlci_r = rlc->chain.last;
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,
- NULL);
- closest_cre_r = lineart_chain_get_closest_cre(rb,
- ba_r,
- rlc,
- rlci_r,
- occlusion,
- transparency_mask,
- dist,
- do_geometry_space,
- &dist_r,
- NULL);
+ closest_cre_l = lineart_chain_get_closest_cre(
+ rb, ba_l, rlc, rlci_l, occlusion, transparency_mask, dist, &dist_l, NULL);
+ closest_cre_r = lineart_chain_get_closest_cre(
+ rb, ba_r, rlc, rlci_r, occlusion, transparency_mask, dist, &dist_r, NULL);
if (closest_cre_l && closest_cre_r) {
if (dist_l < dist_r) {
closest_cre = closest_cre_l;