//===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== #include "bbcreaMaracasVisuTubeTreeFilter.h" #include "bbcreaMaracasVisuPackage.h" #include #include #include #include #include #include namespace bbcreaMaracasVisu { BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,TubeTreeFilter) BBTK_BLACK_BOX_IMPLEMENTATION(TubeTreeFilter,bbtk::AtomicBlackBox); void TubeTreeFilter::DrawOneTube(int iGeneral,int numPoints, int iTube) { int i; unsigned int nTv = 8; // No. of surface elements for each tube vertex double spc[3]; // img->GetSpacing(spc); spc[0]=1; spc[1]=1; spc[2]=1; int size=iGeneral+numPoints; // Create points and cells vtkSmartPointer points = vtkSmartPointer::New(); //EED vtkPoints *points = vtkPoints::New(); vtkSmartPointer lines = vtkSmartPointer::New(); //EED vtkCellArray *lines = vtkCellArray::New(); lines->InsertNextCell( numPoints ); for (i=iGeneral;iInsertPoint(i-iGeneral, bbGetInputlstPointX()[i]*spc[0], bbGetInputlstPointY()[i]*spc[1], bbGetInputlstPointZ()[i]*spc[2] ); lines->InsertCellPoint(i-iGeneral); } vtkSmartPointer polyData = vtkSmartPointer::New(); //EED vtkPolyData *polyData = vtkPolyData::New(); polyData->SetPoints(points); polyData->SetLines(lines); // Varying tube radius using sine-function vtkSmartPointer tubeRadius = vtkSmartPointer::New(); //EED vtkDoubleArray *tubeRadius = vtkDoubleArray::New(); tubeRadius->SetName("TubeRadius"); tubeRadius->SetNumberOfTuples( numPoints ); for (i=iGeneral;iSetTuple1(i-iGeneral, bbGetInputlstRadio()[i] ); } polyData->GetPointData()->AddArray(tubeRadius); polyData->GetPointData()->SetActiveScalars("TubeRadius"); // Adding spheres at the start and end of the tube // Sphere start i=iGeneral; vtkSphereSource *vtksphereStart = vtkSphereSource::New(); vtksphereStart->SetThetaResolution (10); vtksphereStart->SetPhiResolution (10); vtksphereStart->SetRadius( bbGetInputlstRadio()[i] ); vtkPolyDataMapper *sphereMapperStart = vtkPolyDataMapper::New(); sphereMapperStart->SetInput( vtksphereStart->GetOutput() ); vtkActor *sphereActorStart = vtkActor::New(); sphereActorStart->SetMapper(sphereMapperStart); sphereActorStart->SetOrigin( 0,0,0 ); sphereActorStart->SetPosition(bbGetInputlstPointX()[i]*spc[0], bbGetInputlstPointY()[i]*spc[1], bbGetInputlstPointZ()[i]*spc[2] ); // Sphere end i=size-1; vtkSphereSource *vtksphereEnd = vtkSphereSource::New(); vtksphereEnd->SetThetaResolution (10); vtksphereEnd->SetPhiResolution (10); vtksphereEnd->SetRadius( bbGetInputlstRadio()[i] ); vtkPolyDataMapper *sphereMapperEnd = vtkPolyDataMapper::New(); sphereMapperEnd->SetInput( vtksphereEnd->GetOutput() ); vtkActor *sphereActorEnd = vtkActor::New(); sphereActorEnd->SetMapper(sphereMapperEnd); sphereActorEnd->SetOrigin( 0,0,0 ); sphereActorEnd->SetPosition(bbGetInputlstPointX()[i]*spc[0], bbGetInputlstPointY()[i]*spc[1], bbGetInputlstPointZ()[i]*spc[2] ); vtkSmartPointer tube = vtkSmartPointer::New(); //EED vtkTubeFilter *tube = vtkTubeFilter::New(); tube->SetInput(polyData); tube->SetNumberOfSides(nTv); tube->SetVaryRadiusToVaryRadiusByAbsoluteScalar(); vtkSmartPointer mapper = vtkSmartPointer::New(); //EED vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); mapper->SetInputConnection(tube->GetOutputPort()); mapper->ScalarVisibilityOn(); mapper->SetScalarModeToUsePointFieldData(); // vtkSmartPointer actor =vtkSmartPointer::New(); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); vecVtkActors.push_back( actor ); vecVtkActors.push_back( sphereActorEnd ); vecVtkActors.push_back( sphereActorStart ); // Interface Update // Interface Update if (bbGetInputRenderer()!=NULL ) { bbGetInputRenderer()->AddActor( actor ); bbGetInputRenderer()->AddActor( sphereActorStart ); bbGetInputRenderer()->AddActor( sphereActorEnd ); } } void TubeTreeFilter::SetGraphicProperties() { int iTube,sizeLstAxis=bbGetInputlstIndexs().size(); vtkActor *actorTube; vtkActor *actorSpherEnd; vtkActor *actorSpherStart; double r,g,b; r = bbGetInputColour()[0]; g = bbGetInputColour()[1]; b = bbGetInputColour()[2]; for (iTube=0 ; iTubeGetProperty()->SetOpacity( bbGetInputOpacity() ); actorSpherEnd->GetProperty()->SetOpacity( bbGetInputOpacity() ); actorSpherStart->GetProperty()->SetOpacity( bbGetInputOpacity() ); //Set Colour if ( bbGetInputTransform()!=NULL ) { actorTube->SetUserTransform( bbGetInputTransform() ); actorSpherEnd->SetUserTransform( bbGetInputTransform() ); actorSpherStart->SetUserTransform( bbGetInputTransform() ); } if (bbGetInputColourLaw()==1) // One solide colour { // } if (bbGetInputColourLaw()==2) // color for differents tubes { if ( (iTube*3+1) < (int)(bbGetInputColour().size()) ) { r = bbGetInputColour()[0+iTube*3]; g = bbGetInputColour()[1+iTube*3]; b = bbGetInputColour()[2+iTube*3]; } else { r = (rand() % 100) / 100.0; g = (rand() % 100) / 100.0; b = (rand() % 100) / 100.0; } } actorTube->GetProperty()->SetColor( r,g,b ); actorSpherEnd->GetProperty()->SetColor( r,g,b ); actorSpherStart->GetProperty()->SetColor( r,g,b ); } // for } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeTreeFilter::Process() { printf("EED TubeTreeFilter::Process start \n"); int iGeneral=0; int iTube,sizeLstAxis=bbGetInputlstIndexs().size(); int iActor,sizeActors = vecVtkActors.size(); int numPoints; if (oldLstSize!=sizeLstAxis) { oldLstSize=sizeLstAxis; for (iActor=0 ; iActorRemoveActor( vecVtkActors[iActor] ); //EED vecVtkPolyData[iActor]->Delete(); //EED vecVtkPolyDataMaper[iActor]->Delete(); //EED vecVtkActors[iActor]->Delete(); } } //EED vecVtkPolyData.clear(); //EED vecVtkPolyDataMaper.clear(); vecVtkActors.clear(); for ( iTube=0 ; iTube colour; // 0- gray colour.push_back(0.5); colour.push_back(0.5); colour.push_back(0.5); // 1- red colour.push_back(1.0); colour.push_back(0.0); colour.push_back(0.0); // 2- blue colour.push_back(0.0); colour.push_back(0.0); colour.push_back(1.0); // 3- yellow colour.push_back(1.0); colour.push_back(1.0); colour.push_back(0.0); // 4- green colour.push_back(0.0); colour.push_back(1.0); colour.push_back(0.0); // 5- colour.push_back(0.0); colour.push_back(1.0); colour.push_back(1.0); // 6- colour.push_back(0.5); colour.push_back(0.5); colour.push_back(0.5); bbSetInputColour(colour); bbSetInputTransform(NULL); bbSetInputRenderer(NULL); bbSetInputColourLaw(1); bbSetInputOpacity(1); } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeTreeFilter::bbUserInitializeProcessing() { // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers // if any } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeTreeFilter::bbUserFinalizeProcessing() { // THE FINALIZATION METHOD BODY : // Here does nothing // but this is where you should desallocate the internal/output pointers // if any } } // EO namespace bbcreaMaracasVisu