Hell Karthik, Sorry to send this question again. Since I did not receive your reply yet. My question how to set the paintbrush width? I did as you suggested before, but it said that 'SetWidth' is not a function of 'vtkKWPaintbrushShape'.
Please help me! Thanks a lot, Yang -----邮件原件----- 发件人: Xiaopeng Yang [mailto:[email protected]] 发送时间: 2011년 3월 23일 수요일 오후 8:49 收件人: 'Karthik Krishnan' 抄送: 'vtk'; '[email protected]' 主题: RE: [vtkusers] How to make the paintbrush paint only on one slice, not on the neighbor slices Hi Karthik, I tried to set the width of paintbrush. But the it said that SetWidth is not a function of 'vtkKWPaintbrushShape'. I added your code to the program (PaintbrushTest6) as follows: vtkKWEPaintbrushTesting *paintbrushTesting = vtkKWEPaintbrushTesting::New(); paintbrushTesting->SetFilename( "D:/Hybrid Method/Hybrid/SWS/Diffusion_filter/mha/3D.mha" ); paintbrushTesting->Initialize(); vtkImageData * imageData = paintbrushTesting->GetInput(); vtkKWEWidgetGroup *set = vtkKWEWidgetGroup::New(); for (int i = 0; i < 3; i++) { vtkKWEPaintbrushWidget *w = vtkKWEPaintbrushWidget::New(); w->SetInteractor( paintbrushTesting->GetNthImageViewer(i)-> GetRenderWindow()->GetInteractor()); vtkKWEPaintbrushRepresentationGrayscale2D * rep = vtkKWEPaintbrushRepresentationGrayscale2D::New(); w->SetRepresentation(rep); if (rep) { vtkImageActor * imageActor = paintbrushTesting->GetNthImageActor(i); rep->SetImageActor(imageActor); rep->SetImageData(imageData); rep->GetPaintbrushOperation()->GetPaintbrushShape()->SetSpacing( imageData->GetSpacing() ); rep->GetPaintbrushOperation()->GetPaintbrushShape()->SetOrigin( imageData->GetOrigin() ); //******************************************************************************** rep->GetPaintbrushOperation()->GetPaintbrushShape()->SetWidth( xx, xx, xx); //******************************************************************************** } set->AddWidget(w); rep->Delete(); w->Delete(); } vtkKWEPaintbrushRepresentation2D * repx = vtkKWEPaintbrushRepresentation2D::SafeDownCast( set->GetNthWidget(0)->GetRepresentation()); vtkKWEPaintbrushDrawing * drawingx = repx->GetPaintbrushDrawing(); for (unsigned int i = 0; i < set->GetNumberOfWidgets(); i++) { vtkKWEPaintbrushRepresentation2D * repr = vtkKWEPaintbrushRepresentation2D::SafeDownCast( set->GetNthWidget(i)->GetRepresentation()); repr->SetPaintbrushDrawing( drawingx ); } // Now read in an initial segmentation. vtkKWEPaintbrushRepresentation2D * rep = vtkKWEPaintbrushRepresentation2D::SafeDownCast( set->GetNthWidget(0)->GetRepresentation()); vtkKWEPaintbrushDrawing * drawing = rep->GetPaintbrushDrawing(); drawing->InitializeData(); vtkKWEPaintbrushGrayscaleData *data = vtkKWEPaintbrushGrayscaleData::New(); // Read the file (initial segmentation) vtkMetaImageReader * reader = vtkMetaImageReader::New(); reader->SetFileName( "D:/Hybrid Method/Hybrid/SWS/Threshold_LS/Hole filled/LabelMap/3D.mha" ); reader->Update(); data->SetImageData(reader->GetOutput()); reader->Delete(); // Set the first stroke as the initial segmentation. drawing->AddNewStroke(0, vtkKWEPaintbrushEnums::Draw, data); // Instead of the above line, you can set this directly as the new stencil, // saves some memory, as the overhead data of an extra stroke need not be // managed. // drawing->SetPaintbrushData(data); for (unsigned int i = 0; i < set->GetNumberOfWidgets(); i++) { vtkKWEPaintbrushRepresentation * repr = vtkKWEPaintbrushRepresentation::SafeDownCast( set->GetNthWidget(i)->GetRepresentation()); repr->SetPaintbrushDrawing( drawing ); } set->SetEnabled(1); paintbrushTesting->Run(); // Save out the resulting segmentation. // vtkImageData * output = vtkImageData::New(); drawing->GetPaintbrushData()-> GetPaintbrushDataAsImageData( output ); vtkMetaImageWriter * outputWriter = vtkMetaImageWriter::New(); outputWriter->SetFileName("Drawing.mha"); outputWriter->SetInput( output ); outputWriter->Write(); // Save out each of the resulting segmentations. // for (int i = 0; i < drawing->GetNumberOfItems(); i++) { vtkImageData * outputN = vtkImageData::New(); drawing->GetItem(i)->GetPaintbrushData()-> GetPaintbrushDataAsImageData( outputN ); vtkMetaImageWriter * outputWriterN = vtkMetaImageWriter::New(); std::ostringstream filenameN; filenameN << "Drawing" << i << ".mha" << std::ends; outputWriterN->SetFileName(filenameN.str().c_str()); outputWriterN->SetInput( outputN ); outputWriterN->Write(); outputWriterN->Delete(); outputN->Delete(); } data->Delete(); outputWriter->Delete(); output->Delete(); set->Delete(); paintbrushTesting->Delete(); return 0; -----邮件原件----- 发件人: Karthik Krishnan [mailto:[email protected]] 发送时间: 2011년 3월 23일 수요일 오후 5:47 收件人: Xiaopeng Yang 抄送: vtk; [email protected] 主题: Re: [vtkusers] How to make the paintbrush paint only on one slice, not on the neighbor slices I apologize for the delay in getting back to your earlier mails. I hope you've figured those out :). To make the paintbrush go into slice by slice edit mode, you simply set the width of the paintbrush shape along that axis to one unit spacing along that axis.... paintbrushOperation->GetPaintbrushShape()->SetWidth(10,10,spacingZ) On 3/23/11, Xiaopeng Yang <[email protected]> wrote: > Dear users, > > > > I found that when I painted on one slice of a series of images, the neighbor > slices were also painted. My question is how to make the paintbrush paint > only on that slice, not on the neighbor slices. > > > > Thanks very much in advance! > > > > Yang > > _______________________________________________ VtkEdge mailing list [email protected] http://public.kitware.com/cgi-bin/mailman/listinfo/vtkedge
