Hi, Everyone:<br>
<br>
This is the third time I'm posting about this issue, of the previous
two one remained unanswered and the last one I've got a kind response
by Randall Hand:
<a href="http://public.kitware.com/pipermail/vtkusers/2006-February/083786.html">http://public.kitware.com/pipermail/vtkusers/2006-February/083786.html</a>
who pointed me in the direction of this fixed bug:
<a href="http://www.vtk.org/Bug/bug.php?op=show&amp;bugid=2546&amp;pos=3">http://www.vtk.org/Bug/bug.php?op=show&amp;bugid=2546&amp;pos=3</a> but the
problem persists.<br>
<br>
I think the vtkUnstructuredGridVolumeRayCastMapper has some serious bug
(look at the screenshots posted in the thread that Randall answered),
and to prove It I think I need to post my entire example code: <br>
<br>
(Really, I think I'm on to something, specially If you consider that
the mapper for unstructured grids is fairly new, but I didn't want to
litter the bug report with false positives).<br>
<br>
<br>
#include &quot;vtkVoxel.h&quot;<br>
#include &quot;vtkCellData.h&quot;<br>
#include &quot;vtkRenderer.h&quot;<br>
#include &quot;vtkPoints.h&quot;<br>
#include &quot;vtkUnstructuredGrid.h&quot;<br>
#include &quot;vtkRenderWindow.h&quot;<br>
#include &quot;vtkRenderWindowInteractor.h&quot;<br>
#include &quot;vtkColorTransferFunction.h&quot;<br>
#include &quot;vtkPiecewiseFunction.h&quot;<br>
#include &quot;vtkVolume.h&quot;<br>
#include &quot;vtkVolumeProperty.h&quot;<br>
#include &quot;vtkUnstructuredGridWriter.h&quot;<br>
#include &quot;vtkDoubleArray.h&quot;<br>
#include &quot;vtkDataSetTriangleFilter.h&quot;<br>
#include &quot;vtkUnstructuredGridVolumeRayCastMapper.h&quot;<br>
#include &quot;vtkUnstructuredGridVolumeRayCastFunction.h&quot;<br>
#include &quot;vtkImageData.h&quot;<br>
#include &quot;vtkDataSetToImageFilter.h&quot;<br>
#include &quot;stdio.h&quot;<br>
#include &quot;iostream.h&quot;<br>
#include &quot;fstream.h&quot;<br>
#include &quot;string.h&quot;<br>
#include &quot;vtkOpenGLRenderer.h&quot;<br>
#include &quot;vtkXOpenGLRenderWindow.h&quot;<br>
#include &quot;vtkXRenderWindowInteractor.h&quot;<br>
<br>
<br>
int main(int argc, char *dim[]) <br>
{&nbsp;&nbsp;&nbsp; <br>
<br>
&nbsp; int dim_x =&nbsp; atoi(dim[1]);<br>
&nbsp; int dim_y =&nbsp; atoi(dim[1]);<br>
&nbsp; int dim_z =&nbsp; atoi(dim[1]);<br>
&nbsp; int i, j, k;<br>
&nbsp; int no_points = dim_x * dim_x * dim_x;<br>
&nbsp; int no_voxels = (dim_x-1) * (dim_x-1) * (dim_x-1);<br>
<br>
&nbsp; vtkPoints *points = vtkPoints::New();<br>
&nbsp; points-&gt;SetNumberOfPoints(no_points);<br>
&nbsp; points-&gt;SetDataTypeToDouble();<br>
<br>
&nbsp; for(k=0; k&lt; dim_z; k++)<br>
&nbsp;&nbsp;&nbsp; for(j=0; j&lt; dim_y; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; i&lt; dim_x; i++) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; points-&gt;InsertNextPoint(i, j, k);<br>
<br>
&nbsp; vtkDoubleArray *pts = vtkDoubleArray::New();<br>
&nbsp; pts-&gt;SetName(&quot;pts&quot;);<br>
<br>
&nbsp; for(i=0; i &lt; no_voxels; i++)<br>
&nbsp;&nbsp;&nbsp; pts-&gt;InsertNextValue(i);<br>
<br>
&nbsp; vtkUnstructuredGrid *grid = vtkUnstructuredGrid::New();<br>
<br>
&nbsp; vtkColorTransferFunction *funtrans = vtkColorTransferFunction::New();<br>
<br>
&nbsp; //To create the grid we need to know if we are in any of the<br>
&nbsp; //cube limits (height, width, depth), to prevent from adding<br>
&nbsp; //inexistant cells<br>
&nbsp; j=0;<br>
&nbsp; k=0;<br>
&nbsp; int w = 0;<br>
&nbsp; int count = 0;<br>
&nbsp; vtkVoxel *v = vtkVoxel::New();<br>
<br>
&nbsp; for(i=0; i&lt; (no_points - ((dim_x * dim_x) + (dim_x + 1))); i++) {<br>
&nbsp;&nbsp;&nbsp; if(j != dim_x - 1 &amp;&amp; k!= dim_x - 1) { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(0, i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(1, i+1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(2, i+dim_x);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(3, i+dim_x+1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(4, i + (dim_x * dim_y));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(5, i + (dim_x * dim_y) + 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(6, i + (dim_x * dim_y) + dim_x);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v-&gt;GetPointIds())-&gt;SetId(7, i + (dim_x * dim_y) + dim_x + 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid-&gt;InsertNextCell(v-&gt;GetCellType(), v-&gt;GetPointIds());<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; else { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(j == dim_x-1) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j=0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(k == dim_x-1) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j=0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k=0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i+dim_x;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; }<br>
&nbsp; grid-&gt;SetPoints(points);<br>
<br>
&nbsp; vtkCellData *cd = grid-&gt;GetCellData();<br>
&nbsp; cd-&gt;SetNumberOfTuples(no_voxels);<br>
&nbsp; cd-&gt;SetScalars(pts);<br>
<br>
&nbsp; int idx = 0;<br>
&nbsp; while (idx &lt; no_voxels) {<br>
&nbsp;&nbsp;&nbsp; if (idx%2 == 0 )<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; funtrans-&gt;AddRGBPoint(pts-&gt;GetValue(idx), 1, 0, 0);<br>
&nbsp;&nbsp;&nbsp; else funtrans-&gt;AddRGBPoint(pts-&gt;GetValue(idx), 0, 1,0);<br>
<br>
&nbsp;&nbsp;&nbsp; idx++;<br>
&nbsp; }<br>
&nbsp; vtkOpenGLRenderer *renderer = vtkOpenGLRenderer::New();<br>
&nbsp; vtkXOpenGLRenderWindow *renwin =&nbsp; vtkXOpenGLRenderWindow::New();<br>
&nbsp; vtkXRenderWindowInteractor *iren = vtkXRenderWindowInteractor::New();<br>
<br>
&nbsp; renwin-&gt;AddRenderer(renderer);<br>
&nbsp; iren-&gt;SetRenderWindow(renwin);<br>
<br>
&nbsp; vtkPiecewiseFunction *funop = vtkPiecewiseFunction::New();<br>
&nbsp; funop-&gt;AddPoint(0, 1);<br>
&nbsp; funop-&gt;AddPoint(no_voxels, 1);<br>
<br>
&nbsp; vtkVolumeProperty *vp = vtkVolumeProperty::New();<br>
&nbsp; vp-&gt;SetColor(funtrans);<br>
&nbsp; vp-&gt;SetScalarOpacity(funop);<br>
<br>
&nbsp; vtkUnstructuredGridVolumeRayCastMapper *vrcm = vtkUnstructuredGridVolumeRayCastMapper::New();<br>
<br>
&nbsp; vtkDataSetTriangleFilter *filter = vtkDataSetTriangleFilter::New();<br>
&nbsp; filter-&gt;SetInput(grid);<br>
<br>
&nbsp; vrcm-&gt;SetInput(filter-&gt;GetOutput()); <br>
<br>
&nbsp; vtkVolume *volume = vtkVolume::New();<br>
&nbsp; volume-&gt;SetMapper(vrcm);<br>
&nbsp; volume-&gt;SetProperty(vp);<br>
<br>
&nbsp; renderer-&gt;AddActor(volume);<br>
<br>
&nbsp; renwin-&gt;Render();<br>
&nbsp; iren-&gt;Start();<br>
}<br>
<br>
<br>
This will attempt to create a cube with dimensions arg[1] coloring odd and even cells with green and red.<br>
Try it with argv[1] = 6, then argv[1] = 20, see the results.<br>
<br>
Is this a bug, or I'm doing things the wrong way?<br>
<br>
<br>
Thanks in advance,<br>
<br>
Juan.<br>
<br>