Opened 17 years ago
Closed 17 years ago
#155 closed defect (fixed)
ps.map: the "M" highlight problem
Reported by: | perk | Owned by: | hamish |
---|---|---|---|
Priority: | minor | Milestone: | 6.4.0 |
Component: | Default | Version: | svn-trunk |
Keywords: | ps.map highlight text labels | Cc: | grass-dev@… |
CPU: | Unspecified | Platform: | Unspecified |
Description
Using any highlight on text
and labels
produces some very bad looking results. I call this the "M" problem, because I first noticed it in labels with a capital M, but other letters are affected too. I've attached a sample that pretty clearly shows the problem.
I see two pretty easy ways to fix this: temporarily change (1) the miter length or (2) the line join style when the highlight path gets stroked. I've chosen the latter, because I think it looks better. I've attached a patch for ps/ps.map/prolog.ps. It is marked as a binary file for some reason, so I was not able to do "svn diff". I've also attached the same ps.map output sample made after the fix.
Attachments (3)
Change History (10)
by , 17 years ago
Attachment: | the-M-problem-original.png added |
---|
comment:1 by , 17 years ago
Keywords: | text labels added |
---|
follow-up: 4 comment:2 by , 17 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
nice to finally see a solution for this, thanks.
before applying the patch I would like to ask about possible side effects -- does the "currentlinejoin 1 setlinejoin stroke setlinejoin" part need to be swiched off after drawing the labels, or will it be self contained?
could a similar technique be used to connect .eps pattern tiles? eg broken lines: http://grass.osgeo.org/wiki/Psmap_flooding_example
you might also see that d.labels does not do very well with larger values for the highlight width. In that case I guess the solution is to also smear the color using the "knight's move" or similar, not just the 8 cardinal+ordinal directions.
I've attached a patch for ps/ps.map/prolog.ps. It is marked as a binary file for some reason, so I was not able to do "svn diff".
$ svn proplist prolog.ps Properties on 'prolog.ps': svn:mime-type $ svn propget svn:mime-type prolog.ps application/postscript $ svn diff prolog.ps Index: prolog.ps =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/postscript
svn bug? (PostScript is ASCII)
fwiw, trac does nice markup when you click on the .diff file.
Hamish
comment:3 by , 17 years ago
spearfish example:
v.label map=fields labels=lfields column=label fontsize=12 hcolor=aqua hwidth=10 g.region n=4928430 s=4923300 w=602400 e=610740 res=30 ps.map out=test.ps << EOF labels lfields end end EOF
follow-up: 5 comment:4 by , 17 years ago
Hamish,
Replying to hamish:
nice to finally see a solution for this, thanks.
Glad I could help.
before applying the patch I would like to ask about possible side effects -- does the "currentlinejoin 1 setlinejoin stroke setlinejoin" part need to be swiched off after drawing the labels, or will it be self contained?
This should be self-contained. "currentlinejoin" puts the current line join style on the Postcript stack, "1 setlinejoin" sets the join style to rounded, "stroke" draws the current path (does not affect the stack), and the final "setlinejoin" uses the value put on the stack earlier to return the join style to the previous value.
could a similar technique be used to connect .eps pattern tiles? eg broken lines: http://grass.osgeo.org/wiki/Psmap_flooding_example
I'll look into this.
you might also see that d.labels does not do very well with larger values for the highlight width. In that case I guess the solution is to also smear the color using the "knight's move" or similar, not just the 8 cardinal+ordinal directions.
I've attached a patch for ps/ps.map/prolog.ps. It is marked as a binary file for some reason, so I was not able to do "svn diff".
$ svn proplist prolog.ps Properties on 'prolog.ps': svn:mime-type $ svn propget svn:mime-type prolog.ps application/postscript $ svn diff prolog.ps Index: prolog.ps =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/postscriptsvn bug? (PostScript is ASCII)
Is SVN like CVS in that you have to mark a file as binary? In CVS, you use the command "cvs admin -kb" to mark a file as binary, so that it won't mess with the contents by changing line end characters or do keyword substitution.
fwiw, trac does nice markup when you click on the .diff file.
Yea, it's pretty cool.
Bill
follow-up: 6 comment:5 by , 17 years ago
Replying to perk:
before applying the patch I would like to ask about possible side effects -- does the "currentlinejoin 1 setlinejoin stroke setlinejoin" part need to be swiched off after drawing the labels, or will it be self contained?
This should be self-contained. "currentlinejoin" puts the current line join style on the Postcript stack, "1 setlinejoin" sets the join style to rounded, "stroke" draws the current path (does not affect the stack), and the final "setlinejoin" uses the value put on the stack earlier to return the join style to the previous value.
The normal way to make temporary changes to the rendering state is with gsave/grestore, e.g.:
gsave 1 setlinejoin stroke grestore
comment:6 by , 17 years ago
Replying to glynn:
Replying to perk:
before applying the patch I would like to ask about possible side effects -- does the "currentlinejoin 1 setlinejoin stroke setlinejoin" part need to be swiched off after drawing the labels, or will it be self contained?
This should be self-contained. "currentlinejoin" puts the current line join style on the Postcript stack, "1 setlinejoin" sets the join style to rounded, "stroke" draws the current path (does not affect the stack), and the final "setlinejoin" uses the value put on the stack earlier to return the join style to the previous value.
The normal way to make temporary changes to the rendering state is with gsave/grestore, e.g.:
gsave 1 setlinejoin stroke grestore
Works for me. The patch is updated.
Bill
comment:7 by , 17 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Hi,
thanks, applied in SVN relbr6 + trunk.
In SVN you do not have to mark a binary file as binary to avoid unwanted newline translation. But you do set file properties, be they an executable bit or a mime-type. In this case the mime type is set for a postscript file, but SVN is misconfigured to think that those are binary files when they are not.
more on svn propset:
thanks again, Hamish
A sample ps.map output showing the highlight problem.