<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="">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><blockquote type="cite" class=""><div class="">Am 18.11.2018 um 14:52 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=""><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" 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=""></body></html>