X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkImage2DicomRTStructFilter.txx;h=cc90104216d6ca2ef9d37f77e92156bf47c4fe9f;hb=004bcd39f231a113951c678008140722b0b28152;hp=6ab72e2ed6916e48a6ce8978d7016508baea85e8;hpb=91669882f4625b286c9dbaeec147983da01fe286;p=clitk.git diff --git a/common/clitkImage2DicomRTStructFilter.txx b/common/clitkImage2DicomRTStructFilter.txx index 6ab72e2..cc90104 100644 --- a/common/clitkImage2DicomRTStructFilter.txx +++ b/common/clitkImage2DicomRTStructFilter.txx @@ -23,6 +23,7 @@ // clitk #include "clitkImage2DicomRTStructFilter.h" +#include "clitkBinaryImageToMeshFilter.h" #include "clitkImageCommon.h" #include "vvFromITK.h" @@ -34,10 +35,24 @@ #include #include +// FIXME to remove +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkRenderWindowInteractor.h" +#include "vtkPolyDataReader.h" +#include "vtkRenderWindow.h" +#include "vtkRenderer.h" +#include "vtkCamera.h" +#include "vtkProperty.h" +#include "vtkProperty2D.h" + // itk #include #include +// gdcm +#include + //-------------------------------------------------------------------- template clitk::Image2DicomRTStructFilter::Image2DicomRTStructFilter() @@ -62,23 +77,150 @@ void clitk::Image2DicomRTStructFilter::Update() { DD("Image2DicomRTStructFilter::GenerateData"); - // Read DicomRTStruct - std::string filename = "RS.zzQAnotmt_french01_.dcm"; - clitk::DicomRT_StructureSet::Pointer structset = clitk::DicomRT_StructureSet::New(); - structset->Read(filename); + // Read rt struct + vtkSmartPointer reader = vtkGDCMPolyDataReader::New(); + reader->SetFileName(m_StructureSetFilename.c_str()); + reader->Update(); + DD("reader done"); + + // Get properties + vtkRTStructSetProperties * p = reader->GetRTStructSetProperties(); + DD(p->GetNumberOfStructureSetROIs()); + DD(p->GetStructureSetROIName(0)); + DD(p->GetStructureSetROINumber(0)); + + // Init writer + vtkGDCMPolyDataWriter * writer = vtkGDCMPolyDataWriter::New(); + int numMasks = reader->GetNumberOfOutputPorts() + 1;//add one more + DD(numMasks); + + // numMasks = 3; //FIXME temporary + + writer->SetNumberOfInputPorts(numMasks); + writer->SetFileName(m_OutputFilename.c_str()); + writer->SetMedicalImageProperties(reader->GetMedicalImageProperties()); + + // List of already present rois + vtkStringArray* roiNames = vtkStringArray::New(); + vtkStringArray* roiAlgorithms = vtkStringArray::New(); + vtkStringArray* roiTypes = vtkStringArray::New(); + roiNames->SetNumberOfValues(numMasks); + roiAlgorithms->SetNumberOfValues(numMasks); + roiTypes->SetNumberOfValues(numMasks); - DD(structset->GetName()); - clitk::DicomRT_ROI * roi = structset->GetROIFromROINumber(1); // Aorta + typedef clitk::BinaryImageToMeshFilter BinaryImageToMeshFilterType; + typename BinaryImageToMeshFilterType::Pointer convert = BinaryImageToMeshFilterType::New(); + convert->SetInput(m_Input); + DD("Update"); + convert->Update(); + DD("here"); + DD("end update"); + vtkPolyData* mesh = convert->GetOutputMesh(); + DD(mesh->GetNumberOfVerts()); + DD(mesh->GetNumberOfLines()); + DD(mesh->GetNumberOfPolys()); + DD(mesh->GetNumberOfStrips()); + + // Add on (FIXME) to replace with binary image + // vtkPolyData* blank = vtkPolyData::New(); + // writer->SetInput(0, blank); + writer->SetInput(0, mesh); + roiNames->InsertValue(0, "blank"); + roiAlgorithms->InsertValue(0, "blank"); + roiTypes->InsertValue(0, "ORGAN"); + + for (unsigned int i = 1; i < numMasks; ++i) { + // DD(i); + writer->SetInput(i, reader->GetOutput(i-1)); + std::string theString = reader->GetRTStructSetProperties()->GetStructureSetROIName(i-1); + roiNames->InsertValue(i, theString); + theString = reader->GetRTStructSetProperties()->GetStructureSetROIGenerationAlgorithm(i-1); + roiAlgorithms->InsertValue(i, theString); + theString = reader->GetRTStructSetProperties()->GetStructureSetRTROIInterpretedType(i-1); + roiTypes->InsertValue(i, theString); + } + + + /* + // Visu + vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New(); + cubeMapper->SetInput( mesh ); + cubeMapper->SetScalarRange(0,7); + vtkActor *cubeActor = vtkActor::New(); + cubeActor->SetMapper(cubeMapper); + vtkProperty * property = cubeActor->GetProperty(); + property->SetRepresentationToWireframe(); + + vtkRenderer *renderer = vtkRenderer::New(); + vtkRenderWindow *renWin = vtkRenderWindow::New(); + renWin->AddRenderer(renderer); + + vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); + iren->SetRenderWindow(renWin); + + renderer->AddActor(cubeActor); + renderer->ResetCamera(); + renderer->SetBackground(1,1,1); + + renWin->SetSize(300,300); + + renWin->Render(); + iren->Start(); + */ + + + // End visu + + + vtkRTStructSetProperties* theProperties = vtkRTStructSetProperties::New(); + DD(p->GetStudyInstanceUID()); + writer->SetRTStructSetProperties(theProperties); + /*writer->InitializeRTStructSet2(p,"./", + reader->GetRTStructSetProperties()->GetStructureSetLabel(), + reader->GetRTStructSetProperties()->GetStructureSetName(), + roiNames, roiAlgorithms, roiTypes);*/ + writer->InitializeRTStructSet(m_DicomFolder, + reader->GetRTStructSetProperties()->GetStructureSetLabel(), + reader->GetRTStructSetProperties()->GetStructureSetName(), + roiNames, roiAlgorithms, roiTypes); + + DD("after init"); + writer->Write(); + DD("write done"); + + reader->Delete(); + roiNames->Delete(); + roiTypes->Delete(); + //theProperties->Delete(); + roiAlgorithms->Delete(); + //blank->Delete(); + writer->Delete(); + + //////////////////// + + + /* + + // DicomRTStruct + DD(m_StructureSet->GetName()); + clitk::DicomRT_ROI * roi = m_StructureSet->GetROIFromROINumber(1); // Aorta DD(roi->GetName()); DD(roi->GetROINumber()); + + // Get + + + + // Add an image to the roi vvImage::Pointer im = vvImageFromITK<3, PixelType>(m_Input); roi->SetImage(im); // Get one contour DD("Compute Mesh"); - roi->ComputeMeshFromImage(); + roi->ComputeContoursFromImage(); // FIXME do the set mesh for the moment (to change) + // roi->ComputeMeshFromContour(); vtkSmartPointer mesh = roi->GetMesh(); DD("done"); @@ -91,13 +233,14 @@ void clitk::Image2DicomRTStructFilter::Update() // points->SetPoint(i, p); // } roi->SetName("TOTO"); - roi->SetDicomUptodateFlag(false); // indicate that dicom info must be updated from the mesh. + roi->SetDicomUptodateFlag(true); // indicate that dicom info must be updated from the mesh. // Convert to dicom ? DD("TODO"); // Write structset->Write("toto.dcm"); + */ } //--------------------------------------------------------------------