<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Basically I thought than the vtkSmartPointers were supposed to managed this kind of situations...</div><div><br></div><div><div>=====================</div><div>axes.cpp</div><div>=====================</div></div><div>#include <vtkPolyDataMapper.h></div><div>#include <vtkActor.h></div><div>#include <vtkRenderWindow.h></div><div>#include <vtkRenderer.h></div><div>#include <vtkRenderWindowInteractor.h></div><div>#include <vtkPolyData.h></div><div>#include <vtkSphereSource.h></div><div>#include <vtkOrientationMarkerWidget.h></div><div>#include <vtkAxesActor.h></div><div>#include <vtkPropAssembly.h></div><div>#include <vtkSmartPointer.h></div><div><br></div><div><br></div><div>/* Do not use ! */</div><div>void displayAxes(vtkRenderWindowInteractor *renderWindowInteractor)</div><div>{ </div><div> vtkSmartPointer<vtkAxesActor> axes = </div><div> vtkSmartPointer<vtkAxesActor>::New();</div><div><br></div><div> vtkSmartPointer<vtkOrientationMarkerWidget> widget = </div><div> vtkSmartPointer<vtkOrientationMarkerWidget>::New();</div><div> widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 );</div><div> widget->SetOrientationMarker( axes );</div><div> widget->SetInteractor( renderWindowInteractor );</div><div> widget->SetViewport( 0.0, 0.0, 0.4, 0.4 );</div><div> widget->SetEnabled( 1 );</div><div> widget->InteractiveOn();</div><div>}</div><div><br></div><div><br></div><div><br></div><div>int main (int, char *[])</div><div>{</div><div> vtkSmartPointer<vtkSphereSource> sphereSource = </div><div> vtkSmartPointer<vtkSphereSource>::New();</div><div> sphereSource->SetCenter(0.0, 0.0, 0.0);</div><div> sphereSource->SetRadius(1.0);</div><div> sphereSource->Update();</div><div><br></div><div> vtkPolyData* polydata = sphereSource->GetOutput();</div><div><br></div><div> // Create a mapper</div><div> vtkSmartPointer<vtkPolyDataMapper> mapper = </div><div> vtkSmartPointer<vtkPolyDataMapper>::New();</div><div> mapper->SetInput(polydata);</div><div><br></div><div> // Create an actor</div><div> vtkSmartPointer<vtkActor> actor = </div><div> vtkSmartPointer<vtkActor>::New();</div><div> actor->SetMapper(mapper);</div><div><br></div><div> // A renderer and render window</div><div> vtkSmartPointer<vtkRenderer> renderer = </div><div> vtkSmartPointer<vtkRenderer>::New();</div><div> vtkSmartPointer<vtkRenderWindow> renderWindow = </div><div> vtkSmartPointer<vtkRenderWindow>::New();</div><div> renderWindow->AddRenderer(renderer);</div><div><br></div><div> // An interactor</div><div> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = </div><div> vtkSmartPointer<vtkRenderWindowInteractor>::New();</div><div> renderWindowInteractor->SetRenderWindow(renderWindow);</div><div><br></div><div> // Add the actors to the scene</div><div> renderer->AddActor(actor);</div><div> renderer->SetBackground(.2, .3, .4);</div><div><br></div><div> // Add the axes</div><div> vtkSmartPointer<vtkAxesActor> axes = </div><div> vtkSmartPointer<vtkAxesActor>::New();</div><div><br></div><div> vtkSmartPointer<vtkOrientationMarkerWidget> widget = </div><div> vtkSmartPointer<vtkOrientationMarkerWidget>::New();</div><div> widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 );</div><div> widget->SetOrientationMarker( axes );</div><div> widget->SetInteractor( renderWindowInteractor );</div><div> widget->SetViewport( 0.0, 0.0, 0.4, 0.4 );</div><div> widget->SetEnabled( 1 );</div><div> widget->InteractiveOn();</div><div><br></div><div> // Render the scene</div><div> renderer->ResetCamera();</div><div> renderWindow->Render();</div><div><br></div><div> // Begin mouse interaction</div><div> renderWindowInteractor->Start();</div><div><br></div><div> return EXIT_SUCCESS;</div><div>}</div><div><br></div><div>=====================</div><div>CMakeLists.txt</div><div>=====================</div><div><div>cmake_minimum_required(VERSION 2.6)</div><div> </div><div>PROJECT(AxesIndicator)</div><div> </div><div>FIND_PACKAGE(VTK REQUIRED)</div><div>INCLUDE(${VTK_USE_FILE})</div><div> </div><div>ADD_EXECUTABLE(axes axes.cpp)</div><div>TARGET_LINK_LIBRARIES(axes vtkHybrid vtkWidgets)</div></div><div><div>Le 17 sept. 10 à 16:54, David Doria a écrit :</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div class="gmail_quote">On Fri, Sep 17, 2010 at 10:57 AM, Benoist Laurent <span dir="ltr"><<a href="mailto:benoist@ibpc.fr">benoist@ibpc.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <div style="word-wrap:break-word">Hi all,<div><br></div><div>The example works very well.</div><div>However, when I try to put the code relative to the axes in a different fonction the application crashes.</div><div><br></div> <div><div>void displayAxes(vtkRenderWindowInteractor *renderWindowInteractor)</div><div>{ </div><div> vtkSmartPointer<vtkAxesActor> axes = </div><div> vtkSmartPointer<vtkAxesActor>::New();</div><div> <br></div><div> vtkSmartPointer<vtkOrientationMarkerWidget> widget = </div><div> vtkSmartPointer<vtkOrientationMarkerWidget>::New();</div><div> widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 );</div> <div> widget->SetOrientationMarker( axes );</div><div> widget->SetInteractor( renderWindowInteractor );</div><div> widget->SetViewport( 0.0, 0.0, 0.4, 0.4 );</div><div> widget->SetEnabled( 1 );</div> <div> widget->InteractiveOn();</div><div>}</div></div><div><br></div><div>So I guess there's something I did not understand with the vtkSmartPointer and/or the vtkWidget.</div><div><br></div><div>An idea ?</div> <div>Thanks,</div><div><br></div><div>Benoist</div><div></div></div></blockquote></div><br></div><div>Benoist,<div><br></div><div>Can you share a compilable piece of code? I'm definitely not a smart pointer expert, but I think the pointers defined in your displayAxes will go out of scope when you leave the function.</div> <div><br>David</div></div></blockquote></div><br></body></html>