<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
<div>Hello vtk users,</div><div><br></div><div>I use vtkDistanceWidget combining with MFC to process distance measurement, and I encountered&nbsp;a strange problem.</div><div><br></div><div>vtkImageViewer2 is used to display an image, which is a data member of CVtkView (CVtkView is&nbsp;derived from CView). vtkRenderWindow and vtkRenderWindowInteractor are also the data members&nbsp;of CVtkView. I wrote a new class named DistanceWidgetObserver, the code is:</div><div><br></div><div>// DistanceWidgetObserver.h</div><div>class DistanceWidgetObserver : public vtkCommand&nbsp;</div><div>{</div><div>public:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>DistanceWidgetObserver(vtkImageViewer2* pViewer,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>vtkDistanceWidget* pDistanceWidget);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>static DistanceWidgetObserver* New(vtkImageViewer2* pViewer,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>vtkDistanceWidget* pDistanceWidget)&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return new DistanceWidgetObserver(pViewer, pDistanceWidget);&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div>protected:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>~DistanceWidgetObserver();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkImageViewer2* m_pViewer;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkDistanceWidget* m_pDistanceWidget;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkDistanceRepresentation2D* m_pDistanceRep;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkPointHandleRepresentation2D* m_pPointHandleRep;</div><div><br></div><div>private:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>void Execute(vtkObject *caller, unsigned long, void*);</div><div>};</div><div><br></div><div>// DistanceWidgetObserver.cpp</div><div>DistanceWidgetObserver::DistanceWidgetObserver(vtkImageViewer2* pViewer,</div><div><span class="Apple-tab-span" style="white-space:pre">                                                                                                </span> vtkDistanceWidget* pDistanceWidget)</div><div>{</div><div>&nbsp;&nbsp; &nbsp;m_pViewer = pViewer;</div><div>&nbsp;&nbsp; &nbsp;m_pDistanceWidget = pDistanceWidget;</div><div>&nbsp;&nbsp; &nbsp;m_pDistanceRep = vtkDistanceRepresentation2D::New();</div><div>&nbsp;&nbsp; &nbsp;m_pPointHandleRep = vtkPointHandleRepresentation2D::New();</div><div>}</div><div><br></div><div>DistanceWidgetObserver::~DistanceWidgetObserver()</div><div>{</div><div>...</div><div>}</div><div><br></div><div>void DistanceWidgetObserver::Execute(vtkObject *caller,&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;unsigned long ulCommand,&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;void*)&nbsp;</div><div>{</div><div>&nbsp;&nbsp; &nbsp;m_pDistanceWidget-&gt;SetInteractor(m_pViewer-&gt;GetRenderWindow()-&gt;GetInteractor());</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceWidget-&gt;CreateDefaultRepresentation();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pPointHandleRep-&gt;GetProperty()-&gt;SetColor(1,0,0);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;SetHandleRepresentation(m_pPointHandleRep);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;GetAxis()-&gt;SetNumberOfMinorTicks(4);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;GetAxis()-&gt;SetTickLength(5);&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;GetAxis()-&gt;SetTitlePosition(0.5);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;RulerModeOn(); &nbsp; &nbsp; &nbsp;&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep-&gt;SetRulerDistance(10);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceWidget-&gt;SetRepresentation(m_pDistanceRep);</div><div>&nbsp;&nbsp; &nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>static_cast&lt;vtkDistanceRepresentation *&gt;(m_pDistanceWidget-&gt;GetRepresentation())</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>-&gt;SetLabelFormat("%-#.2f mm");</div><div>}</div><div><br></div><div>Then I use DistanceWidgetObserver to instantiate a member in CVtkView, And in the function OnDraw() I wrote the following code:</div><div><br></div><div>// OnDraw() code:</div><div>void CVtkView::OnDraw()</div><div>{</div><div>&nbsp;&nbsp; &nbsp;...</div><div>&nbsp;&nbsp; &nbsp;m_pDistanceObserver = DistanceWidgetObserver::New(m_pImageViewer, m_pDistanceWidget);</div><div>&nbsp;&nbsp; &nbsp;m_pImageViewer-&gt;Render();</div><div>}</div><div><br></div><div>When I run this program and clicked the image, the program crashed.</div><div><br></div><div>Anyone knows why is it? If I did wrong, please correct me. Or please give me some tips on this topic of using vtkDistanceWidget combined with MFC.&nbsp;</div><div><br></div><div>Regards &amp; thank you</div><div><br></div><div>Huoling</div>                                               </body>
</html>