diff options
author | lim <lim@stsci.edu> | 2012-06-10 22:32:25 -0400 |
---|---|---|
committer | lim <lim@stsci.edu> | 2012-06-10 22:32:25 -0400 |
commit | 4ae0ebf4e0cccc3d3aa27b5f0e73f9a7d85c4690 (patch) | |
tree | 4efcb6d1fcba6bd1fc867a055e11c7b434c5f419 /lib/skyline.py | |
parent | 308863b0e8a1a97931d1ee495e8101c59a25e792 (diff) | |
download | stsci.sphere-4ae0ebf4e0cccc3d3aa27b5f0e73f9a7d85c4690.tar.gz |
lim fixed some bugs on SkyLine
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/branches/sphere@17323 fe389314-cf27-0410-b35b-8c050e845b92
Former-commit-id: ff6e4abb867f8b7ed07fac57736b03f3f0b2d1d6
Diffstat (limited to 'lib/skyline.py')
-rw-r--r-- | lib/skyline.py | 85 |
1 files changed, 30 insertions, 55 deletions
diff --git a/lib/skyline.py b/lib/skyline.py index 83f1cb0..880f627 100644 --- a/lib/skyline.py +++ b/lib/skyline.py @@ -172,8 +172,8 @@ class SkyLine(SphericalPolygon): # Put mosaic of all the chips in SkyLine if len(self.members) > 0: - self.polygon = SphericalPolygon.multi_union( - [m.polygon for m in self.members]) + self._set_polygon( + SphericalPolygon.multi_union([m.polygon for m in self.members])) def __repr__(self): return 'SkyLine(%r, %r, %r)' % (self.points, self.inside, self.members) @@ -199,7 +199,7 @@ class SkyLine(SphericalPolygon): """ if len(self.points) > 0: out_mem = [m for m in given_members if - self.contains_point(m.polygon.inside)] + self.intersects_poly(m.polygon)] else: out_mem = [] return out_mem @@ -222,47 +222,30 @@ class SkyLine(SphericalPolygon): if v not in self._members: self._members.append(v) - @property - def polygon(self): - """`SphericalPolygon` portion of `SkyLine`.""" - return SphericalPolygon(self.points, self.inside) - - @polygon.setter - def polygon(self, sph): + def _set_polygon(self, sph): """Set `SkyLine` to given `SphericalPolygon` properties.""" assert isinstance(sph, SphericalPolygon) - self._points = sph.points - self._inside = sph.inside - - @staticmethod - def _sep_poly_mem(skylines): - """ - Separate polygons and members of given *skylines* - for further processing. - - Returns - ------- - all_poly: list - List of `SphericalPolygon`. - - all_mem: list - List of `SkyLineMember`. + self._points = sph.points.copy() + self._inside = sph.inside.copy() + @classmethod + def _all_members(cls, skylines): """ - all_poly, all_mem = [], [] + Return a list of combined members for *skylines*. + Duplicates are allowed because they will be removed + anyway by `members.setter`. - for a in skylines: - all_poly.append(a.polygon) - all_mem += a.members - - return all_poly, all_mem + """ + newmem = [] + for s in skylines: + newmem += s.members + return newmem @classmethod - def _overload_parentcls(cls, mem, func, *args, **kwargs): + def _overload_parentcls(cls, func, *args, **kwargs): """Call `SphericalPolygon` class method but return `SkyLine`.""" newcls = cls(None) - newcls.polygon = func(*args, **kwargs) - newcls.members = mem + newcls._set_polygon(func(*args, **kwargs)) return newcls @classmethod @@ -276,7 +259,7 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.from_radec """ - return cls._overload_parentcls([], SphericalPolygon.from_radec, + return cls._overload_parentcls(SphericalPolygon.from_radec, *args, **kwargs) @classmethod @@ -290,7 +273,7 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.from_cone """ - return cls._overload_parentcls([], SphericalPolygon.from_cone, + return cls._overload_parentcls(SphericalPolygon.from_cone, *args, **kwargs) @classmethod @@ -304,7 +287,7 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.from_wcs """ - return cls._overload_parentcls([], SphericalPolygon.from_wcs, + return cls._overload_parentcls(SphericalPolygon.from_wcs, *args, **kwargs) @classmethod @@ -318,9 +301,10 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.multi_union """ - all_poly, all_mem = cls._sep_poly_mem(skylines) - return cls._overload_parentcls(all_mem, SphericalPolygon.multi_union, - all_poly, **kwargs) + newcls = cls._overload_parentcls(SphericalPolygon.multi_union, + skylines, **kwargs) + newcls.members = cls._all_members(skylines) + return newcls @classmethod def multi_intersection(cls, skylines, **kwargs): @@ -333,11 +317,9 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.multi_intersection """ - all_poly, all_mem = cls._sep_poly_mem(skylines) - newcls = cls._overload_parentcls([], - SphericalPolygon.multi_intersection, - all_poly, **kwargs) - newcls.members = newcls._find_members(all_mem) + newcls = cls._overload_parentcls(SphericalPolygon.multi_intersection, + skylines, **kwargs) + newcls.members = newcls._find_members(cls._all_members(skylines)) return newcls def union(self, other): @@ -366,10 +348,7 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.union """ - out_skyline = self.__class__(None) - out_skyline.polygon = self.polygon.union(other.polygon) - out_skyline.members = self.members + other.members - return out_skyline + return self.__class__.multi_union([self, other]) def intersection(self, other): """ @@ -397,8 +376,4 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.intersection """ - out_skyline = self.__class__(None) - out_skyline.polygon = self.polygon.intersection(other.polygon) - out_skyline.members = out_skyline._find_members( - self.members + other.members) - return out_skyline + return self.__class__.multi_intersection([self, other]) |