I think the best thing for you would be to implement your own overlay:
Derive from mitk::VtkOverlay3D and have a look at the TextOverlay3D as 
reference. As long as your used vtkProps are derived from vtkActor2D, they are 
always in foreground! 
http://www.vtk.org/doc/nightly/html/classvtkActor2D.htm<http://www.vtk.org/doc/nightly/html/classvtkActor2D.html>
There is also the vtkPolyDataMapper2D 
http://www.vtk.org/doc/nightly/html/classvtkPolyDataMapper2D.html to render a 
(2D or 3D) Geometry as an overlay.
Mind that the vtkFollower is not a 2D Actor, but you won't need it as you are 
drawing in display coordinates.

Regards
Christoph

On Tue, 2015-09-08 at 19:39 +0200, Federico Milano wrote:
The problem is that the VtkMapper constructor is also in the rendering loop, so 
if I add my foreground renderer there I invalidate the vtkRendererCollection 
iterator.

I'm not displaying just text, I'm also displaying some planar geometry that 
follow the camera and is positioned in 3D coordinates. I could use 
TextOverlay2D for the text part (will it be always in the foreground? even in 
2014.03?), but for the rest of the geometry what could you recommend me?

Thanks in advance!

Fede

On Tue, Sep 8, 2015 at 4:57 AM, Kolb, Christoph 
<[email protected]<mailto:[email protected]>> wrote:
Hi Federico,

maybe you could create the foreground renderer in the constructor of your 
mapper. Use the mitk::RenderingManager to access all existing baserenderers and 
store the new forground renderer as a member of the mapper. This way it is 
created only once and outside of the rendering process.
But I don't think that this will result in nice code...

If your goal is to have a text overlay at a 3D word position, which is in 
foreground and always facing the camera I would recommend to use the 
mitk::TextOverlay2D.
The problem is, that it requires the position on the display (in pixels) to be 
placed, but you can transform a 3D point to display coordinates by using the 
following methods:
vtkRenderer::SetWorldPoint
vtkRenderer::WorldToDisplay
vtkRenderer::GetDisplayPoint

Btw, we have recently added a method to the mitk::BaseRenderer that does 
exactly this transformation: 
http://docs.mitk.org/nightly/classmitk_1_1BaseRenderer.html#a5e168576694876aa7a89b5fb252bc8ce

Regards
Christoph

On Tue, 2015-09-08 at 01:35 +0200, Federico Milano wrote:

Hi Christoph,

I just need to have a foreground renderer to add some actors, but I cannot 
apply the fix you mentioned in your previous answer (I just can use the 2014.03 
version with no mods), so I was wondering where could I add the foreground 
renderer inside the mapper.

Right now Im adding a foreground render in a view and then getting the highest  
layer renderer in the mapper...but if I leave it like that it is a recipe for 
future disaster.

I would really appreciate if you could give me a hint.

Thanks,

Fede

El sep 7, 2015 7:08 p.m., "Kolb, Christoph" 
<[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>>>
 escribió:
Hi Federico,

I am not sure how you solved your previous problem, and wonder why the 
AddBaseRenderer Method is needed. This one is actually meant to register a new 
seperate renderer for the OverlayManager to manage. I would not recommend to 
use it for the registration of foreground renderers.
Can you please explain how you want to use the foreground renderers?

Regards
Christoph

________________________________________
Von: Federico Milano 
[[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>>]
Gesendet: Montag, 7. September 2015 22:04
An: Kolb, Christoph
Cc: 
[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>>
Betreff: Re: [mitk-users] Overlay in 3D problem

Thank you Christoph. Another question, if I'm doing this in a VtkMapper, where 
should I add the renderer? Because if I do it in

GenerateDataForRenderer()

using something like

mitk::OverlayManager::AddBaseRenderer()

then I end up changing the vtkRendererCollection of the vtkRenderWindow while 
it is being traversed (GenerateDataForRenderer() is indirectly called by the 
Render() method of vtkRendererCollection). That invalidates the iterator and 
produces undefined behaviour (in my case, an Access Violation in the third 
overlay I add).

It is clear to me how to add foreground renderers from other contexts, but I 
don't know how to add them in VtkMapper derived classes.

Thanks in advance,

Federico


On Sun, Aug 30, 2015 at 1:47 PM, Kolb, Christoph 
<[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>><mailto:[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>>>>
 wrote:
Hi Federico,

prior to the 2015.05 Release, we have added a flag to the Overlays, that forces 
them to be drawn in front:
<http://bugs.mitk.org/show_bug.cgi?id=18536>http://bugs.mitk.org/show_bug.cgi?id=18536
http://docs.mitk.org/nightly-qt4/classmitk_1_1OverlayManager.html#a78c770eb3f088025c9b8026d3c51fa7e

Alternatively you could use the TextOverlay2D which is always on top. The 
difference is that this ones position is defined on the display.

Regards
Christoph

On Sun, 2015-08-30 at 02:14 +0200, Federico Milano wrote:
Hi. I'm trying to display an overlay in a 3D window. I'm using this 
document<http://mitk.org/images/d/d1/BugSquashingSeminars$Overlays_in_MITK.pdf>:
as a guide. I've created a plugin that adds a TextOverlay3D to the 3D window 
renderer overlay manager (exaclty as it is stated in that document). The 
problem is that the TextOverlay3D is not being drawn over the scene. If you 
position, for example, a cube in front of it, it occludes the text (see 
attached screenshot). I'm using MITK 2014.03.

I'll really appreciate any hint.

Thanks,

Federico


------------------------------------------------------------------------------
_______________________________________________
mitk-users mailing list
[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>><mailto:[email protected]<mailto:[email protected]><mailto:[email protected]<mailto:[email protected]>>>
https://lists.sourceforge.net/lists/listinfo/mitk-users




------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to