<html><div style='background-color:'><DIV>Hi Gary,</DIV>
<DIV>&nbsp; Unfortunately I am no expert so take my suggestions with a few grains of salt! I see Lisa has some suggestions on the ray casting front.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Back to vtkSampleFunction, I suppose you used vtkImplicitDataSet on your data? with SetOutValue of 0? You might want to use SetModelBounds with vtkSampleFuntion to just extend the original volume a bit, so it will actually generate those "OutValues" of 0, although this sounds like a hard way to do the same as vtkImageConstantPad. Really I thought CappingOn would do it, I am surprised you get a blank screen, try some different contour values, eg: 0.5, 0.75 to see if you can get some kind of output.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Finally,&nbsp;your call to&nbsp;altPad-&gt;SetOutputWholeExtent looks a bit strange, just verify that it will give the bounds you need, because if you have specified the wrong bit of space you will surely "draw a blank". It should be something like:</DIV>
<DIV>altDimsMinX-delta, altDimsMaxX+delta, etc where delta is some fraction of the original volume dimension. If the volume dimensions vary a lot you may want different deltas in each direction. I think I have tackled this one by using GetBounds on the input data, then loop through the dimensions, calculate each extent and add a portion, say 5% and use these values with SetBounds or Extent for the next stage.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;just more guessing, but hey maybe there's a lead in there...</DIV>
<DIV>good luck</DIV>
<DIV>&nbsp;&nbsp; Dave Pont</DIV>
<DIV>&nbsp;</DIV>
<DIV></DIV>
<DIV></DIV>&gt;From: "Gary L. Graf" <GLGRAF@ASU.EDU>
<DIV></DIV>&gt;To: David Pont <DAVID_PONT@HOTMAIL.COM>
<DIV></DIV>&gt;Subject: Re: [vtkusers] Ray Cast not working 
<DIV></DIV>&gt;Date: Sun, 12 May 2002 18:19:00 -0700 
<DIV></DIV>&gt; 
<DIV></DIV>&gt;David, 
<DIV></DIV>&gt; Thanks for the prompt reply. I tried vtkSampleFuction but it looks 
<DIV></DIV>&gt;like the only possible input is an implicit function, so I converted my 
<DIV></DIV>&gt;vtkStructuredPoints to an implicit, then applied it to 
<DIV></DIV>&gt;vtkSampleFunction, then a contour filter but all I got was a blank 
<DIV></DIV>&gt;screen. 
<DIV></DIV>&gt; 
<DIV></DIV>&gt; Looking at your other option though, led me to vtkImageConstantPad. 
<DIV></DIV>&gt;I applied it to my vtkStructuredPoints ("altVol"), set the output 
<DIV></DIV>&gt;dimension to me one greater than the input dimensions, set the constant 
<DIV></DIV>&gt;to zero, then sent it to a vtkContourFilter. If I set the pad constant 
<DIV></DIV>&gt;to zero, I get the error message saying there is no data to display 
<DIV></DIV>&gt;(i.e., the original scalars go away somehow so the contour filter can't 
<DIV></DIV>&gt;find a surface - or at least that's my interpretation of the problem). 
<DIV></DIV>&gt;If I set the constant to anything one or over I get a solid box whose 
<DIV></DIV>&gt;dimensions equal the dimensions of the original vtkStructuredPoints. If 
<DIV></DIV>&gt;I swap out the two input lines in the vtkContourFilter section below, I 
<DIV></DIV>&gt;get my original image (with defect I'm trying to correct). Have you 
<DIV></DIV>&gt;worked with this? On the surface it seems like it should be simple but 
<DIV></DIV>&gt;I am not getting the result I expected. Thanks - Gary 
<DIV></DIV>&gt; 
<DIV></DIV>&gt;Code***************************************************************************************************** 
<DIV></DIV>&gt; 
<DIV></DIV>&gt;vtkImageConstantPad *altPad = vtkImageConstantPad::New(); 
<DIV></DIV>&gt; altPad-&gt;SetInput(altVol); 
<DIV></DIV>&gt; altPad-&gt;SetConstant(0.0); 
<DIV></DIV>&gt; altPad-&gt;SetOutputWholeExtent(-1, altDimsX+1, -1, altDimsY+1, -1, 
<DIV></DIV>&gt;altDimsZ+1); 
<DIV></DIV>&gt; 
<DIV></DIV>&gt; vtkContourFilter *altContour = vtkContourFilter::New(); 
<DIV></DIV>&gt;// altContour-&gt;SetInput(altVol); 
<DIV></DIV>&gt; altContour-&gt;SetInput(altPad-&gt;GetOutput()); 
<DIV></DIV>&gt; altContour-&gt;SetValue(0,1.0); 
<DIV></DIV>&gt; 
<DIV></DIV>&gt;David Pont wrote: 
<DIV></DIV>&gt; 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; Gary, 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; I just had a quick peek at the doxygen so I am guessing... what 
<DIV></DIV>&gt; &gt; about vtkSampleFunction with CappingOn and SetCapValue 0, then 
<DIV></DIV>&gt; &gt; vtkContourFilter or others? 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; I also wondered about using vtkImageReslice to pad your data set in 
<DIV></DIV>&gt; &gt; all directions with scalar values of 0, although I think this will 
<DIV></DIV>&gt; &gt; give surfaces all over the boundary... 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; regards 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; Dave Pont 
<DIV></DIV>&gt; &gt; &gt;From: "Gary L. Graf" 
<DIV></DIV>&gt; &gt; &gt;To: vtk vtk 
<DIV></DIV>&gt; &gt; &gt;Subject: [vtkusers] Ray Cast not working 
<DIV></DIV>&gt; &gt; &gt;Date: Sat, 11 May 2002 12:40:30 -0700 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;Hi, 
<DIV></DIV>&gt; &gt; &gt; I have a vtkStructuredPoints ("altVol") which consists of a regular 
<DIV></DIV>&gt; &gt; 3D 
<DIV></DIV>&gt; &gt; &gt;array of points and I want to display the object it represents as a 
<DIV></DIV>&gt; &gt; &gt;solid. The scalar values are 0 if that grid point is outside the 
<DIV></DIV>&gt; &gt; object 
<DIV></DIV>&gt; &gt; &gt;and 1 if the point is inside the object. For various reasons, it 
<DIV></DIV>&gt; &gt; would 
<DIV></DIV>&gt; &gt; &gt;be extremely difficult to change the dimensions of the array. At some 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;locations, the object touches the boundary of the array. I have tried 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;the contour filter, marching cubes, and a few others and I can 
<DIV></DIV>&gt; &gt; generate 
<DIV></DIV>&gt; &gt; &gt;the surface but those filters leave gaps where the object contacts 
<DIV></DIV>&gt; &gt; the 
<DIV></DIV>&gt; &gt; &gt;edge of the array. As a result it no longer looks like a solid. 
<DIV></DIV>&gt; &gt; &gt; My latest attempt was to try ray casting. The code from the vtk 
<DIV></DIV>&gt; &gt; &gt;manual, p146, appeared to be a solution. I implemented it as shown 
<DIV></DIV>&gt; &gt; &gt;below, but all I get is a blank screen. I don't see anything 
<DIV></DIV>&gt; &gt; obviously 
<DIV></DIV>&gt; &gt; &gt;wrong and I have played with numerous options, but nothing seems to 
<DIV></DIV>&gt; &gt; &gt;work. Can anyone help me resolve this? Unfortunately, I need some 
<DIV></DIV>&gt; &gt; &gt;graphics of this for a progress report due Tuesday, so an early 
<DIV></DIV>&gt; &gt; response 
<DIV></DIV>&gt; &gt; &gt;would be GREATLY appreciated. Thanks - Gary Graf 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; ode***************************************************************************************************** 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkPiecewiseFunction *altVolOpacity = vtkPiecewiseFunction::New(); 
<DIV></DIV>&gt; &gt; &gt; altVolOpacity-&gt;AddPoint(0.0, 0.2); 
<DIV></DIV>&gt; &gt; &gt; altVolOpacity-&gt;AddPoint(2.0, 0.8); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkColorTransferFunction *altVolColor = 
<DIV></DIV>&gt; &gt; vtkColorTransferFunction::New(); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; altVolColor-&gt;SetColorSpaceToRGB(); 
<DIV></DIV>&gt; &gt; &gt; altVolColor-&gt;AddRGBPoint (0.2, 1.0, 0.0, 0.0); 
<DIV></DIV>&gt; &gt; &gt; altVolColor-&gt;AddRGBPoint (1.0, 0.0, 0.0, 1.0); 
<DIV></DIV>&gt; &gt; &gt; altVolColor-&gt;AddRGBPoint (20.0, 0.0, 1.0, 0.0); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkVolumeProperty *altVolProp = vtkVolumeProperty::New(); 
<DIV></DIV>&gt; &gt; &gt; altVolProp-&gt;SetColor(altVolColor); 
<DIV></DIV>&gt; &gt; &gt; altVolProp-&gt;SetScalarOpacity(altVolOpacity); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkVolumeRayCastCompositeFunction *altVolComp = 
<DIV></DIV>&gt; &gt; &gt;vtkVolumeRayCastCompositeFunction::New(); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkVolumeRayCastMapper *altVolMapper = vtkVolumeRayCastMapper::New(); 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; altVolMapper-&gt;SetVolumeRayCastFunction(altVolComp); 
<DIV></DIV>&gt; &gt; &gt; altVolMapper-&gt;SetInput(altVol); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;vtkVolume *altVolume = vtkVolume::New(); 
<DIV></DIV>&gt; &gt; &gt; altVolume-&gt;SetMapper(altVolMapper); 
<DIV></DIV>&gt; &gt; &gt; altVolume-&gt;SetProperty(altVolProp); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; altRenderer-&gt;AddProp(altVolume); 
<DIV></DIV>&gt; &gt; &gt; altRenderer-&gt;SetBackground(1,1,1); 
<DIV></DIV>&gt; &gt; &gt; altRenWin-&gt;SetSize(450,450); 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt; 
<DIV></DIV>&gt; &gt; &gt;_______________________________________________ 
<DIV></DIV>&gt; &gt; &gt;This is the private VTK discussion list. 
<DIV></DIV>&gt; &gt; &gt;Please keep messages on-topic. Check the FAQ at: 
<DIV></DIV>&gt; &gt; &gt;Follow this link to subscribe/unsubscribe: 
<DIV></DIV>&gt; &gt; &gt;http://public.kitware.com/mailman/listinfo/vtkusers 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; 
<DIV></DIV>&gt; &gt; ----------------------------------------------------------------------- 
<DIV></DIV>&gt; &gt; Send and receive Hotmail on your mobile device: Click Here 
<DIV></DIV></div><br clear=all><hr>Get your FREE download of MSN Explorer at <a href='http://g.msn.com/1HM104201/41'>http://explorer.msn.com</a>.<br></html>