<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 a strange problem.</div><div><br></div><div>vtkImageViewer2 is used to display an image, which is a data member of CVtkView (CVtkView is derived from CView). vtkRenderWindow and vtkRenderWindowInteractor are also the data members 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 </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) </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{ </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return new DistanceWidgetObserver(pViewer, pDistanceWidget); </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> m_pViewer = pViewer;</div><div> m_pDistanceWidget = pDistanceWidget;</div><div> m_pDistanceRep = vtkDistanceRepresentation2D::New();</div><div> 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, </div><div> unsigned long ulCommand, </div><div> void*) </div><div>{</div><div> m_pDistanceWidget->SetInteractor(m_pViewer->GetRenderWindow()->GetInteractor());</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceWidget->CreateDefaultRepresentation();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pPointHandleRep->GetProperty()->SetColor(1,0,0);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->SetHandleRepresentation(m_pPointHandleRep);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->GetAxis()->SetNumberOfMinorTicks(4);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->GetAxis()->SetTickLength(5); </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->GetAxis()->SetTitlePosition(0.5);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->RulerModeOn(); </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceRep->SetRulerDistance(10);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m_pDistanceWidget->SetRepresentation(m_pDistanceRep);</div><div> </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>static_cast<vtkDistanceRepresentation *>(m_pDistanceWidget->GetRepresentation())</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>->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> ...</div><div> m_pDistanceObserver = DistanceWidgetObserver::New(m_pImageViewer, m_pDistanceWidget);</div><div> m_pImageViewer->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. </div><div><br></div><div>Regards & thank you</div><div><br></div><div>Huoling</div>                                            </body>
</html>