Re: [Fwd: Re: Problem with DelaunayCustom]

Hi Olav,

I tried moving your code into a class named Tools but
it wouldn't compile because it couldn't resolve 'i',
'reader' and possibly others. I'll work on this if you
send me a complete and self-contained class source that
generates the Exception.

Thanks,
Bill

Olav Rybatzki wrote:
> 
> Sorry Bill,
> 
> I saw, that the mailer had send my reply to your private email address.
> Here is the answer to your question at the mailing list.
> 
> -------- Original Message --------
> Subject: Re: Problem with DelaunayCustom
> Date: Thu, 18 Jul 2002 01:46:05 +0200
> From: Olav Rybatzki <o.rybatzki@xxxxxx>
> To: Bill Hibbard <billh@xxxxxxxxxxxxx>
> References: <Pine.GSO.4.44.0207171806310.8736-100000@xxxxxxxxxxxxxxxxxx>
> 
> Bill Hibbard wrote:
>  > On Thu, 18 Jul 2002, Olav Rybatzki wrote:
>  >
>  >
>  >>I have a problem with the DelaunayCustom. The data I get are
>  >>unstructured with a connectivity list of 8 points per node (a
> hexahedron).
>  >>
>  >>
>  >>
>         7-------------6
>  >>               . |           . |
>  >>            4    |         5   |
>  >>            |    |         |   |
>  >>            |    |         |   |
>  >>            |    3---------|---2
>  >>            |  .           | .
>  >>            0--------------1
>  >>
>  >>
>  >>To get my data into the DelaunayCustom I split the hexahedron into 5
>  >>tetrahedron. The 5 tetrahedrons have the following points,
>  >>
>  >>tetra_1 (0,5,7,4)
>  >>tetra_2 (0,5,7,2)
>  >>tetra_3 (0,2,5,1)
>  >>tetra_4 (0,2,7,3)
>  >>tetra_5 (7,5,2,6)
>  >>
>  >>Now when I create the DelaunayCustom with the new connectivity list I
>  >>get the following exception
>  >>
>  >>Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
>  >>         at visad.Delaunay.finish_triang(Delaunay.java:510)
>  >>         at visad.DelaunayCustom.<init>(DelaunayCustom.java:115)
>  >>         at visad.DelaunayCustom.<init>(DelaunayCustom.java:43)
>  >
>  >
>  > Thanks for the stack dump, but I cannot determine the
>  > problem from it. Can you send me a simple program that
>  > generates this Exception?
>  >
>  > Thanks, Bill
>  >
>  >
> 
> Hi Bill,
> 
> thank you for your answer. Here comes the code.
> 
>         RealType tempType = reader.getTemperatureType();
>         RealTupleType domainTuple = reader.getCoordinateTuple();
> 
>         FunctionType funcDomainTemperature = new
> FunctionType(domainTuple, tempType);
> 
>         Vector axis = reader.getAxisValues();
>         RealType xaxisType = reader.getXAxisType();
>         RealType yaxisType = reader.getYAxisType();
>         RealType zaxisType = reader.getZAxisType();
> 
>         Vector variable = reader.getVariableValues();
> 
>         DisplayImplJ3D display3D = new DisplayImplJ3D("3D Display" +
>                 reader.getTitle());
>         GraphicsModeControl dispGMC = (GraphicsModeControl)
> display3D.getGraphicsModeControl();
> 
>         ScalarMap colMap = new ScalarMap(xaxisType, Display.XAxis);
>         ScalarMap rowMap = new ScalarMap(yaxisType, Display.YAxis);
>         ScalarMap zMap = new ScalarMap(zaxisType, Display.ZAxis);
>         ScalarMap tempMap = new ScalarMap(tempType, Display.RGB);
>         ScalarMap tempIsoMap = new ScalarMap(tempType,                        
>           Display.IsoContour);
> 
>         display3D.addMap(colMap);
>         display3D.addMap(rowMap);
>         display3D.addMap(zMap);
>         //display3D.addMap (tempIsoMap);
>         display3D.addMap(tempMap);
> 
>         float[][] pointValues = (float[][])axis.get(0);
> 
>         int[][] connect =                                                     
>           Tools.hexaedronToTretrahedron(reader.getConnectingList());
> 
>         System.gc();
> 
>         DelaunayCustom tri = new DelaunayCustom(pointValues, connect);
>         Irregular3DSet domainSet = new Irregular3DSet(domainTuple,            
>           pointValues,
>                 null,
>                 null,
>                 null,
>                 tri);
> 
>         FlatField val_ff = new FlatField(funcDomainTemperature,               
>                   domainSet);
> 
>         float[][] var = (float[][]) variable.get(0);
>         System.gc();
> 
>         float[][] data = new float[1][var[0].length];
> 
>         for(i=0; i<var[0].length; i++)
>         {
>            data[0][i] = var[1][i];
>         }
>         System.out.println("Array of Temp values is now ready for use");
>         System.gc();
> 
>         val_ff.setSamples(data);
>         DataReferenceImpl data_ref = new DataReferenceImpl("data_ref");
>         data_ref.setData(val_ff);
> 
>         display3D.addReference( data_ref );
> 
>         JFrame frame = new JFrame("First VisAD Test" + reader.getTitle());
>         frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
>         frame.getContentPane().add(display3D.getComponent());
>         frame.setSize(400, 300);
>         frame.setVisible(true);
> 
> The algoritm to split a hexahedron to 5 tetrahedrons, placed in the
> class Tools, is shown below.
> 
> public static int[][] hexaedronToTretrahedron(int[][] hex)
>      {
>         int[][] hexa = hex;
>         int[][] tetra = new int[hexa.length*5][4];
> 
>         for(int i=0; i<hexa.length; i++)
>         {
> 
>               tetra[i*5][0] = hexa[i][0];
>               tetra[i*5][1] = hexa[i][5];
>               tetra[i*5][2] = hexa[i][7];
>               tetra[i*5][3] = hexa[i][4];
> 
>               tetra[i*5+1][0] = hexa[i][0];
>               tetra[i*5+1][1] = hexa[i][5];
>               tetra[i*5+1][2] = hexa[i][7];
>               tetra[i*5+1][3] = hexa[i][2];
> 
>               tetra[i*5+2][0] = hexa[i][0];
>               tetra[i*5+2][1] = hexa[i][2];
>               tetra[i*5+2][2] = hexa[i][5];
>               tetra[i*5+2][3] = hexa[i][7];
> 
>               tetra[i*5+3][0] = hexa[i][0];
>               tetra[i*5+3][1] = hexa[i][2];
>               tetra[i*5+3][2] = hexa[i][7];
>               tetra[i*5+3][3] = hexa[i][3];
> 
>               tetra[i*5+4][0] = hexa[i][7];
>               tetra[i*5+4][1] = hexa[i][5];
>               tetra[i*5+4][2] = hexa[i][2];
>               tetra[i*5+4][3] = hexa[i][6];
> 
>         }
>         return tetra;
>      }
> 
> Thanks, Olav

-- 
----------------------------------------------------------
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738
http://www.ssec.wisc.edu/~billh/vis.html