summaryrefslogtreecommitdiff
path: root/lib/skyline.py
diff options
context:
space:
mode:
authorlim <lim@stsci.edu>2012-06-01 14:44:11 -0400
committerlim <lim@stsci.edu>2012-06-01 14:44:11 -0400
commite36ec1d99f74022625c387105b81d2469eb6f3ed (patch)
tree4ec5d0d102daf47a14c877a65ba09a79d8e48d14 /lib/skyline.py
parent35668d3f4cca11efaff917c394f70b5fe2253e20 (diff)
downloadstsci.sphere-e36ec1d99f74022625c387105b81d2469eb6f3ed.tar.gz
lim implemented SkyLine union
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/branches/sphere@17196 fe389314-cf27-0410-b35b-8c050e845b92 Former-commit-id: 053bd0b3ced6a75076536f344763fe7aa0c714eb
Diffstat (limited to 'lib/skyline.py')
-rw-r--r--lib/skyline.py46
1 files changed, 32 insertions, 14 deletions
diff --git a/lib/skyline.py b/lib/skyline.py
index c5d3940..6368061 100644
--- a/lib/skyline.py
+++ b/lib/skyline.py
@@ -133,16 +133,34 @@ class SkyLine(SphericalPolygon):
assert len(poly_list) > 0, \
'SkyLine cannot find SCI ext in {}.'.format(fname)
- self._members = poly_list
-
# Put mosaic of all the chips in SkyLine
- mosaic = self.multi_union(self.polygons)
- self._points = mosaic.points
- self._inside = mosaic.inside
+ self._update(self.multi_union([m.polygon for m in poly_list]),
+ poly_list)
def __repr__(self):
return 'SkyLine(%r, %r, %r)' % (self.points, self.inside, self.members)
+ def _update(self, new_polygon, new_members):
+ """
+ Update *self* attributes to use given polygon and
+ new members.
+
+ Parameters
+ ----------
+ self: obj
+ SkyLine instance to update.
+
+ new_polygon: obj
+ SphericalPolygon instance to use.
+
+ new_members: list
+ List of SkyLineMember associated with `new_polygon`.
+
+ """
+ self._points = new_polygon.points
+ self._inside = new_polygon.inside
+ self._members = new_members
+
@property
def members(self):
"""List of SkyLineMember objects."""
@@ -178,6 +196,7 @@ class SkyLine(SphericalPolygon):
def union(self, other):
"""
Updates *self* with the union of *self* and *other*.
+ Skips *other* members that are already in *self*.
Parameters
----------
@@ -198,13 +217,15 @@ class SkyLine(SphericalPolygon):
sphere.polygon.SphericalPolygon.union
"""
-# all_poly = self.multi_union(self.polygons + other.polygons)
+ new_members = [m for m in other.members if m not in self.members]
+ if len(new_members) == 0:
+ return
+
+ all_poly = self.multi_union(self.polygons +
+ [m.polygon for m in new_members])
+
+ self._update(all_poly, self.members + new_members)
-# Need to update
-# self._points
-# self._inside
-# self._members
- pass
# Overload parent class with following changes
# a. add own attr
@@ -249,7 +270,4 @@ class SkyLine(SphericalPolygon):
def test():
"""Basic use case."""
-
- # Allow disjoint?
-
pass