Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
metapost [2019/12/24 00:32] – Break line tarquinwj | metapost [2020/03/01 22:57] – grammar tarquinwj | ||
---|---|---|---|
Line 200: | Line 200: | ||
This function simplifies it all. Add it once, and then any of your custom points can call it to add a label. | This function simplifies it all. Add it once, and then any of your custom points can call it to add a label. | ||
- | [[user: | + | [[user: |
< | < | ||
code metapost | code metapost | ||
vardef create_styled_label (expr plaintext, | vardef create_styled_label (expr plaintext, | ||
- | save textsize, style; | + | save textsize, style, thetext; |
string textsize; | string textsize; | ||
if S = 0.5: | if S = 0.5: | ||
Line 271: | Line 271: | ||
For an example of code making use of this function, see [[#Rope lengths]] below. | For an example of code making use of this function, see [[#Rope lengths]] below. | ||
+ | If you want to add custom label styles, you need to call " | ||
+ | |||
+ | Use " | ||
+ | |||
+ | Since this will require setting the suffix correctly for both the regular label styles and the custom label styles, there ends up being a lot of duplicated code. It is easier to store the suffix name as a string which can then be extracted with scantokens when calling the appropriate macro, which is what the example code below does. The custom decorations are specified using a style number starting from 100, so as not to clash with the numbers used for Therion' | ||
+ | |||
+ | < | ||
+ | code metapost | ||
+ | vardef create_styled_label (expr plaintext, | ||
+ | save textsize, style, thetext, sufx, athick; | ||
+ | string textsize; | ||
+ | if S = 0.5: | ||
+ | textsize: | ||
+ | elseif S = 0.7: | ||
+ | textsize: | ||
+ | elseif S = 1.4: | ||
+ | textsize: | ||
+ | elseif S = 2: | ||
+ | textsize: | ||
+ | else: % normal is 1 | ||
+ | textsize: | ||
+ | fi; | ||
+ | if known ATTR_labelstyle: | ||
+ | style: | ||
+ | else: | ||
+ | style: | ||
+ | fi; | ||
+ | picture thetext; | ||
+ | thetext: | ||
+ | % store the alignment suffix as a string, it will be turned back into a suffix with scantokens | ||
+ | string sufx; | ||
+ | if A = (-1,1): | ||
+ | sufx: | ||
+ | elseif A = (0,1): | ||
+ | sufx: | ||
+ | elseif A = (1,1): | ||
+ | sufx: | ||
+ | elseif A = (-1,0): | ||
+ | sufx: | ||
+ | elseif A = (1,0): | ||
+ | sufx: | ||
+ | elseif A = (-1,-1): | ||
+ | sufx: | ||
+ | elseif A = (0,-1): | ||
+ | sufx: | ||
+ | elseif A = (1,-1): | ||
+ | sufx: | ||
+ | else: | ||
+ | sufx: | ||
+ | fi; | ||
+ | if style >= 100: | ||
+ | % create the label, passing the alignment as a suffix | ||
+ | lab: | ||
+ | % process_label looks for a variable called " | ||
+ | process_label(P, | ||
+ | % define all the different ornamentations that you want | ||
+ | if style = 100: | ||
+ | pickup PenA; | ||
+ | athick: | ||
+ | % make bounding box measurements temporarily be larger than the object being measured | ||
+ | % " | ||
+ | % sure it gets reset to default correctly afterwards | ||
+ | interim bboxmargin: | ||
+ | % rounded rectangle | ||
+ | % rotating around P is undesirable when alignment is also used, but this is what regular labels do | ||
+ | draw ((bbox lab) smoothed 5athick) rotatedaround (P,R) dashed evenly; | ||
+ | fi; | ||
+ | else: | ||
+ | % create the label, passing the alignment as a suffix | ||
+ | p_label.scantokens(sufx)(thetext, | ||
+ | fi; | ||
+ | enddef; | ||
+ | endcode | ||
+ | </ | ||
=====Replacing legend drawings for existing symbols===== | =====Replacing legend drawings for existing symbols===== | ||
Line 572: | Line 646: | ||
===Magnetic effects=== | ===Magnetic effects=== | ||
- | [[user: | + | [[user: |
Certain rocks can cause a compass to give the wrong reading. This icon can be used to show areas where this happens (ie. where the survey may be unreliable as a result); a spinning compass: | Certain rocks can cause a compass to give the wrong reading. This icon can be used to show areas where this happens (ie. where the survey may be unreliable as a result); a spinning compass: | ||
Line 580: | Line 654: | ||
% a spinning compass | % a spinning compass | ||
def p_u_magnetism (expr P,R,S,A)= | def p_u_magnetism (expr P,R,S,A)= | ||
- | scale: | + | |
- | | + | save scale, cthick, pointheight, |
- | pointheight: | + | |
- | pointwidth: | + | |
- | U: | + | pointheight: |
- | T:=identity aligned A rotated (R-20) scaled S shifted P; | + | pointwidth: |
- | % a circle | + | |
- | thdraw fullcircle scaled 2scale withpen PenC withcolor black; | + | cutwidth: |
- | % filled triangle | + | |
- | thfill (0, | + | T:=identity aligned A rotated (R-20) scaled S shifted P; |
- | % black triangle outline | + | % a circle |
- | | + | thdraw fullcircle scaled 2scale withpen PenC; |
- | thdraw | + | % filled triangle |
- | % spin arcs, a full circle is path 0-8, anticlockwise, | + | thfill (0, |
- | thdraw subpath (2.4,3.5) of fullcircle scaled 1.5scale withpen PenC withcolor black; | + | % black triangle outline |
- | thdraw subpath (6.4,7.5) of fullcircle scaled 1.5scale withpen PenC withcolor black; | + | % this can be drawn with mitred pens, but it still ends up needing calculations to get the centre position of the pen thickness |
+ | % therefore it is easier to just use a filled path | ||
+ | % pointheight/ | ||
+ | thfill | ||
+ | % spin arcs, a full circle is path 0-8, anticlockwise, | ||
+ | thdraw subpath (2.4,3.5) of fullcircle scaled 1.5scale withpen PenC; | ||
+ | thdraw subpath (6.4,7.5) of fullcircle scaled 1.5scale withpen PenC; | ||
+ | endgroup; | ||
enddef; | enddef; | ||
initsymbol(" | initsymbol(" | ||
Line 1444: | Line 1525: | ||
text en "line u: | text en "line u: | ||
- | By default, it will pick up the colour of the scrap background, to put between the double lines. However, it normally looks better with the map-bg colour between them. Unfortunately, | + | By default, it will pick up the colour of the scrap background, to put between the double lines. However, it normally looks better with the map-bg colour between them. Unfortunately, |
You cannot use "color fill_l_u_break;" | You cannot use "color fill_l_u_break;" | ||
Line 1453: | Line 1534: | ||
endcode | endcode | ||
+ | By default, the break line is set up for use along a horizontal passage. This follows the usual style used in the UK; two parallel lines, separated by a horizontal gap, with the tops and bottoms horizontally aligned (no matter whether the lines are drawn vertically or tilted at 45 degrees or more). If you are using it on a vertical section of cave, you can set the "-attr orientation vertical" | ||
====Area Symbols==== | ====Area Symbols==== | ||
===Show area water in a different color=== | ===Show area water in a different color=== |