|
From: Michael J G. <mic...@us...> - 2012-05-29 14:32:24
|
The arrowhead needs a piece of size "size" of the path for its
construction. Therefore, only (arclen-size) of the path is available as
positions for a head without extending the path.
So, change pos=0 to mean a position at arclenpos=size, and introduce the
necessary additional path exclusions for begin/end arrows.
---
Following up the pos/relarclen discussion, here's a patch within the
current design which prevents the necessity of extrapolating the path.
Also, in contrast to the other patches I sent a minute ago, I managed to set
my author field again...
Signed-off-by: Michael J Gruber <mic...@us...>
---
pyx/deco.py | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/pyx/deco.py b/pyx/deco.py
index 193f566..e41e88e 100644
--- a/pyx/deco.py
+++ b/pyx/deco.py
@@ -472,7 +472,7 @@ class arrow(deco, attr.attr):
dp.ensurenormpath()
anormpath = dp.path
- arclenfrombegin = (1-self.reversed)*self.constrictionlen + self.pos * (anormpath.arclen() - self.constrictionlen)
+ arclenfrombegin = (1-self.reversed)*self.size + self.pos * (anormpath.arclen() - self.size)
direction = self.reversed and -1 or 1
arrowhead = _arrowhead(anormpath, arclenfrombegin, direction, self.size, self.angle,
self.constriction is not None, self.constrictionlen)
@@ -481,10 +481,16 @@ class arrow(deco, attr.attr):
dp.ornaments.draw(arrowhead, self.attrs)
# exlude part of the path from stroking when the arrow is strictly at the begin or the end
- if self.pos == 0 and self.reversed:
- dp.excluderange(0, min(self.size, self.constrictionlen))
- elif self.pos == 1 and not self.reversed:
- dp.excluderange(anormpath.end() - min(self.size, self.constrictionlen), anormpath.end())
+ if self.pos == 0:
+ if self.reversed:
+ dp.excluderange(0, min(self.size, self.constrictionlen))
+ else:
+ dp.excluderange(0, min(self.size, self.size - self.constrictionlen))
+ elif self.pos == 1:
+ if self.reversed:
+ dp.excluderange(anormpath.end() - min(self.size, self.size - self.constrictionlen), anormpath.end())
+ else:
+ dp.excluderange(anormpath.end() - min(self.size, self.constrictionlen), anormpath.end())
arrow.clear = attr.clearclass(arrow)
--
1.7.11.rc0.265.g7c5e375
|