<div dir="ltr"><div>Hello,</div><div><br></div><div>We generate polyhedral cells as part of Ready. Some C++ code here:</div><div><a href="https://code.google.com/p/reaction-diffusion/source/browse/trunk/Ready/src/readybase/MeshGenerators.cpp#738">https://code.google.com/p/reaction-diffusion/source/browse/trunk/Ready/src/readybase/MeshGenerators.cpp#738</a></div><div><br></div><div>Tim</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 11 September 2014 17:08, Meehan, Bernard <span dir="ltr"><<a href="mailto:MEEHANBT@nv.doe.gov" target="_blank">MEEHANBT@nv.doe.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I thought I could fix it for you - but there is a bug in my program. You<br>
need to write out a vtkUnstructuredGrid rather than a vtkPolyData if you<br>
wanted to be able to select the polyhedron as a cell. I hadn't worked with<br>
those before, so I figured that I would give it a shot. I think that the<br>
face stream is wrong ... which is why no faces show up in ParaVew. You can<br>
see the points with a glyph filter, but the facets don't show up. Anyone<br>
out there have an idea of where I went wrong? (modified version of old<br>
code below)<br>
<br>
# I am using VTK 6.1.0<br>
<div><div class="h5">import vtk<br>
# This is a Rhombic Dodecahedron.<br>
<br>
# First, you need to store the vertex locations.<br>
vertex_locations = vtk.vtkPoints()<br>
vertex_locations.SetNumberOfPoints(14)<br>
vertex_locations.SetPoint( 0, (-0.816497, -0.816497,  0.00000))<br>
vertex_locations.SetPoint( 1, (-0.816497,  0.000000, -0.57735))<br>
vertex_locations.SetPoint( 2, (-0.816497,  0.000000,  0.57735))<br>
vertex_locations.SetPoint( 3, (-0.816497,  0.816497,  0.00000))<br>
vertex_locations.SetPoint( 4, ( 0.000000, -0.816497, -0.57735))<br>
vertex_locations.SetPoint( 5, ( 0.000000, -0.816497,  0.57735))<br>
vertex_locations.SetPoint( 6, ( 0.000000,  0.000000, -1.15470))<br>
vertex_locations.SetPoint( 7, ( 0.000000,  0.000000,  1.15470))<br>
vertex_locations.SetPoint( 8, ( 0.000000,  0.816497, -0.57735))<br>
vertex_locations.SetPoint( 9, ( 0.000000,  0.816497,  0.57735))<br>
vertex_locations.SetPoint(10, ( 0.816497, -0.816497,  0.00000))<br>
vertex_locations.SetPoint(11, ( 0.816497,  0.000000, -0.57735))<br>
vertex_locations.SetPoint(12, ( 0.816497,  0.000000,  0.57735))<br>
vertex_locations.SetPoint(13, ( 0.816497,  0.816497,  0.00000))<br>
<br>
# Next, you describe the polygons that represent the faces using the vertex<br>
# indices in the vtkPoints that stores the vertex locations. There are a<br>
number<br>
# of ways to do this that you can find in examples on the Wiki.<br>
<br>
polygon_faces = vtk.vtkCellArray()<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  7)<br>
q.GetPointIds().SetId(1, 12)<br>
q.GetPointIds().SetId(2, 10)<br>
q.GetPointIds().SetId(3,  5)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  7)<br>
q.GetPointIds().SetId(1, 12)<br>
q.GetPointIds().SetId(2, 13)<br>
q.GetPointIds().SetId(3,  9)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  7)<br>
q.GetPointIds().SetId(1,  9)<br>
q.GetPointIds().SetId(2,  3)<br>
q.GetPointIds().SetId(3,  2)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  7)<br>
q.GetPointIds().SetId(1,  2)<br>
q.GetPointIds().SetId(2,  0)<br>
q.GetPointIds().SetId(3,  5)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  6)<br>
q.GetPointIds().SetId(1, 11)<br>
q.GetPointIds().SetId(2, 10)<br>
q.GetPointIds().SetId(3,  4)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  6)<br>
q.GetPointIds().SetId(1,  4)<br>
q.GetPointIds().SetId(2,  0)<br>
q.GetPointIds().SetId(3,  1)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  6)<br>
q.GetPointIds().SetId(1,  1)<br>
q.GetPointIds().SetId(2,  3)<br>
q.GetPointIds().SetId(3,  8)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  6)<br>
q.GetPointIds().SetId(1,  8)<br>
q.GetPointIds().SetId(2, 13)<br>
q.GetPointIds().SetId(3, 11)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0, 10)<br>
q.GetPointIds().SetId(1, 11)<br>
q.GetPointIds().SetId(2, 13)<br>
q.GetPointIds().SetId(3, 12)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0, 13)<br>
q.GetPointIds().SetId(1,  8)<br>
q.GetPointIds().SetId(2,  3)<br>
q.GetPointIds().SetId(3,  9)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  3)<br>
q.GetPointIds().SetId(1,  1)<br>
q.GetPointIds().SetId(2,  0)<br>
q.GetPointIds().SetId(3,  2)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
q = vtk.vtkQuad()<br>
q.GetPointIds().SetId(0,  0)<br>
q.GetPointIds().SetId(1,  4)<br>
q.GetPointIds().SetId(2, 10)<br>
q.GetPointIds().SetId(3,  5)<br>
polygon_faces.InsertNextCell(q)<br>
<br>
# Next you create a vtkPolyData to store your face and vertex information<br>
that<br>
# represents your polyhedron.<br>
pd = vtk.vtkPolyData()<br>
pd.SetPoints(vertex_locations)<br>
pd.SetPolys(polygon_faces)<br>
<br>
</div></div># If you wanted to be able to load in the saved file and select the entire<br>
# polyhedron, you would need to save it as a vtkUnstructuredGrid, and you<br>
would<br>
# need to put the data into a vtkPolyhedron. This is a bit more involved<br>
than<br>
# the vtkPolyData that I used above. For a more in-depth discussion, see:<br>
# <a href="http://www.vtk.org/Wiki/VTK/Polyhedron_Support" target="_blank">http://www.vtk.org/Wiki/VTK/Polyhedron_Support</a><br>
<br>
# Based on the link above, I need to construct a face stream:<br>
face_stream = vtk.vtkIdList()<br>
face_stream.InsertNextId(polygon_faces.GetNumberOfCells())<br>
vertex_list = vtk.vtkIdList()<br>
<br>
polygon_faces.InitTraversal()<br>
while polygon_faces.GetNextCell(vertex_list) == 1:<br>
<br>
  face_stream.InsertNextId(vertex_list.GetNumberOfIds())<br>
<br>
  for j in range(vertex_list.GetNumberOfIds()):<br>
    face_stream.InsertNextId(vertex_list.GetId(j))<br>
<br>
ug = vtk.vtkUnstructuredGrid()<br>
ug.SetPoints(vertex_locations)<br>
ug.InsertNextCell(vtk.VTK_POLYHEDRON, face_stream)<br>
<br>
#--------------#<br>
# output stuff #<br>
#--------------#<br>
writer = vtk.vtkUnstructuredGridWriter()<br>
writer.SetFileName("rhombic_dodecahedron.vtk")<br>
writer.SetInputData(ug)<br>
writer.Write()<br>
<span><br>
#---------------------#<br>
# visualization stuff #<br>
#---------------------#<br>
</span># mapper = vtk.vtkPolyDataMapper()<br>
# mapper.SetInputData(pd)<br>
mapper = vtk.vtkDataSetMapper()<br>
mapper.SetInputData(ug)<br>
<span><br>
actor = vtk.vtkActor()<br>
actor.SetMapper(mapper)<br>
<br>
ren = vtk.vtkRenderer()<br>
ren.AddActor(actor)<br>
<br>
renw = vtk.vtkRenderWindow()<br>
renw.AddRenderer(ren)<br>
<br>
iren = vtk.vtkRenderWindowInteractor()<br>
iren.SetRenderWindow(renw)<br>
<br>
ren.ResetCamera()<br>
renw.Render()<br>
iren.Start()<br>
<br>
<br>
</span><span>On 9/10/14 2:34 PM, "George" <<a href="mailto:george.gerber@gmail.com">george.gerber@gmail.com</a>> wrote:<br>
<br>
>Hi,<br>
>The example of Meehan works quite well.<br>
>However, I see that each face of the polyhedron is listed as a cell. Is it<br>
>possible to hide these face 'cells', so that when you select the<br>
>polyhedron<br>
>in paraview it lists only 1 cell (the polyhedron itself)?<br>
><br>
</span><span>>Best regards,<br>
>George<br>
><br>
><br>
><br>
>--<br>
>View this message in context:<br>
</span>><a href="http://vtk.1045678.n5.nabble.com/polyhedron-in-python-tp5728643p5728664.ht" target="_blank">http://vtk.1045678.n5.nabble.com/polyhedron-in-python-tp5728643p5728664.ht</a><br>
<div class="HOEnZb"><div class="h5">>ml<br>
>Sent from the VTK - Users mailing list archive at Nabble.com.<br>
>_______________________________________________<br>
>Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
><br>
>Visit other Kitware open-source projects at<br>
><a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
><br>
>Please keep messages on-topic and check the VTK FAQ at:<br>
><a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
><br>
>Follow this link to subscribe/unsubscribe:<br>
><a href="http://public.kitware.com/mailman/listinfo/vtkusers" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
><br>
<br>
<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Tim Hutton - <a href="http://www.sq3.org.uk" target="_blank">http://www.sq3.org.uk</a> - <a href="http://profiles.google.com/tim.hutton/" target="_blank">http://profiles.google.com/tim.hutton/</a><br>
</div>