I forgot to mention the obvious solution!  Outer boundaries are ordered
anticlockwise, inner boundaries clockwise.  Calculate the area of each
boundary assuming it is ordered anticlockwise, and if the area is positive
it is an outer boundary, if negative it is an inner boundary.  I've attached
a modified version of your debug.py to show this.

This may be simpler to use than points_inside_poly, but if you have multiple
nested boundaries it could get confusing unless you know which boundary
encloses which others.

Ian Thomas
import matplotlib
import matplotlib.pyplot as plot
import numpy as np


def get_polygon_area(vertices):
    v2 = np.roll(vertices, -1, axis=0)
    return np.cross(vertices, v2).sum() / 2.0

def is_polygon_inner_boundary(vertices):
    return get_polygon_area(vertices) < 0.0


x_array = []
y_array = []
for i in range(1,5) :
    for j in range(1,5) :
        x_array.append(i)
        y_array.append(j)

triang = [ [0,4,5],[0,5,1], [1,5,6],[1,6,2], [2,6,7], [2,7,3],[4,8,9], [4,9,5], [6,10,11],[6,11,7], [8,12,13], [8,13,9],[9,13,14], [9,14,10], [10,14,15],[10,15,11]]

triangle_poly =matplotlib.tri.Triangulation(x_array, y_array, triang)

data=[1]*16
level_list  = [0,2]
contourplot = plot.tricontourf(triangle_poly, data, level_list)

for level in contourplot.collections:
    polys = level.get_paths()[0].to_polygons()
    for poly in polys:
        print 'polygon:', poly
        print 'inner boundary:', is_polygon_inner_boundary(poly)

plot.show()
------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to