On 23-4-2012 19:34, Mari Voipio wrote:
Hello all,

any graphic experts around who can bump me past a stupid hinder on my
way to understanding MPgraphics?


I'm trying to create a system of describing certain type of braiding
patterns (fingerloop braiding), based on what has been used in the
field before me - but they did it all manually either by pen or
computer, and I just do not fancy doing 40+ patterns by hand in
Inkscape, especially as my pattern recipe book keeps expanding and I'm
planning on that, too.

I think Metapost could be the solution, because I need simple shapes
and sometimes complicated but well-regulated paths/arrows to go
between them; I'm just being a clueless newbie, too much in the
WYSIWYG vector graphics mode to really know what to do.


Mostly with the examples in the Metafun manual I've managed to get as
far as to my basic building block, two circles joined by a curve:


\startMPpage
path p, q, r ;

p := fullcircle scaled 8mm ;
q := p shifted (0cm,24mm) ;
r := center p .. (12mm,12mm) .. center q ;

pair pr, qr ;

pr := p intersectionpoint r ;
qr := q intersectionpoint r ;

r := r cutbefore pr cutafter qr ;
r := r cutends 0.2mm ;

draw r withpen pencircle scaled 0.2mm withcolor black ;
draw p withpen pencircle scaled 0.2mm withcolor black ; fill p withcolor white;
draw q withpen pencircle scaled 0.2mm withcolor black ; fill q withcolor black;
\stopMPpage



However, I don't seem to be able to find the answers to the next questions:

a) I need to be able to stack four of these on top of each other and
then four mirrored ones next to them (all-in-all a 2 x 4 grid/block),
and probably a 1-block space between the two columns. I realize I can
do that with "shift", but should I make my single 'building block' a
group, a buffer or overlay or something else? Keeping in mind that I
will have to be able to draw a path/arrow on top, so I need to know
where they are.
(At some point I need to expand to more columns, but the number of
rows is still 4 as we have humans have just four aligned fingers per
hand - thumbs aren't counted - but one can add hands i.e. people to
work wider braids.)


b) The circles p and q can be filled with the same colour or two
different colours, and each of the blocks in a pattern can have
different fill colour (e.g. two totally black, two totally white, two
half-and-half with either black or white on top). The pen/outline
colour should stay as black, which means that I can't implement the
symbol example in the Metafun manual (the smiley that is totally
switched from black to red).
I don't mind having different blocks for monocoloured and bicoloured
versions, but it would be nice to be able to say something like
\usesloop[lh,blue] for 'take a single-coloured left-hand loop in blue'
instead of having to dig deeper into the MP code every time.

I assume the answer is "use variables", but how?

something:

\startMPpage

def MyShape =
    image (
        path p, q, r ;

        p := fullcircle scaled 8mm ;
        q := p shifted (0cm,24mm) ;
        r := center p .. (12mm,12mm) .. center q ;

        pair pr, qr ;

        pr := p intersectionpoint r ;
        qr := q intersectionpoint r ;

        r := r cutbefore pr cutafter qr ;
        r := r cutends 0.2mm ;

        draw r withpen pencircle scaled 0.2mm withcolor black ;
draw p withpen pencircle scaled 0.2mm withcolor black ; fill p withcolor white; draw q withpen pencircle scaled 0.2mm withcolor black ; fill q withcolor black;
    )
enddef ;

for i=0 step 2cm until 8cm :
    for j=0 step 4cm until 12cm :
        draw MyShape shifted (i,j) ;
    endfor ;
endfor ;

\stopMPpage


there are picture variables, so

picture pp ; pp := image(...) ;

can be used

I used millimeters here because it just feels more natural to me,
that's what textile crafts does (when not based on inches like
quilting and scrapbooking...). The measurements won't be shown
anywhere - these are graphs or pictograms, not real pictures - so I
can still switch to using something else. Besides, if the "building
block" approach works, there isn't that much to be changed, get the
first block right and the rest can be calculated from there.

mm are okay, alternative use no dimension, just numbers and scale afterwards:

currentpicture := currentpicture xsized 10cm ;

or so.

PS. Today's craft related metaphor: I feel just like I was staring at
a messed up skein of yarn: I know  that I'm now holding one of the
ends, I thus can start to untangle the knot - and the more I pry
loose, the less there's left to sort out. However, in the beginning
the process tends to be very slow and awkward...

beware, metapost is addictive once you get better in it,

(btw, a talk about this will fit nicely in the upcoming eurotex theme)

Hans

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
    tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to