Hi Michael,

sorry for being late in the discussion.

Am 10.05.2012 um 10:28 schrieb Michael J Gruber:
> r3151 took into account the direction already but missed the fact that
> arrows are positioned wrt. the constriction center now. Make it so that
> a reversed arrow is positioned wrt. the constriction center also.


To my understanding this is not true. Everything is completely symmetric. For 
earrows, at pos=0, the "back" of the arrow starts at the starting point of the 
path and at pos=1 (the default for earrow) the tip is at the end. The same for 
barrow. At pos=1 the back is at the end of the path and at pos=0 (the default 
for barrow) the tip is at the beginning. Those limits are correct. In between 
we're just going linearly.

I'm sorry, your circular example is much to complicated for me. Here's my 
attempt:

    from pyx import *
····
    c = canvas.canvas()
    c.stroke(path.line(0, 0, 10, 0))
    c.stroke(path.line(0, 0, 0, 2))
    c.stroke(path.line(0.1, 0, 0.1, 2))
    c.stroke(path.line(5, 0, 5, 2))
    c.stroke(path.line(9.9, 0, 9.9, 2))
    c.stroke(path.line(10, 0, 10, 2))
    c.stroke(path.line(0, 0.2, 10, 0.2), [deco.arrow(pos=1)]) # earrow
    c.stroke(path.line(0, 0.4, 10, 0.4), [deco.arrow(pos=1, reversed=1)])
    c.stroke(path.line(0, 0.6, 10, 0.6), [deco.arrow(pos=0.99)])
    c.stroke(path.line(0, 0.8, 10, 0.8), [deco.arrow(pos=0.99, reversed=1)])
    c.stroke(path.line(0, 1.0, 10, 1.0), [deco.arrow(pos=0.5)])
    c.stroke(path.line(0, 1.2, 10, 1.2), [deco.arrow(pos=0.5, reversed=1)])
    c.stroke(path.line(0, 1.4, 10, 1.4), [deco.arrow(pos=0.01)])
    c.stroke(path.line(0, 1.6, 10, 1.6), [deco.arrow(pos=0.01, reversed=1)])
    c.stroke(path.line(0, 1.8, 10, 1.8), [deco.arrow(pos=0)])
    c.stroke(path.line(0, 2.0, 10, 2.0), [deco.arrow(pos=0, reversed=1)]) # 
barrow
    c.writePDFfile()

Now try your patches. It creates a lot of confusion. No way.

I think the positioning of the arrows on the circle you're trying to get right 
should be done using path features. This is trivial:

    from pyx import *
    c = canvas.canvas()
    circ = path.circle(0, 0, 5)
    p = path.line(0, 0, 5, 5)
    c.stroke(circ.split(circ.intersect(p)[0][0])[0], [deco.arrow(size=1)])
    c.stroke(p)
    c.writePDFfile()

Now, the only problem is if you want to position the "back of the arrow" at the 
intersection point. I don't know whether it is that useful (technically) but I 
fully understand that it might be desirable from a visual point of view 
sometimes. You need to take into account the constriction length of the arrow 
in question. Unfortunately this was not accessible from the outside. I just 
checked in a simple patch (changeset 3247). Then it becomes a simple 
modification of what we had before:

    from pyx import *
    c = canvas.canvas()
    circ = path.circle(0, 0, 5)
    p = path.line(0, 0, 5, 5)
    a = deco.arrow(size=1)
    c.stroke(circ.split(circ.intersect(p)[0][0] + a.constrictionlen)[0], [a])
    c.stroke(p)
    c.writePDFfile()

Best,


André

-- 
by  _ _      _    Dr. André Wobst, Amselweg 22, 85716 Unterschleißheim
   / \ \    / )   [email protected], http://www.wobsta.de/
  / _ \ \/\/ /    PyX - High quality PostScript and PDF figures
 (_/ \_)_/\_/     with Python & TeX: visit http://pyx.sourceforge.net/

Attachment: smime.p7s
Description: S/MIME cryptographic signature

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
PyX-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pyx-devel

Reply via email to