[Therion] Metapost and user attributes

Xavier Pennec Xavier.Pennec at sophia.inria.fr
Sat Dec 22 19:59:50 CET 2007

Dear all,

I have a survey with lots of sections (which are on another map than the 
plan and the elevation, see attached files NaduelFilonCerisiersPlan.pdf 
and  NaduelRD8_sections.pdf) and I would like to add automatically a 
label numbering each section at the end of the section line in the plan. 
As I want to be able not to display the section lines AND the their 
numbers when I inlcude that survey into the larger map, I thought that 
adding a user attribute to the section line would be the right way.

Thus, I used a user attribute called label in my th2 file:
   line section -reverse on -direction both -attr label "one"
     312.0 327.0
     334.09 327.0 396.0 327.0 425.0 327.0

and I redefined the section line metapost command into in my layout:

code metapost
def l_section (expr P)(text txt) =
  path Q; Q = punked P;
  pickup PenC;
  for t = 0 upto length P - 1:
    pair zz[];
    zz1 := point t of P;
    zz2 := point t+1 of P;
    zz3 := postcontrol t of P;
    zz4 := precontrol t+1 of P;
    if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or
       (length(zz4-2/3[zz1,zz2]) > 0.1pt):
      zz5 = whatever[zz1,zz2];
      (zz3-zz5) = whatever * (zz1-zz2) rotated 90;
      draw zz1--zz5;
      zz6 = whatever[zz1,zz2];
      (zz4-zz6) = whatever * (zz1-zz2) rotated 90;
      draw zz2--zz6;
      draw zz1--zz2;
  for pnt=txt:
    if pnt=-1:
      T:=identity rotated angle(thdir(Q,pnt)) shifted (point pnt of Q);
      pickup PenC;
      thdraw (0,0)--(0,.8u);
      thdraw (-.1u,.55u)--(0,.8u)--(.1u,.55u);
      if known ATTR_label:
        p_label( ATTR_label, (point pnt of Q), 0, 5);
    exitif pnt=-1;

The file NaduelRD5_plan.pdf is an example on what it gives. With that 
solution, I have two problems:
- the first one is that is I change     -attr label "one"    with     
-attr label "1"     then metapost crashes because ATTR_label is 
intrepreted in that case as a known numeric and not as a string.
- the second problem is how to give an offset to the label so that it is 
actually above and below the lines?

If there is any metapost guru that can help, I'll appreciate.


PS: there would be another solution to my problem, which would be to put 
sections and their labels in separate scraps, simulating different 
layers as in gimp, and not to include these scraps into the large map. 
However, to define properly a scrap as a layer of another one, it would 
be needed to deform both scarps exactly in the same way, which is not 
the case right now if some reference survey station is moved in one 
scrap only. Thus, I would imagine that a bettre solution would be a 
special type of layer scrap where the geometry is copied from another 
(e.g. something like scrap scrap2_layer2 -copy scrap2). Is that 
something feasible?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: NaduelFilonCerisiersPlan.pdf
Type: application/pdf
Size: 177269 bytes
Desc: not available
URL: <http://mailman.speleo.sk/pipermail/therion/attachments/20071222/0bbc6ded/attachment.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NaduelRD8_sections.pdf
Type: application/pdf
Size: 206878 bytes
Desc: not available
URL: <http://mailman.speleo.sk/pipermail/therion/attachments/20071222/0bbc6ded/attachment-0001.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NaduelRD5_plan.pdf
Type: application/pdf
Size: 19981 bytes
Desc: not available
URL: <http://mailman.speleo.sk/pipermail/therion/attachments/20071222/0bbc6ded/attachment-0002.pdf>

More information about the Therion mailing list