This is resolved. The missing piece was the invocation of the not intuitively obvious dataset.clearData(). Thanks Peter for your help.
Hugh >-----Original Message----- >From: [email protected] [mailto:hdf-forum- >[email protected]] On Behalf Of Peter Cao >Sent: Monday, December 14, 2009 11:00 AM >To: [email protected] >Subject: Re: [Hdf-forum] Java HDF : unable to select frame in 3D array > > >Try HDFView to see if you can see your 3D data page by page. > >The class ncsa.hdf.view.DefaultTableView.java use very similar code to >yours to show 3D data page by page. I copied the part of the code below. > >===== > private void gotoPage(long idx) > { > if (dataset.getRank() < 3) { > return; > } > > if (isValueChanged) { > updateValueInFile(); > } > > long[] start = dataset.getStartDims(); > int[] selectedIndex = dataset.getSelectedIndex(); > long[] dims = dataset.getDims(); > > if ((idx <0) || (idx >= dims[selectedIndex[2]])) { > toolkit.beep(); > JOptionPane.showMessageDialog(this, > "Frame number must be between 0 and >"+(dims[selectedIndex[2]]-1), > getTitle(), > JOptionPane.ERROR_MESSAGE); > return; > } > > start[selectedIndex[2]] = idx; > curFrame = idx; > dataset.clearData(); > > setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); > > try { > dataValue = dataset.getData(); > if (dataset instanceof ScalarDS) > { > ((ScalarDS)dataset).convertFromUnsignedC(); > dataValue = dataset.getData(); > } > } > catch (Exception ex) > { > >setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); > dataValue = null; > JOptionPane.showMessageDialog(this, ex, getTitle(), >JOptionPane.ERROR_MESSAGE); > return; > } > > setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); > > frameField.setText(String.valueOf(curFrame)); > updateUI(); > } >====== > >Shane, Hugh A. wrote: >> I tried this and get the same results. Any other ideas? >> >> >>> -----Original Message----- >>> From: [email protected] [mailto:hdf-forum- >>> [email protected]] On Behalf Of Peter Cao >>> Sent: Friday, December 04, 2009 3:16 PM >>> To: [email protected] >>> Subject: Re: [Hdf-forum] Java HDF : unable to select frame in 3D >array >>> >>> >>> Try this. >>> >>> public int[] getFrame(Dataset dataset, int frameNum) { >>> >>> dataset.init(); >>> >>> // Select the desired frame >>> >>> long[] startDims = dataset.getStartDims(); >>> >>> int[] idx = getSelectedIndex(); // idx[0]=hight, idx[1]=width, >>> idx[2]=depth >>> >>> >>> // if you want to look through the first dimension, uncomment out >the follwing line >>> //idx[0]=1; idx[1]=2; idx[2] = 0 >>> >>> >>> startDims[idx[2]] = frameNum; >>> >>> // Grab the frame data >>> >>> int[] rawdata = (*int*[])dataset.getData(); >>> >>> return rawdata; >>> >>> } >>> >>> >>> >>> >>> Shane, Hugh A. wrote: >>> >>>> An HDF newbie here... >>>> >>>> I'm attempting to use the HDF Object Package 1.6.0_12 to read a >>>> previously created HDF5 formatted file that contains, among other >>>> things, a Dataset containing a 3-dimensional array of integers, row >x >>>> column x frame. I want to operate on the data one frame at a time >but >>>> am unable to select the frame that I want. The Dataset object seems >to >>>> always default to frame 0 and won't budge from there. In the code >>>> fragment below, the returned frame is the same regardless of the >value >>>> of frameNum. What am I doing wrong? >>>> >>>> public int[] getFrame(Dataset dataset, int frameNum) { >>>> >>>> dataset.init(); >>>> >>>> // Select the desired frame >>>> >>>> long[] startDims = dataset.getStartDims(); >>>> >>>> startDims[0] = frameNum; >>>> >>>> // Grab the frame data >>>> >>>> int[] rawdata = (*int*[])dataset.getData(); >>>> >>>> return rawdata; >>>> >>>> } >>>> _______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
