<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Dear David</div><div class=""><br class=""></div><div class="">Thanks for your answer. You were indeed right, the poly data object was hidden within the margins of the plane (I thought a plane has no thickness) and using GetBounds() showed that it did.</div><div class=""><br class=""></div><div class="">All the best</div><div class="">Andreas</div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Andreas Pedroni<br class="">Weinbergweg 2<br class="">5408 Ennetbaden<br class="">Schweiz</div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><a href="mailto:anpedroni@gmail.com" class="">anpedroni@gmail.com</a><br class="">+41(0)79 300 17 42</div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">Am 18.11.2018 um 22:39 schrieb David Gobbi <<a href="mailto:david.gobbi@gmail.com" class="">david.gobbi@gmail.com</a>>:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Andreas,<div class=""><br class=""></div><div class="">My comments about vtkImageActor might not be the full solution, but I can guarantee that they are part of the solution.</div><div class=""><br class=""></div><div class="">If the objects cannot be displayed together, it is probably because they are either too far apart in world coordinates, or perhaps the image actor is simply obscuring (in front of) the spine actor.  To help with debugging the coordinates, you can print the bounding box for the image data and for the poly data to make sure they are in roughly the same location.  Use the data's GetBounds() method to do this.  Note that the actors also have a GetBounds method, which returns the bounding box after the actor transformations have taken place.</div><div class=""><br class=""></div><div class="">   David</div><div class=""><br class=""></div><div class=""><br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Sun, Nov 18, 2018 at 1:26 PM Andreas Pedroni <<a href="mailto:anpedroni@gmail.com" class="">anpedroni@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Dear David  </div><div class=""><br class=""></div><div class="">Thank you very much for your answer. I tried your suggestions but unfortunately I did not lead to a solution to my problem.</div><div class="">It seems that only the ren.AddActor(plane_actor) has an effect on the rendered image. The ren.AddActor(spine_actor) is not shown. But when I comment out ren.AddActor(plane_actor) the spine_actor is shown.</div><div class="">It is also only a problem if I use a <span class="">vtk.vtkImageActor(), which I have chosen as it is supposed to be more efficient(?) than doing it with a </span><span class="">vtk.vtkPlaneSource().</span></div><div class=""><span class=""><br class=""></span></div><div class="">Thanks again for helping!</div><div class="">Cheers</div><div class="">Andreas</div><span class=""><br class=""></span><span class=""><br class=""></span><span class=""></span><span class=""><br class=""></span><div class=""><blockquote type="cite" class=""><div class="">Am 18.11.2018 um 14:52 schrieb David Gobbi <<a href="mailto:david.gobbi@gmail.com" target="_blank" class="">david.gobbi@gmail.com</a>>:</div><br class="m_-1009785283575188647Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class="">Hi Andreas,<div class=""><br class=""></div><div class="">Thanks for sending the code along with your question.  The method you want is AddViewProp(), but it's just a new name for AddActor() and it actually has the same behavior.</div><div class=""><br class=""></div><div class="">For the image actor, you probably want code like the following.</div><div class=""><div class="">  vtk_image = vtk.vtkImageData()</div><div class="">   vtk_image.SetDimensions(720, 1280, 1)</div><div class="">   vtk_image.SetSpacing(1.0, 1.0, 1.0)</div><div class="">   vtk_image.SetOrigin(-(720 - 1)/2.0, -(1280 - 1)/2.0, 0.0)</div><div class=""><br class=""></div><div class="">The "Spacing" is the size of each pixel, and the "Origin" is the position of the first pixel in the image (in this case, I set it so that the center of the image will be at (0,0,0), I'm not sure if this is what you want but it is a good place to start).</div><div class=""><br class=""></div><div class="">After creating the image data, it is a good idea to add an assert to ensure the array is the correct size:</div><div class="">  assert vtk_image.GetNumberOfPoints() == vtk_array.GetNumberOfTuples()</div><div class=""><br class=""></div><div class="">For the following code, I'm not sure what you are trying to do, but the effect will be to vertically squash the frame so that it is square:</div><div class="">  plane_actor.SetScale(1, 0.5625, 1)<br class=""></div><div class=""><br class=""></div><div class="">I hope this helps,</div><div class="">  David</div><div class=""><br class=""></div><div class="gmail_quote"><div dir="ltr" class="">On Sun, Nov 18, 2018 at 4:43 AM Andreas Pedroni <<a href="mailto:anpedroni@gmail.com" target="_blank" class="">anpedroni@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear list<br class="">
<br class="">
I would like to display a 3D object in front of a vtkImageActor (using Python 3.6 and vtk on Mac OS, see code below). However, the vtkImageActor erases the 3D object. I read in the manual that one should use AddProp() with the renderer to add a vtkImageActor to a render scene. But there is no AddProp() method for the renderer class. Iā€™d be very thankful for any suggestions. <br class="">
<br class="">
Best <br class="">
Andreas <br class="">
<br class="">
<br class="">
import vtk<br class="">
import cv2<br class="">
from vtk.util import numpy_support<br class="">
<br class="">
IMAGEPATH = ā€š/models3d/'<br class="">
VIDEOPATH = "20180816-133303.mp4ā€œ<br class="">
<br class="">
def main():<br class="">
   cap = cv2.VideoCapture(VIDEOPATH)<br class="">
   success, frame = cap.read()<br class="">
<br class="">
   frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)<br class="">
   vtk_array = numpy_support.numpy_to_vtk(frame.reshape((-1, 3), order='F'), deep=False)<br class="">
<br class="">
   # Create a vtkImage Object. This is filled with the vtkArray data later<br class="">
   vtk_image = vtk.vtkImageData()<br class="">
   vtk_image.SetDimensions(720, 1280, 1)<br class="">
   vtk_image.SetSpacing(720, 1280, 1)<br class="">
   vtk_image.SetOrigin(720, 1280, 0)<br class="">
   vtk_image.GetPointData().SetScalars(vtk_array)<br class="">
   # create the Texture for a plane<br class="">
<br class="">
   # The Screen where the movie is mapped onto<br class="">
   plane = vtk.vtkPlaneSource()<br class="">
<br class="">
   plane_mapper = vtk.vtkPolyDataMapper()<br class="">
   plane_mapper.SetInputConnection(plane.GetOutputPort())<br class="">
<br class="">
   plane_actor = vtk.vtkImageActor()<br class="">
   plane_actor.SetInputData(vtk_image)<br class="">
   plane_actor.SetScale(1, 0.5625, 1)<br class="">
   plane_actor.SetOrientation(180, 180, 90)<br class="">
<br class="">
   # add the spine object<br class="">
   obj_importer = vtk.vtkOBJReader()<br class="">
   obj_importer.SetFileName(IMAGEPATH + 'Spine.obj')<br class="">
   obj_importer.Update()<br class="">
<br class="">
   spine_mapper = vtk.vtkPolyDataMapper()<br class="">
   spine_mapper.SetInputConnection(obj_importer.GetOutputPort())<br class="">
<br class="">
   spine_actor = vtk.vtkActor()<br class="">
   spine_actor.SetMapper(spine_mapper)<br class="">
   spine_actor.SetOrientation(90, 10, 90)<br class="">
   spine_actor.SetScale(0.3, 0.3, 0.3)<br class="">
<br class="">
   # set up the renderer and the window<br class="">
   ren = vtk.vtkRenderer()<br class="">
   ren_win = vtk.vtkRenderWindow()<br class="">
   ren_win.AddRenderer(ren)<br class="">
   ren_win.SetSize(1500, 1500)<br class="">
<br class="">
   ren.AddActor(spine_actor)<br class="">
   ren.AddActor(plane_actor)<br class="">
<br class="">
   ren.SetBackground(0, 0, 0.1)<br class="">
<br class="">
   iren = vtk.vtkRenderWindowInteractor()<br class="">
   iren.SetRenderWindow(ren_win)<br class="">
<br class="">
   # Initialize must be called prior to creating timer events.<br class="">
   iren.Initialize()<br class="">
<br class="">
   # start the interaction and timer<br class="">
   iren.Start()<br class="">
<br class="">
if __name__ == '__main__':<br class="">
   main()<br class="">
</blockquote></div></div></div></div></div>
</div></blockquote></div><br class=""></div></blockquote></div></div></div>
</div></blockquote></div><br class=""></body></html>