diff options
author | lim <lim@stsci.edu> | 2012-06-01 14:44:11 -0400 |
---|---|---|
committer | lim <lim@stsci.edu> | 2012-06-01 14:44:11 -0400 |
commit | e36ec1d99f74022625c387105b81d2469eb6f3ed (patch) | |
tree | 4ec5d0d102daf47a14c877a65ba09a79d8e48d14 /lib/skyline.py | |
parent | 35668d3f4cca11efaff917c394f70b5fe2253e20 (diff) | |
download | stsci.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.py | 46 |
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 |