[Paraview] Disappearing volume rendering?

Samuel Key samuelkey at bresnan.net
Mon Oct 13 13:17:06 EDT 2014


Cory, Bertwin, et al.;

The exact volume of an arbitrarily oriented, arbitrary 8-vertex 
hexahedron can be computed with a very elementary construct.

First, place an average-coordinate point at the center of the 
hexahedron; this point will be a common vertex point for a set of 
tetrahedrons whose construction follows.

Second, visiting the six faces of the hexahedron, place an 
average-coordinate point at the center of the quadrilateral polygonal face.
For each of the four triangles, construct the four tetrahedrons using 
the center point above of the parent hexahedron.

The only limitation is that the arbitrary 8-vertex hexhedron must be 
star-convex with respect to the hexaheron's average-coordinate center 
point. This construct works for triangular prisms and pyramids with a 
quadrilateral base.

Once one has the coordinates of four vertex nodes defining a 
tetrahedron, the volume calculation of a tetrahedron is straight 
forward. Clearly, the total volume of the hexahedron is the sum of its 
24 tetrahedral decomposition volumes.

If an n-vertex polyhedron finite element's mean quadrature gradient 
operator is constructed the same way as above, then the above construct 
works for the n-vertex polyhedron.

If an iso-surface transects the edges of an 8-node hexahedron and the 
resulting two sibling n-vertex polyhedrons are used as individual finite 
elements (which has been done), then the the above construct also 
provides exact volume fractions with respect to the two sibling n-vertex 
polyhedrons. The polygonal intersection surface need not be planar surface.

If multiple, non-intersecting iso-surfaces transect a hexahedron, then 
the respective volume fractions within the hexahedron can exactly be 
calculated inductively.

Cory, If you want to follow up off-line, I can provide a more lengthy 
write up with references plus example coding. Because of computational 
costs, I don't recommend this algorithm except in a user-invoked filter.

Samuel W Key
FMA Development, LLC
1005 39th Ave NE
Great Falls, Montana 59404




On 10/13/2014 9:36 AM, Cory Quammen wrote:
> Bertwim,
>
> I'm not sure that the volume renderer can handle VTK_HEXAHEDRON
> elements. Try the "Tetrahedralize" filter on your source and see if
> the Volume representation works.
>
> Thanks,
> Cory
>
> On Mon, Oct 13, 2014 at 10:19 AM, B.W.H. van Beest <bwvb at xs4all.nl> wrote:
>> Hi,
>>
>> I'm struggling to get a proper 3D view of my model system (yes,
>> embarrassing!)
>> but must admit my defeat.
>> After stripping almost everything, keeping the minimum to exhibit the
>> issue,
>> I'm left with the following:
>>
>> I have created a simple box source. To get a 3D representation, I
>> sub-classed
>> the code for this Source from vtkUnstructuredGridAlgorithm.
>>
>> In the RequestData method, I define the 8 point of the unit cube. I
>> added the points to the
>> underlying unstructed grid, and I specified the cell topology.
>>
>> This all seems to work: when instantiating this box Source, I *do* get the
>> expected cube in the representations (Surface, wireframe, Points).
>>
>> However, when I select the "Volume" representation, *the image disappears*
>> What am I doing wrong?
>>
>> As the code is not too long and very simple, I take the freedom to paste
>> it below.
>>
>> Kind regards.
>> Bertwim
>>
>> =========================================
>>
>>   int sphBoxSourceC::RequestData( vtkInformation *vtkNotUsed(request),
>>                                  vtkInformationVector
>> **vtkNotUsed(inputVector),
>>                                  vtkInformationVector *outputVector)
>> {
>>     // Get the info object
>>     vtkInformation *outInfo = outputVector->GetInformationObject(0);
>>     vtkUnstructuredGrid *umesh = vtkUnstructuredGrid::SafeDownCast(
>> outInfo->Get( vtkDataObject::DATA_OBJECT() ) );
>>
>>     // Pre-allocate some memory
>>     umesh->Allocate( 1024 );
>>
>>     // Specify points.
>>     double r0[] = { 0.0, 0.0, 0.0 };
>>     double r1[] = { 1.0, 0.0, 0.0 };
>>     double r2[] = { 0.0, 1.0, 0.0 };
>>     double r3[] = { 1.0, 1.0, 0.0 };
>>     double r4[] = { 0.0, 0.0, 1.0 };
>>     double r5[] = { 1.0, 0.0, 1.0 };
>>     double r6[] = { 0.0, 1.0, 1.0 };
>>     double r7[] = { 1.0, 1.0, 1.0 };
>>
>>     // Collect the points in a vtk data structures.
>>     {
>>        vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
>>        points->SetDataType( VTK_DOUBLE );
>>
>>        points->InsertNextPoint( r0 );
>>        points->InsertNextPoint( r1 );
>>        points->InsertNextPoint( r2 );
>>        points->InsertNextPoint( r3 );
>>        points->InsertNextPoint( r4 );
>>        points->InsertNextPoint( r5 );
>>        points->InsertNextPoint( r6 );
>>        points->InsertNextPoint( r7 );
>>
>>        // Transfer points to umesh.
>>        umesh->SetPoints( points );
>>     }
>>
>>     // Cell Topology
>>     vtkIdType vtx[8] = { 0, 1, 3, 2, 4, 5, 7, 6 };
>>     umesh->InsertNextCell( VTK_HEXAHEDRON, 8, vtx );
>>
>>     return 1;
>> }
>>
>>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/paraview
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/paraview
>



More information about the ParaView mailing list