<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 92.4pt 1.0in 92.4pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText>At the moment, I'm doing a very simplified version (for proof of concept) of my ultimate goal. The simplified version is to azimuth the camera by 10 degrees once a second in the main thread while showing a cone in the render window. So, no, I am not currently creating vtkObjects in the main thread once the background thread (interactor) starts..<o:p></o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText>Here's an excerpt of code from my &quot;FeatureViewer&quot; class. In my simplified proof of concept, the main program instantiates FeatureViewer and invokes the RunTest method, which sets everything up and spawns the background thread to run the interactor loop. When RunTest returns, the main program enters a loop in which it invokes CameraAzimuth once per second. You'll notice a couple references to a class called &quot;vtkCommandDelegator&quot; -- this is a template subclass of vtkCommand I wrote that allows you to specify and arbitrary method of an arbitrary class instance as the command callback. I wrote it because it seemed silly to have to create a new subclass of vtkCommand every time I want to have a callback for something.<o:p></o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText>I&#8217;ll leave out the class def and just include the relevant methods for brevity.<o:p></o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>static</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>DWORD</span> <span style='color:#030003'>WINAPI</span> <span style='color:#030003'>ThreadCallbackFunction</span>(<span style='color:#030003'>LPVOID</span> <span style='color:#030003'>lpParameter</span>)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>FeatureViewer</span> *<span style='color:#030003'>This</span> = <span style='color:blue'>static_cast</span>&lt;<span style='color:#030003'>FeatureViewer</span> *&gt;(<span style='color:#030003'>lpParameter</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// Start the render window interactor in the background<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>This</span>-&gt;<span style='color:#030003'>InternalRunInteractor</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:blue'>return</span> 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:#030003'>FeatureViewer</span><span style='font-size:10.0pt;font-family:"Courier New"'>::<span style='color:#030003'>FeatureViewer</span>()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>CS</span> = <span style='color:#030003'>vtkCriticalSection</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pCam</span> = <span style='color:#030003'>NULL</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>LockCriticalSection</span>(<span style='color:#030003'>vtkObject</span> *<span style='color:#030003'>caller</span>, <span style='color:blue'>unsigned</span> <span style='color:blue'>long</span> <span style='color:#030003'>eventID</span>, <span style='color:blue'>void</span> *<span style='color:#030003'>callData</span>)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>CS</span>-&gt;<span style='color:#030003'>Lock</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>fprintf</span>(<span style='color:#030003'>stderr</span>,<span style='color:#A31515'>&quot;Interactor about to render\n&quot;</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>UnlockCriticalSection</span>(<span style='color:#030003'>vtkObject</span> *<span style='color:#030003'>caller</span>, <span style='color:blue'>unsigned</span> <span style='color:blue'>long</span> <span style='color:#030003'>eventID</span>, <span style='color:blue'>void</span> *<span style='color:#030003'>callData</span>)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>fprintf</span>(<span style='color:#030003'>stderr</span>,<span style='color:#A31515'>&quot;Interactor done rendering\n&quot;</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>CS</span>-&gt;<span style='color:#030003'>Unlock</span>();<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>RunInteractorInBackground</span>()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// Start up the thread<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>LPSECURITY_ATTRIBUTES</span> <span style='color:#030003'>attr</span> = <span style='color:#030003'>NULL</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>SIZE_T</span> <span style='color:#030003'>stackSize</span> = 0; <span style='color:green'>// default = 1 MB<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>DWORD</span> <span style='color:#030003'>dwCreationFlags</span> = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>LPDWORD</span> <span style='color:#030003'>noThreadID</span> = <span style='color:#030003'>NULL</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>HANDLE</span> <span style='color:#030003'>m_hThreadHandle</span> = <span style='color:#030003'>CreateThread</span>(<span style='color:#030003'>attr</span>, <span style='color:#030003'>stackSize</span>, <span style='color:#030003'>ThreadCallbackFunction</span>, <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:blue'>this</span>, <span style='color:#030003'>dwCreationFlags</span>, <span style='color:#030003'>noThreadID</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>InternalRunInteractor</span>()<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// Called in background thread.<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pIRen</span>-&gt;<span style='color:#030003'>Initialize</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pIRen</span>-&gt;<span style='color:#030003'>Start</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>CameraAzimuth</span>(<span style='color:blue'>double</span> <span style='color:#030003'>rot</span>)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:green'>// Rotate camera here. Called by main thread<o:p></o:p></span></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>CS</span>-&gt;<span style='color:#030003'>Lock</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>fprintf</span>(<span style='color:#030003'>stderr</span>, <span style='color:#A31515'>&quot;About to rotate camera\n&quot;</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pCam</span>-&gt;<span style='color:#030003'>Azimuth</span>(<span style='color:#030003'>rot</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRenWin</span>-&gt;<span style='color:#030003'>Render</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>fprintf</span>(<span style='color:#030003'>stderr</span>,<span style='color:#A31515'>&quot;Done rotating camera\n&quot;</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>CS</span>-&gt;<span style='color:#030003'>Unlock</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>}<o:p></o:p></span></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span><span style='font-size:10.0pt;font-family:"Courier New"'> <span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>RunTest</span>()<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>vtkConeSource</span> *<span style='color:#030003'>cone</span> = <span style='color:#030003'>vtkConeSource</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>cone</span>-&gt;<span style='color:#030003'>SetHeight</span>( 3.0 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>cone</span>-&gt;<span style='color:#030003'>SetRadius</span>( 1.0 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>cone</span>-&gt;<span style='color:#030003'>SetResolution</span>( 10 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>vtkPolyDataMapper</span> *<span style='color:#030003'>coneMapper</span> = <span style='color:#030003'>vtkPolyDataMapper</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>coneMapper</span>-&gt;<span style='color:#030003'>SetInputConnection</span>( <span style='color:#030003'>cone</span>-&gt;<span style='color:#030003'>GetOutputPort</span>() );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>vtkActor</span> *<span style='color:#030003'>coneActor</span> = <span style='color:#030003'>vtkActor</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>coneActor</span>-&gt;<span style='color:#030003'>SetMapper</span>( <span style='color:#030003'>coneMapper</span> );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRen</span> = <span style='color:#030003'>vtkRenderer</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRen</span>-&gt;<span style='color:#030003'>AddActor</span>( <span style='color:#030003'>coneActor</span> );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRen</span>-&gt;<span style='color:#030003'>SetBackground</span>( 0.1, 0.2, 0.4 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRenWin</span> = <span style='color:#030003'>vtkRenderWindow</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRenWin</span>-&gt;<span style='color:#030003'>AddRenderer</span>( <span style='color:#030003'>pRen</span> );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pRenWin</span>-&gt;<span style='color:#030003'>SetSize</span>( 300, 300 );<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pIRen</span> = <span style='color:#030003'>vtkRenderWindowInteractor</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pIRen</span>-&gt;<span style='color:#030003'>SetRenderWindow</span>(<span style='color:#030003'>pRenWin</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>vtkInteractorStyleTrackballCamera</span> *<span style='color:#030003'>style</span> = <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>vtkInteractorStyleTrackballCamera</span>::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pIRen</span>-&gt;<span style='color:#030003'>SetInteractorStyle</span>(<span style='color:#030003'>style</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-indent:.5in;text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>pCam = pRen-&gt;GetActiveCamera();<o:p></o:p></span></p><p class=MsoNormal style='text-indent:.5in;text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pStartInteractionCommand</span> = <span style='color:#030003'>vtkCommandDelegator</span>&lt;<span style='color:#030003'>FeatureViewer</span>&gt;::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pStartInteractionCommand</span>-&gt;<span style='color:#030003'>RegisterCallback</span>(<span style='color:blue'>this</span>, &amp;<span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>LockCriticalSection</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pEndInteractionCommand</span> = <span style='color:#030003'>vtkCommandDelegator</span>&lt;<span style='color:#030003'>FeatureViewer</span>&gt;::<span style='color:#030003'>New</span>();<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>pEndInteractionCommand</span>-&gt;<span style='color:#030003'>RegisterCallback</span>(<span style='color:blue'>this</span>, &amp;<span style='color:#030003'>FeatureViewer</span>::<span style='color:#030003'>UnlockCriticalSection</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>style</span>-&gt;<span style='color:#030003'>AddObserver</span>(<span style='color:#030003'>vtkCommand</span>::<span style='color:#030003'>StartInteractionEvent</span>,<span style='color:#030003'>pStartInteractionCommand</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>style</span>-&gt;<span style='color:#030003'>AddObserver</span>(<span style='color:#030003'>vtkCommand</span>::<span style='color:#030003'>EndInteractionEvent</span>, <span style='color:#030003'>pEndInteractionCommand</span>);<o:p></o:p></span></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText><span style='font-size:10.0pt;font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style='color:#030003'>RunInteractorInBackground</span>();<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:10.0pt;font-family:"Courier New"'>}</span><o:p></o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText>Thanks,<o:p></o:p></p><p class=MsoPlainText>-Chris<o:p></o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText><o:p>&nbsp;</o:p></p><p class=MsoPlainText>&gt; -----Original Message-----<o:p></o:p></p><p class=MsoPlainText>&gt; From: Aashish Chaudhary [mailto:aashish.chaudhary@kitware.com]<o:p></o:p></p><p class=MsoPlainText>&gt; Sent: Wednesday, June 22, 2011 12:46 PM<o:p></o:p></p><p class=MsoPlainText>&gt; To: Chris Volpe ARA/SED<o:p></o:p></p><p class=MsoPlainText>&gt; Cc: vtkusers@vtk.org<o:p></o:p></p><p class=MsoPlainText>&gt; Subject: Re: [vtkusers] Multi-threaded VTK<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; On Wed, Jun 22, 2011 at 12:27 PM, Chris Volpe ARA/SED &lt;cvolpe@ara.com&gt;<o:p></o:p></p><p class=MsoPlainText>&gt; wrote:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; I&#8217;m trying to have an application that drives scene content change on<o:p></o:p></p><p class=MsoPlainText>&gt; its<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; own, while still allowing the user to manipulate the scene with<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; vtkRenderWindowInteractor. The approach I&#8217;m trying to use is to have<o:p></o:p></p><p class=MsoPlainText>&gt; the<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; vtkRenderWindowInteractor run in a background thread, with some<o:p></o:p></p><p class=MsoPlainText>&gt; concurrency<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; protection to keep it from invoking the rendering pipeline at the<o:p></o:p></p><p class=MsoPlainText>&gt; same time<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; the main thread tries to do so. My application main thread creates<o:p></o:p></p><p class=MsoPlainText>&gt; all the<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; vtk objects (actor, render window, renderer, interactor), registers a<o:p></o:p></p><p class=MsoPlainText>&gt; couple<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; of callbacks for the interactor style&#8217;s StartInteractionEvent and<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; EndInteractionEvent which lock and unlock a vtkCriticalSection,<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; respectively, and then spawns a background thread in which the<o:p></o:p></p><p class=MsoPlainText>&gt; interactor is<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; started. The main thread then, periodically, locks the critical<o:p></o:p></p><p class=MsoPlainText>&gt; section,<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; makes scene changes, renders, and unlocks the critical section.<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Although this approach seems sound in principle, I&#8217;m encountering<o:p></o:p></p><p class=MsoPlainText>&gt; corruption<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; that leads me to believe that there is some kind of pipeline<o:p></o:p></p><p class=MsoPlainText>&gt; manipulation<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; occurring before processing the StartInteractionEvent that is<o:p></o:p></p><p class=MsoPlainText>&gt; conflicting<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; with what I&#8217;m doing in my main thread. Can someone with detailed<o:p></o:p></p><p class=MsoPlainText>&gt; knowledge<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; of pipeline bowels provide some insight as to what might be going on,<o:p></o:p></p><p class=MsoPlainText>&gt; and<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; perhaps provide an alternate course of action?<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; Do you produce new vtk objects in the background thread? If yes do you<o:p></o:p></p><p class=MsoPlainText>&gt; use vtkSmartPointer? That could be cause of the problem depending on<o:p></o:p></p><p class=MsoPlainText>&gt; how you are passing vtk objects from one thread to another.<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; Also it might help if you can attach a minimal code to reproduce the<o:p></o:p></p><p class=MsoPlainText>&gt; behavior.<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; Thanks<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Thanks,<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Chris<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; --<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Christopher R. Volpe,<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Ph.D.<o:p></o:p></p><p class=MsoPlainText>&gt; Email:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; cvolpe@ara.com<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Senior Scientist, Information Exploitation Systems &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Main<o:p></o:p></p><p class=MsoPlainText>&gt; Desk:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; 919-582-3300<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Applied Research Associates,<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Inc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Direct: 919-<o:p></o:p></p><p class=MsoPlainText>&gt; 582-3380<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; 8537 Six Forks Rd., Suite<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; 6000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fax&nbsp;:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; 919-582-3301<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Raleigh, NC 27615&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Web:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; http://www.ara.com/offices/NC.htm<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; _______________________________________________<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Powered by www.kitware.com<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Visit other Kitware open-source projects at<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; http://www.kitware.com/opensource/opensource.html<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Please keep messages on-topic and check the VTK FAQ at:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; http://www.vtk.org/Wiki/VTK_FAQ<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; Follow this link to subscribe/unsubscribe:<o:p></o:p></p><p class=MsoPlainText>&gt; &gt; http://www.vtk.org/mailman/listinfo/vtkusers<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; &gt;<o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; <o:p></o:p></p><p class=MsoPlainText>&gt; --<o:p></o:p></p><p class=MsoPlainText>&gt; | Aashish Chaudhary<o:p></o:p></p><p class=MsoPlainText>&gt; | R&amp;D Engineer<o:p></o:p></p><p class=MsoPlainText>&gt; | Kitware Inc.<o:p></o:p></p><p class=MsoPlainText>&gt; | www.kitware.com<o:p></o:p></p></div></body></html>