metapost

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
metapost [2020/12/13 18:52] – Walking and climbing man in scale on the map by Juraj Halama slukametapost [2024/11/17 06:04] (current) – [Area Symbols] add link to https://colorcodes.io brucemutton
Line 143: Line 143:
       % show U alignment box light blue       % show U alignment box light blue
           q:= (xpart U, -ypart U) -- (xpart U, ypart U) -- (-xpart U, ypart U) -- (-xpart U, -ypart U) -- cycle;           q:= (xpart U, -ypart U) -- (xpart U, ypart U) -- (-xpart U, ypart U) -- (-xpart U, -ypart U) -- cycle;
-          thdraw q shifted -(xpart alignment * xpart U, ypart alignment * ypart U) rotated -rotation withpen PenD withcolor 0.5blue+0.5white;+          thdraw q shifted -(xpart alignment * xpart U, ypart alignment * ypart U) rotated -rotation withpen PenD withcolor 0.5[blue,white];
       % show u box grey       % show u box grey
-          thdraw unitsquare scaled u shifted (-0.5u, -0.5u) withpen PenD withcolor 0.1black+0.5white;+          thdraw unitsquare scaled u shifted (-0.5u, -0.5u) withpen PenD withcolor 0.2[black,white];
       % % %       % % %
        
Line 224: Line 224:
     fi;     fi;
     picture thetext;     picture thetext;
-    thetext:=thTEX("\thframed {" & textsize & plaintext & "}");+    thetext:=thTEX("\thframed {" & textsize & " \thfb " & plaintext & "}");
     if A = (-1,1):     if A = (-1,1):
       p_label.ulft(thetext,P,R,style);       p_label.ulft(thetext,P,R,style);
Line 770: Line 770:
  text en "point u:man_w" "caver (walking)"  text en "point u:man_w" "caver (walking)"
  text en "point u:man_c" "caver (climbing)"  text en "point u:man_c" "caver (climbing)"
 +
 +Notes:
 +Use "-align top" for proper alignment of the walking man when his point is on the groung.
 +Climbing one has center where the rope should go on the harness...
 +The scale on the map and in the legend is matching just for 1:500...
 +
 +===Region names symbol===
 +In the Hirlatz cave we use this symbol to tell the name of the adjacent (preview) maps.
 +It is quite customizable and especially shows a way how to do label boxes.
 +By default it prints the current surveys name in a white-filled box with rounded corners.
 +You can adjust it per symbol by giving "-attr <var> <val>" options at the symbol in xtherion; see the code header for the available options.
 +
 +From Benedikt Hallinger for Therion 6.0.3
 +
 +{{ ::metapost:therion-u_mappe.png?nolink |}}
 +
 +    # Symbol to denote assigned survey.
 +    #   Option "-attr text <string>" shows given text; otherwise current survey is shown.
 +    #   Option "-attr bordersmooth <num>" overrides edge smoothness (0 for sharp edges)
 +    #   Option "-attr bordermargin <num>" overrides margin text/border
 +    #   Option "-attr basescale <num>" overrides basic text sizing factor (default text size)
 +    #   Option "-attr fillsize <s_pct>" fills with page background color; s_pct is percent of bbox size
 +    def p_u_mappe(expr pos, theta, sc, al) =
 +      T:=identity aligned al rotated theta scaled sc shifted pos;
 +      begingroup;
 +        % Basic config
 +        bordersmooth:=4;         % smoothness of box corners  (0=90° edges)
 +        bordermargin:=5.0bp;     % padding border->text
 +        basescale:=1.0;          % basic scaling of default-sized text
 +        fillsize:=-1.0;           % proportional size of label filling (percent)
 +        if known(ATTR_bordersmooth): bordersmooth:=scantokens(ATTR_bordersmooth); fi;
 +        if known(ATTR_bordermargin): bordermargin:=scantokens(ATTR_bordermargin); fi;
 +        if known(ATTR_basescale):    basescale:=scantokens(ATTR_basescale);       fi;
 +        if known(ATTR_fillsize):     fillsize:=scantokens(ATTR_fillsize);         fi;
 +      
 +        % GET LABEL TEXT:
 +        string txt;
 +        if known(ATTR_text):
 +            txt := ATTR_text;
 +        else:
 +                txt := ATTR__survey;
 +        fi;
 +        
 +        
 +        % PREPARE LABEL:
 +        lab:=thelabel(txt, (0.0,0.0));
 +        pickup PenA;                       % border thickness
 +        interim bboxmargin:=bordermargin;  % padding border->text
 +        
 +        % PREPARE BOX and DRAW BOX BACKGROUND:
 +        % q is the box as drawed, but we fill the place first before drawing
 +        q:=((bbox lab) smoothed bordersmooth) aligned al scaled (sc * basescale) rotated theta shifted pos;
 +        if (fillsize <> -1.0):
 +            % draw extending filled box around symbol
 +            if known(MapBackground):
 +                % from therion versions newer than 6.0.3+3551531+dev (23.11.2021) we use page background
 +                thfill ((bbox lab) smoothed bordersmooth) scaled (sc * basescale * fillsize) withcolor MapBackground;
 +            else:
 +                thfill ((bbox lab) smoothed bordersmooth) scaled (sc * basescale * fillsize) withcolor label_fill_color;
 +            fi;
 +        fi;
 +        % the following will draw the actual visible interiour-filling of the box
 +        thfill ((bbox lab) smoothed bordersmooth) scaled (sc * basescale) withcolor label_fill_color;
 +        
 +        % DRAW BOX
 +        draw q;
 +        
 +        % DRAW LABEL TEXT
 +        lab:=lab aligned al;
 +        lab:=lab scaled (sc * basescale);
 +        lab:=lab rotated theta;
 +        lab:=lab shifted pos;
 +        process_label(pos, 0.001);   % for some weird reason "0.0" does not work here and puts the label to map-center at scrap-rotation.
 +      endgroup;
 +    enddef;
 +
 +
 +
  
 ====Line Symbols==== ====Line Symbols====
Line 1058: Line 1136:
           zz3 := postcontrol t of P;           zz3 := postcontrol t of P;
           zz4 := precontrol t+1 of P;           zz4 := precontrol t+1 of P;
 +          linecap_prev:=linecap;
           linecap:=0;           linecap:=0;
           if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or           if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or
Line 1079: Line 1158:
             draw zz1--zz2 withcolor background;             draw zz1--zz2 withcolor background;
           fi;           fi;
 +          linecap:=linecap_prev;   % to prevent problems with dots of other symbols
         endfor;         endfor;
       enddef;       enddef;
Line 1617: Line 1697:
 Colors are in order R, G, B --- 0=0 1=255. Color (0.1, 0.2, 0.8) means (25 51 204) in Photoshop - quite dark blue. Light blue could be for example (123 213 255) in Photoshop - it is (123/255, 213/255, 255/255) or (0.48, 0.84 1.0) for Metapost. Colors are in order R, G, B --- 0=0 1=255. Color (0.1, 0.2, 0.8) means (25 51 204) in Photoshop - quite dark blue. Light blue could be for example (123 213 255) in Photoshop - it is (123/255, 213/255, 255/255) or (0.48, 0.84 1.0) for Metapost.
  
-See also  [[tips#RGB to Therion Colour Mapping Calculator|this spreadsheet]] to visualise and convert between colour formats.+See also  [[https://colorcodes.io|https://colorcodes.io]] or [[tips#RGB to Therion Colour Mapping Calculator|this spreadsheet]] to visualise and convert between colour formats.
  
 ---- ----
Line 2116: Line 2196:
  
 A: Try this code: A: Try this code:
- 
-      def_transparent_rgb(tr_lgrey, 0.73, 0.71, 0.75); 
  
       def a_u_lgrey(expr P) =       def a_u_lgrey(expr P) =
         T:=identity;         T:=identity;
-        thfill P withtransparentcolor tr_lgrey;+        thfill P withcolor (0.7, 0.7, 0.7) withalpha 0.5;
       enddef;       enddef;
  
-There are a few predefined transparent colors, the most interesting of them is tr_bg (current scrap background). Standard opacity value (defined in the layout section) is applied. M. Budaj 
  
 ---- ----
Line 2848: Line 2925:
       ) -- (       ) -- (
         if xpos > 0: 0 else: xsize/2 fi, 0         if xpos > 0: 0 else: xsize/2 fi, 0
-      ) withcolor 0.1black+0.5white;+      ) withcolor 0.2[black,white];
       draw (       draw (
         0, if ypos < 0: 0 else: -ysize/2 fi         0, if ypos < 0: 0 else: -ysize/2 fi
       ) -- (       ) -- (
         0, if ypos > 0: 0 else: ysize/2 fi         0, if ypos > 0: 0 else: ysize/2 fi
-      ) withcolor 0.1black+0.5white;+      ) withcolor 0.2[black,white];
     enddef;     enddef;
     endcode     endcode
Line 2943: Line 3020:
       thclean Path;       thclean Path;
       pickup PenD;       pickup PenD;
-      if known colour_sump_bg:  thfill Path withcolor colour_sump_bg; else: thfill Path withcolor 0.7white; fi;+      if known colour_sump_bg:  thfill Path withcolor colour_sump_bg; else: thfill Path withcolor 0.7[white,black]; fi;
       thfill Path withpattern pattern_sump;         thfill Path withpattern pattern_sump;  
       %%thdraw Path;  %outline, not needed as area drawn is defined by line border anyway       %%thdraw Path;  %outline, not needed as area drawn is defined by line border anyway
Line 2958: Line 3035:
     T:=identity;     T:=identity;
     pickup pensquare scaled (1.0*u/10);     pickup pensquare scaled (1.0*u/10);
-    if known colour_rope: thdraw P withcolor colour_rope; else: thdraw P withcolor 0.1black+0.5white;+    if known colour_rope: thdraw P withcolor colour_rope; else: thdraw P withcolor 0.2[white,black];
     fi;     fi;
     pickup PenC;     pickup PenC;
Line 3079: Line 3156:
   text sk "point u:symbol_extend" ""   text sk "point u:symbol_extend" ""
  
-=====Walking and climbing man in scale on the map===== 
- 
-Juraj Halama 2020 for Therion 5.5.3\\ 
- 
-{{:metapost:cavers.png?100|}} 
- 
- picture u_man_c_pic; 
- u_man_c_pic := image ( 
-   draw (0cm, -0cm) -- (-8cm, 27cm) -- (-36cm, 55cm) -- (-50cm, 99cm) withpen pencircle scaled 16cm; 
-   draw (27cm, 48cm) -- (0, 64cm) -- (-29cm, 61cm) -- (-38cm, 102cm)  withpen pencircle scaled 16cm; 
-   draw (-65cm, 48cm) -- (-75cm, 75cm) -- (-53cm, 106cm) -- (0, 106cm) withpen pencircle scaled 14cm; 
-   draw (-44cm, 130cm) withpen pencircle scaled 27cm withcolor black; 
- ) shifted (20cm, -67cm); 
- 
- picture u_man_w_pic; 
- u_man_w_pic := image ( 
-   draw (0, 0) -- (7.5cm, 36cm) -- (0cm, 69cm) -- (9cm, 99cm) withpen pencircle scaled 16cm; 
-   draw (42cm, 9cm) -- (37.5cm, 42cm) -- (13.5cm, 69cm) -- (30cm, 102cm) withpen pencircle scaled 16cm; 
-   draw (21.5cm, 100.5cm) -- (6.6cm, 69cm) withpen pencircle scaled 16cm; 
-   draw (-24cm, 75cm) -- (-13.5cm, 102cm) -- (9cm, 112.5cm) -- (30cm, 108cm) -- (51cm, 87cm) -- (75cm, 93cm) withpen pencircle scaled 14cm; 
-   draw (30cm, 132cm) withpen pencircle scaled 27cm withcolor black; 
- ) shifted (-20cm, -70cm); 
- 
- def p_u_man_c (expr P, R, S, A) = 
-   U := (60cm, 85cm) scaled (0.01 / Scale); 
-   T:=identity aligned A rotated R scaled S shifted P; 
-   thdraw u_man_c_pic scaled (0.01 / Scale); 
- enddef; 
- 
- def p_u_man_w (expr P, R, S, A) = 
-   U := (60cm, 80cm) scaled (0.01 / Scale); 
-   T:=identity aligned A rotated R scaled S shifted P; 
-   thdraw u_man_w_pic scaled (0.01 / Scale); 
- enddef; 
- 
- def p_u_man_c_legend = 
-   draw u_man_c_pic scaled (u / 175cm) shifted ((.5, .5) inscale); 
- enddef; 
- 
- def p_u_man_w_legend = 
-   draw u_man_w_pic scaled (u / 175cm) shifted ((.5, .5) inscale); 
- enddef; 
- 
- 
- 
- text en "point u:man_w" "caver (walking)" 
- text en "point u:man_c" "caver (climbing)" 
- 
-Notes: 
-Use "-align top" for proper alignment of the walking man when his point is on the groung. 
-Climbing one has center where the rope should go on the harness... 
-The scale on the map and in the legend is matching just for 1:500... 
- 
----- 
----- 
  
  • metapost.1607881973.txt.gz
  • Last modified: 4 years ago
  • by sluka