summaryrefslogtreecommitdiff
path: root/lib/skyline.py
diff options
context:
space:
mode:
authorlim <lim@stsci.edu>2012-06-10 22:32:25 -0400
committerlim <lim@stsci.edu>2012-06-10 22:32:25 -0400
commit4ae0ebf4e0cccc3d3aa27b5f0e73f9a7d85c4690 (patch)
tree4efcb6d1fcba6bd1fc867a055e11c7b434c5f419 /lib/skyline.py
parent308863b0e8a1a97931d1ee495e8101c59a25e792 (diff)
downloadstsci.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.py85
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])