[vtkusers] vtkRenderWindowInteractor.start() crashes in C# application using Activiz
David Cole
DLRdave at aol.com
Thu Mar 3 10:47:06 EST 2016
Nope. Just call the Set functions, that's all that's necessary...
David
> On Mar 2, 2016, at 10:00 PM, Liu_tj <tjlp at netease.com> wrote:
>
> Hi,David,
>
> Before I call SetInteractor() or SetInteractorStyle(), do I need to explicitly call some specific functions to release the current interactor or interactorStyle? Or just let .NET framework to GC it automatically.
>
> Thanks
> Liu Peng
>
>
> 在2016-03-02,"David Cole" <DLRdave at aol.com> 写道:
> -----原始邮件-----
> 发件人:"David Cole" <DLRdave at aol.com>
> 发送时间:2016年03月2日 星期三
> 收件人:"Liu_tj" <tjlp at netease.com>
> 主题:Re: Re: [vtkusers] vtkRenderWindowInteractor.start() crashes in C# application using Activiz
>
> Sure. If you want to use your own interactor, just instantiate it and
> call SetInteractor on the render window. And if you want your own
> style, instantiate it and call SetInteractorStyle.
>
> ActiViz is really just a thin C# wrapper around VTK, so all the usual
> VTK stuff applies.
>
>
> HTH,
> David C.
>
>
> On Tue, Mar 1, 2016 at 8:52 PM, Liu_tj <tjlp at netease.com> wrote:
> > Hi, David,
> >
> > Thanks. You are right. After I remove the instantiation of the interactor,
> > the code works.
> >
> > So, if the render window control contains Interactor and InteractorStyle,
> > what kind of Interactor and interactorStyle it uses? Can we specify them by
> > ourself if the default Interactor and InteractorStyle can't meet our
> > requirement?
> >
> > Thanks
> > Liu Peng
> >
> > 在2016-03-01,"David Cole" <DLRdave at aol.com> 写道:
> >
> > -----原始邮件-----
> > 发件人:"David Cole" <DLRdave at aol.com>
> > 发送时间:2016年03月1日 星期二
> > 收件人:"Liu_tj" <tjlp at netease.com>
> > 抄送:"vtkusers" <vtkusers at vtk.org>
> > 主题:Re: [vtkusers] vtkRenderWindowInteractor.start() crashes in C#
> > application using Activiz
> >
> > When using ActiViz .NET, you typically don't need to create your own
> > interactor object. The render window control contains a RenderWindow,
> > an Interactor and an InteractorStyle that are all connected to each
> > other by default. Interactor.Start starts a windows event loop, and is
> > used by standalone programs not using a UI framework. When you're
> > using a UI framework, you don't need to call it.
> >
> > Just remove your instantiation of the interactor, and do not call
> > Start. If you are using a Windows Forms application to display your
> > render window control, just show the form, and let the Windows Forms
> > framework handle your event loop.
> >
> >
> > HTH,
> > David C.
> >
> >
> > On Tue, Mar 1, 2016 at 10:32 AM, Liu_tj <tjlp at netease.com> wrote:
> >> Hi, VTK guys,
> >>
> >> I use Activiz 5.8 Open Source edition to display Axial, Sagittal and
> >> Coronal
> >> view for DICOM series in WPF application. In the XAML, I add a button and
> >> a
> >> vtkRenderWindowControl component. And a method ShowImagePlaneWidget() is
> >> defined. I just want to click the button then ShowImagePlaneWidget() is
> >> called, the DICOM series is loaded and displayed. But it does not work and
> >> the application crashes at vtkRenderWindowInteractor.start().
> >>
> >> However, the DICOM can be displayed if ShowImagePlaneWidget() is called in
> >> the Window_Load event handler.
> >>
> >> What happens? How to fix it? I am working this issue for some time.
> >>
> >> Below is my code:
> >>
> >> private void Window_Loaded(object sender, RoutedEventArgs e)
> >> {
> >> ShowImagePlaneWidget();
> >> }
> >>
> >> private void btnLoad_Click(object sender, RoutedEventArgs e)
> >> {
> >> ShowImagePlaneWidget();
> >> }
> >> private void ShowImagePlaneWidget()
> >> {
> >> vtkImagePlaneWidget m_imagePlaneWidgetX =
> >> vtkImagePlaneWidget.New();
> >> vtkImagePlaneWidget m_imagePlaneWidgetY =
> >> vtkImagePlaneWidget.New();
> >> vtkImagePlaneWidget m_imagePlaneWidgetZ =
> >> vtkImagePlaneWidget.New();
> >> vtkRenderWindowInteractor m_interactor =
> >> vtkRenderWindowInteractor.New();
> >>
> >> vtkRenderWindow aRenderWindow = renderctrl.RenderWindow;
> >>
> >> vtkDICOMImageReader reader = vtkDICOMImageReader.New();
> >>
> >>
> >> reader.SetDirectoryName(@"C:\Personal\code\ReadDICOMSeries\build\Debug\IMG\Dental_Lossy_Compressed");
> >> reader.Update();
> >>
> >> int[] dims = new int[3];
> >> dims = reader.GetOutput().GetDimensions();
> >>
> >> vtkImageCast readerImageCast = vtkImageCast.New();
> >> readerImageCast.SetInput((vtkDataObject)reader.GetOutput());
> >> //readerImageCast.SetOutputScalarTypeToUnsignedChar();
> >> readerImageCast.ClampOverflowOn();
> >> readerImageCast.Update();
> >>
> >> m_interactor.SetRenderWindow(aRenderWindow);
> >> vtkRenderer renderer =
> >> aRenderWindow.GetRenderers().GetFirstRenderer();
> >>
> >> vtkCellPicker picker = vtkCellPicker.New();
> >> picker.SetTolerance(0.005);
> >> //m_imagePlaneWidgetX.DebugOn();
> >> m_imagePlaneWidgetX.SetDefaultRenderer(renderer);
> >> PrepareImagePlaneWidget(m_imagePlaneWidgetX,
> >> readerImageCast.GetOutput(), m_interactor, picker, dims,
> >> Direction.CORONAL);
> >> vtkRenderWindowInteractor tmpint =
> >> m_imagePlaneWidgetX.GetInteractor();
> >> PrepareImagePlaneWidget(m_imagePlaneWidgetY,
> >> readerImageCast.GetOutput(), m_interactor, picker, dims,
> >> Direction.SAGITTAL);
> >> PrepareImagePlaneWidget(m_imagePlaneWidgetZ,
> >> readerImageCast.GetOutput(), m_interactor, picker, dims, Direction.AXIAL);
> >>
> >> m_interactor.Initialize();
> >> m_interactor.Start();
> >> aRenderWindow.Render();
> >> return;
> >> }
> >>
> >> private void PrepareImagePlaneWidget(vtkImagePlaneWidget
> >> planeWidget, vtkImageData data, vtkRenderWindowInteractor interactor,
> >> vtkCellPicker picker, int[] dimensions, Direction direction)
> >> {
> >> planeWidget.SetInteractor(interactor);
> >>
> >> planeWidget.SetPicker(picker);
> >> planeWidget.RestrictPlaneToVolumeOn();
> >>
> >> planeWidget.DisplayTextOn();
> >> planeWidget.TextureInterpolateOff();
> >> planeWidget.SetResliceInterpolateToLinear();
> >>
> >> planeWidget.SetInput(data);
> >>
> >> switch (direction)
> >> {
> >> case Direction.AXIAL:
> >> planeWidget.SetKeyPressActivationValue((sbyte)'z');
> >> planeWidget.SetPlaneOrientationToZAxes();
> >> planeWidget.GetPlaneProperty().SetColor(0.0, 0.0,
> >> 1.0);
> >> break;
> >> case Direction.CORONAL:
> >> planeWidget.SetKeyPressActivationValue((sbyte)'x');
> >> planeWidget.SetPlaneOrientationToXAxes();
> >> planeWidget.GetPlaneProperty().SetColor(1.0, 0.0,
> >> 0.0);
> >> break;
> >> case Direction.SAGITTAL:
> >> planeWidget.SetKeyPressActivationValue((sbyte)'y');
> >> planeWidget.SetPlaneOrientationToYAxes();
> >> planeWidget.GetPlaneProperty().SetColor(0.0, 1.0,
> >> 0.0);
> >> break;
> >> }
> >> planeWidget.SetSliceIndex(dimensions[(int)direction] / 2);
> >> planeWidget.GetTexturePlaneProperty().SetOpacity(1);
> >>
> >>
> >> planeWidget.On();
> >> planeWidget.InteractionOn();
> >> }
> >>
> >> Thanks
> >> Liu Peng
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> Powered by www.kitware.com
> >>
> >> Visit other Kitware open-source projects at
> >> http://www.kitware.com/opensource/opensource.html
> >>
> >> Please keep messages on-topic and check the VTK FAQ at:
> >> http://www.vtk.org/Wiki/VTK_FAQ
> >>
> >> Search the list archives at: http://markmail.org/search/?q=vtkusers
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> http://public.kitware.com/mailman/listinfo/vtkusers
> >>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160303/958bc677/attachment.html>
More information about the vtkusers
mailing list