fix gentle inflections: better visuals

This commit is contained in:
Motiejus Jakštys 2021-04-12 12:26:22 +03:00
parent 0c05bd325f
commit 26f864be54
2 changed files with 28 additions and 13 deletions

View File

@ -84,6 +84,9 @@ fig5-gentle-inflection-after.pdf: layer2img.py Makefile .faux_test
python ./layer2img.py \
--group1-table=wm_debug \
--group1-where="name='fig5' AND stage='cinflections' AND gen=1" \
--group2-cmap=1 \
--group2-table=wm_debug \
--group2-where="name='fig5' AND stage='cinflections-polygon' AND gen=1" \
--outfile=$@
.faux_test: tests.sql wm.sql .faux_db

View File

@ -103,7 +103,11 @@ $$ language plpgsql;
--
-- The implementation could be significantly optimized to avoid `st_reverse`
-- and array reversals, trading for complexity in fix_gentle_inflections1.
create or replace function fix_gentle_inflections(INOUT bends geometry[]) as $$
create or replace function fix_gentle_inflections(
INOUT bends geometry[],
dbgname text default null,
dbgstagenum integer default null
) as $$
declare
len int4;
bends1 geometry[];
@ -119,6 +123,25 @@ begin
for i in 1..len loop
bends[i] = st_reverse(bends1[len-i+1]);
end loop;
if dbgname is not null then
for i in 1..array_length(bends, 1) loop
insert into wm_debug(stage, name, gen, nbend, way) values(
'cinflections',
dbgname,
dbgstagenum,
i,
bends[i]
);
insert into wm_debug(stage, name, gen, nbend, way) values(
'cinflections-polygon',
dbgname,
dbgstagenum,
i,
st_makepolygon(st_addpoint(bends[i], st_startpoint(bends[i])))
);
end loop;
end if;
end
$$ language plpgsql;
@ -428,18 +451,7 @@ begin
end if;
bends = detect_bends(lines[i], dbgname, stagenum);
bends = fix_gentle_inflections(bends);
if dbgname is not null then
insert into wm_debug(stage, name, gen, nbend, way) values(
'cinflections',
dbgname,
stagenum,
generate_subscripts(bends, 1),
unnest(bends)
);
end if;
bends = fix_gentle_inflections(bends, dbgname, stagenum);
select * from self_crossing(bends) into bends, mutated;