Correcting a few functions not handling Path having empty _segments (#143)

* Correcting poping from Path objects

Poping from a 1-lengthed Path would yield an error due to not considering that the _segments attribute would be empty after deleting the last element.

* Correcting point function

Unspecified behavior if _segments is empty

* Correcting setter and getter of start and end
pull/98/head
Wes Bouaziz 2021-05-11 06:12:06 +02:00 committed by GitHub
parent a0fc28849c
commit 1e5bfb4252
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 6 deletions

View File

@ -2394,8 +2394,12 @@ class Path(MutableSequence):
def __delitem__(self, index): def __delitem__(self, index):
del self._segments[index] del self._segments[index]
self._length = None self._length = None
self._start = self._segments[0].start if len(self._segments) > 0:
self._end = self._segments[-1].end self._start = self._segments[0].start
self._end = self._segments[-1].end
else:
self._start = None
self._end = None
def __iter__(self): def __iter__(self):
return self._segments.__iter__() return self._segments.__iter__()
@ -2452,6 +2456,8 @@ class Path(MutableSequence):
def point(self, pos): def point(self, pos):
# Shortcuts # Shortcuts
if len(self._segments) == 0:
return None
if pos == 0.0: if pos == 0.0:
return self._segments[0].point(pos) return self._segments[0].point(pos)
if pos == 1.0: if pos == 1.0:
@ -2555,25 +2561,27 @@ class Path(MutableSequence):
@property @property
def start(self): def start(self):
if not self._start: if not self._start and len(self._segments)>0:
self._start = self._segments[0].start self._start = self._segments[0].start
return self._start return self._start
@start.setter @start.setter
def start(self, pt): def start(self, pt):
self._start = pt self._start = pt
self._segments[0].start = pt if len(self._segments)>0:
self._segments[0].start = pt
@property @property
def end(self): def end(self):
if not self._end: if not self._end and len(self._segments)>0:
self._end = self._segments[-1].end self._end = self._segments[-1].end
return self._end return self._end
@end.setter @end.setter
def end(self, pt): def end(self, pt):
self._end = pt self._end = pt
self._segments[-1].end = pt if len(self._segments)>0:
self._segments[-1].end = pt
def d(self, useSandT=False, use_closed_attrib=False, rel=False): def d(self, useSandT=False, use_closed_attrib=False, rel=False):
"""Returns a path d-string for the path object. """Returns a path d-string for the path object.