From 698d4fae7ccfbd208370121ef0bea5b6c9b6c51e Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Thu, 10 Dec 2015 09:46:23 -0800 Subject: [PATCH 1/7] Added a test for issue #1730 will eventually fix #1730 --- .../vcs/test_vcs_meshfill_vertices_issue.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 testing/vcs/test_vcs_meshfill_vertices_issue.py diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py new file mode 100644 index 0000000000..aad4428a95 --- /dev/null +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -0,0 +1,44 @@ +import numpy +import vcs + +x=vcs.init() + +data_values = [ 25, 45, 55.] + +data_lon = [ 5., 10., 15.] +data_lat = [ 5., 10., 15.] + +data_lon_vert = [ + # Triangle (last one missing because traingle has only 3 vertices + [2.5,7.5,5.,1.e20], + # Square + [7.5,12.5,12.5,7.5], + # Diamond + [15.,17.5,15,12.5], + ] + +data_lat_vert = [ + # triangle + [2.5,2.5,7.5,1.e20], + # square + [7.5,7.5,12.5,12.5], + # diamond + [12.5,15,17.5,15], + ] + +mesh = numpy.array([data_lat_vert,data_lon_vert]) +print "MESH SHAPE:",mesh.shape,mesh.dtype +mesh = numpy.transpose(mesh,(1,0,2)) +print "MESH SHAPE:",mesh.shape +mesh = numpy.ma.masked_greater(mesh,1.e19) + +print "Triangle lats:" +print mesh[0][0] +print "Triangle lons:" +print mesh[0][1] +m = x.createmeshfill() +m.mesh = True + +x.plot(numpy.array(data_values,),mesh,m) +x.png("mesh_miss") +raw_input("press enter") From 5b99feec94ad629e2ed8d9f68a4ad81cca2c9a92 Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Thu, 10 Dec 2015 09:51:35 -0800 Subject: [PATCH 2/7] Added test to test suite --- testing/vcs/CMakeLists.txt | 5 +++++ testing/vcs/test_vcs_meshfill_vertices_issue.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/testing/vcs/CMakeLists.txt b/testing/vcs/CMakeLists.txt index 28e44a87d5..f91c823341 100644 --- a/testing/vcs/CMakeLists.txt +++ b/testing/vcs/CMakeLists.txt @@ -23,6 +23,11 @@ cdat_add_test(vcs_test_png_set_size "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_png_set_size.py ) +cdat_add_test(vcs_meshfill_missing_vertice + "${PYTHON_EXECUTABLE}" + ${cdat_SOURCE_DIR}/testing/vcs/test_vcs_meshfill_vertices_issue.py + "${BASELINE_DIR}/test_vcs_meshfill_vertices_issue.png" +) cdat_add_test(vcs_test_png_metadata "${PYTHON_EXECUTABLE}" ${cdat_SOURCE_DIR}/testing/vcs/test_png_metadata.py diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py index aad4428a95..4cb20eea03 100644 --- a/testing/vcs/test_vcs_meshfill_vertices_issue.py +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -1,8 +1,17 @@ import numpy import vcs +import sys +import os +pth = os.path.join(os.path.dirname(__file__),"..") +sys.path.append(pth) +import checkimage x=vcs.init() +x.setantialiasing(0) +x.drawlogooff() +x.setbgoutputdimensions(1200,1091,units="pixels") + data_values = [ 25, 45, 55.] data_lon = [ 5., 10., 15.] @@ -40,5 +49,8 @@ m.mesh = True x.plot(numpy.array(data_values,),mesh,m) -x.png("mesh_miss") +x.png("test_vcs_meshfill_vertices_issue.png") +src = sys.argv[1] +ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) + raw_input("press enter") From 949be822dfde6c0464c99fe3830ba6ddd0ebb063 Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Thu, 10 Dec 2015 10:18:41 -0800 Subject: [PATCH 3/7] almost there shapes are correctly plotted but still marked as missing --- Packages/vcs/Lib/vcs2vtk.py | 6 +++++- testing/vcs/test_vcs_meshfill_vertices_issue.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Packages/vcs/Lib/vcs2vtk.py b/Packages/vcs/Lib/vcs2vtk.py index 31af7048de..b634fafd5a 100644 --- a/Packages/vcs/Lib/vcs2vtk.py +++ b/Packages/vcs/Lib/vcs2vtk.py @@ -89,6 +89,7 @@ def putMaskOnVTKGrid(data, grid, actorColor=None, cellData=True, deep=True): lut = vtk.vtkLookupTable() r, g, b, a = actorColor lut.SetNumberOfTableValues(2) + print "CELL DATA:",cellData if not cellData: grid2.GetPointData().RemoveArray( vtk.vtkDataSetAttributes.GhostArrayName()) @@ -253,7 +254,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): try: # First try to see if we can get a mesh out of this g = data1.getGrid() - # Ok need unstrctured grid + # Ok need unstructured grid if isinstance(g, cdms2.gengrid.AbstractGenericGrid): continents = True wrap = [0., 360.] @@ -285,6 +286,9 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): ym = data2[:, 0].min() yM = data2[:, 0].max() N = data2.shape[0] + print "DATA2",data2 + data2 = data2.filled(numpy.nan) + print "DATA2",data2 m2 = numpy.ascontiguousarray(numpy.transpose(data2, (0, 2, 1))) nVertices = m2.shape[-2] m2.resize((m2.shape[0] * m2.shape[1], m2.shape[2])) diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py index 4cb20eea03..cd87320435 100644 --- a/testing/vcs/test_vcs_meshfill_vertices_issue.py +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -46,6 +46,7 @@ print "Triangle lons:" print mesh[0][1] m = x.createmeshfill() +m.levels = [20,30,50,70,80] m.mesh = True x.plot(numpy.array(data_values,),mesh,m) From 37140e16d6317f9686e4bd6a3a0df584b3a926ab Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Thu, 10 Dec 2015 10:25:24 -0800 Subject: [PATCH 4/7] cleaned up print debug --- Packages/vcs/Lib/vcs2vtk.py | 3 --- testing/vcs/test_vcs_meshfill_vertices_issue.py | 4 +++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Packages/vcs/Lib/vcs2vtk.py b/Packages/vcs/Lib/vcs2vtk.py index b634fafd5a..d4ca00d95e 100644 --- a/Packages/vcs/Lib/vcs2vtk.py +++ b/Packages/vcs/Lib/vcs2vtk.py @@ -89,7 +89,6 @@ def putMaskOnVTKGrid(data, grid, actorColor=None, cellData=True, deep=True): lut = vtk.vtkLookupTable() r, g, b, a = actorColor lut.SetNumberOfTableValues(2) - print "CELL DATA:",cellData if not cellData: grid2.GetPointData().RemoveArray( vtk.vtkDataSetAttributes.GhostArrayName()) @@ -286,9 +285,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): ym = data2[:, 0].min() yM = data2[:, 0].max() N = data2.shape[0] - print "DATA2",data2 data2 = data2.filled(numpy.nan) - print "DATA2",data2 m2 = numpy.ascontiguousarray(numpy.transpose(data2, (0, 2, 1))) nVertices = m2.shape[-2] m2.resize((m2.shape[0] * m2.shape[1], m2.shape[2])) diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py index cd87320435..d5a9a20d53 100644 --- a/testing/vcs/test_vcs_meshfill_vertices_issue.py +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -41,10 +41,12 @@ print "MESH SHAPE:",mesh.shape mesh = numpy.ma.masked_greater(mesh,1.e19) +""" print "Triangle lats:" print mesh[0][0] print "Triangle lons:" print mesh[0][1] +""" m = x.createmeshfill() m.levels = [20,30,50,70,80] m.mesh = True @@ -52,6 +54,6 @@ x.plot(numpy.array(data_values,),mesh,m) x.png("test_vcs_meshfill_vertices_issue.png") src = sys.argv[1] -ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) +#ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) raw_input("press enter") From 4a29d7874c9069941b5098c53f7b37d6fa2e4395 Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Thu, 10 Dec 2015 16:26:06 -0800 Subject: [PATCH 5/7] thx to @sankhesh got the number of ids per cell correctly done --- Packages/vcs/Lib/vcs2vtk.py | 25 ++++++++----------- .../vcs/test_vcs_meshfill_vertices_issue.py | 9 +++---- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/Packages/vcs/Lib/vcs2vtk.py b/Packages/vcs/Lib/vcs2vtk.py index d4ca00d95e..88bd3adcbb 100644 --- a/Packages/vcs/Lib/vcs2vtk.py +++ b/Packages/vcs/Lib/vcs2vtk.py @@ -263,7 +263,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): xM = m[:, 1].max() ym = m[:, 0].min() yM = m[:, 0].max() - N = m.shape[0] + numberOfCells = m.shape[0] # For vtk we need to reorder things m2 = numpy.ascontiguousarray(numpy.transpose(m, (0, 2, 1))) m2.resize((m2.shape[0] * m2.shape[1], m2.shape[2])) @@ -284,7 +284,7 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): xM = data2[:, 1].max() ym = data2[:, 0].min() yM = data2[:, 0].max() - N = data2.shape[0] + numberOfCells = data2.shape[0] data2 = data2.filled(numpy.nan) m2 = numpy.ascontiguousarray(numpy.transpose(data2, (0, 2, 1))) nVertices = m2.shape[-2] @@ -300,20 +300,15 @@ def genGrid(data1, data2, gm, deep=True, grid=None, geo=None): if m3 is not None: # Create unstructured grid points vg = vtk.vtkUnstructuredGrid() - lst = vtk.vtkIdTypeArray() - cells = vtk.vtkCellArray() - numberOfCells = N - lst.SetNumberOfComponents(nVertices + 1) - lst.SetNumberOfTuples(numberOfCells) - for i in range(N): - tuple = [None] * (nVertices + 1) - tuple[0] = nVertices + for i in range(numberOfCells): + pt_ids = [] for j in range(nVertices): - tuple[j + 1] = i * nVertices + j - lst.SetTuple(i, tuple) - # ??? TODO ??? when 3D use CUBE? - cells.SetCells(numberOfCells, lst) - vg.SetCells(vtk.VTK_POLYGON, cells) + indx = i * nVertices + j + if not numpy.isnan(m3[indx][0]): # missing value means skip vertex + pt_ids.append(indx) + vg.InsertNextCell(vtk.VTK_POLYGON, + len(pt_ids), + pt_ids) else: # Ok a simple structured grid is enough if grid is None: diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py index d5a9a20d53..9e736a3936 100644 --- a/testing/vcs/test_vcs_meshfill_vertices_issue.py +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -10,7 +10,7 @@ x.setantialiasing(0) x.drawlogooff() -x.setbgoutputdimensions(1200,1091,units="pixels") +x.setbgoutputdimensions(1200,1090,units="pixels") data_values = [ 25, 45, 55.] @@ -51,9 +51,8 @@ m.levels = [20,30,50,70,80] m.mesh = True -x.plot(numpy.array(data_values,),mesh,m) +x.plot(numpy.array(data_values,),mesh,m,bg=True) x.png("test_vcs_meshfill_vertices_issue.png") src = sys.argv[1] -#ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) - -raw_input("press enter") +ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) +sys.exit(ret) From 31d935edc81774c92b8d13b38cc259e21ad904a7 Mon Sep 17 00:00:00 2001 From: Charles Doutriaux Date: Fri, 11 Dec 2015 11:44:21 -0800 Subject: [PATCH 6/7] retrigger --- testing/vcs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/vcs/CMakeLists.txt b/testing/vcs/CMakeLists.txt index f91c823341..519c7dc655 100644 --- a/testing/vcs/CMakeLists.txt +++ b/testing/vcs/CMakeLists.txt @@ -158,7 +158,7 @@ cdat_add_test(vcs_test_background_mode_rotate ${cdat_SOURCE_DIR}/testing/vcs/test_background_mode_rotate.py ) -# Some vector plot testing +# Some vector plot tests FOREACH(angle -180 -135 -90 -45 0 45 135 90 135 ) cdat_add_test(vcs_test_vectors_angle_${angle} "${PYTHON_EXECUTABLE}" From 05e0fd06e0fac2ca76979e496d80faebb0762e9e Mon Sep 17 00:00:00 2001 From: Aashish Chaudhary Date: Fri, 11 Dec 2015 23:17:05 -0500 Subject: [PATCH 7/7] Fixed style issues --- .../vcs/test_vcs_meshfill_vertices_issue.py | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/testing/vcs/test_vcs_meshfill_vertices_issue.py b/testing/vcs/test_vcs_meshfill_vertices_issue.py index 9e736a3936..6317ef0719 100644 --- a/testing/vcs/test_vcs_meshfill_vertices_issue.py +++ b/testing/vcs/test_vcs_meshfill_vertices_issue.py @@ -10,7 +10,7 @@ x.setantialiasing(0) x.drawlogooff() -x.setbgoutputdimensions(1200,1090,units="pixels") +x.setbgoutputdimensions(1200, 1090, units="pixels") data_values = [ 25, 45, 55.] @@ -18,13 +18,12 @@ data_lat = [ 5., 10., 15.] data_lon_vert = [ - # Triangle (last one missing because traingle has only 3 vertices - [2.5,7.5,5.,1.e20], - # Square - [7.5,12.5,12.5,7.5], - # Diamond - [15.,17.5,15,12.5], - ] + # Triangle (last one missing because traingle has only 3 vertices + [2.5,7.5,5.,1.e20], + # Square + [7.5,12.5,12.5,7.5], + # Diamond + [15.,17.5,15,12.5],] data_lat_vert = [ # triangle @@ -32,8 +31,7 @@ # square [7.5,7.5,12.5,12.5], # diamond - [12.5,15,17.5,15], - ] + [12.5,15,17.5,15],] mesh = numpy.array([data_lat_vert,data_lon_vert]) print "MESH SHAPE:",mesh.shape,mesh.dtype @@ -54,5 +52,6 @@ x.plot(numpy.array(data_values,),mesh,m,bg=True) x.png("test_vcs_meshfill_vertices_issue.png") src = sys.argv[1] -ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png",src,checkimage.defaultThreshold) +ret = checkimage.check_result_image("test_vcs_meshfill_vertices_issue.png", + src, checkimage.defaultThreshold) sys.exit(ret)