+
+
+ double ranges[2];
+ vtkImageData *image = bbGetInputIn();
+ image->Update();
+ image->GetScalarRange(ranges);
+
+ scale = 255/(ranges[1]/100);
+
+ mCast->SetInput( bbGetInputIn() );
+ mCast->SetScale( scale / 100.0 );
+ //mCast->SetShift( -bbGetInputShift() );
+
+
+
+
+
+
+
+
+
+ DensityPoints = bbGetInputDensityPoints();
+
+ //We assign by default the values of density by regarding at range from the image
+ if(DensityPoints.size()==0)
+ {
+ DensityPoints.push_back(ranges[0]);
+ DensityPoints.push_back(ranges[1]);
+ }
+
+
+ OpacityValues = bbGetInputOpacityValues();
+
+ while(DensityPoints.size()>OpacityValues.size())
+ {
+ OpacityValues.push_back(1.0);
+ }
+
+
+
+ double factor = scale/ 100.0 ;
+
+ double minCF = bbGetInputMinColorWindow();
+ double maxCF = bbGetInputMaxColorWindow();
+
+ grayTransferFunction->AddSegment( minCF , 0.0 , maxCF , 1.0 );
+
+
+
+
+ for(int i =0; i< DensityPoints.size(); i++)
+ {
+ cout<<"MIPCreator::Process::dPoint"<<i<<"::"<<DensityPoints.at(i)<<endl;
+ cout<<"MIPCreator::Process::oPoint"<<i<<"::"<<OpacityValues.at(i)<<endl;
+
+ opacityTransferFunction->AddPoint(DensityPoints.at(i)*factor, OpacityValues.at(i));
+ }
+ //opacityTransferFunction = vtkPiecewiseFunction::New();
+// opacityTransferFunction->AddPoint( 0 , 0.0/100.0 );
+// opacityTransferFunction->AddPoint( 85 , 2.0/100.0 );
+// opacityTransferFunction->AddPoint( 160 , 25.0/100.0 );
+// opacityTransferFunction->AddPoint( 210 , 50.0/100.0 );
+// opacityTransferFunction->AddPoint( 255 , 90.0/100.0 );
+
+
+
+ // Create a set of properties for mip
+ vtkVolumeProperty *mipProperty;
+ mipProperty = vtkVolumeProperty::New();
+ mipProperty->SetScalarOpacity( opacityTransferFunction );
+ mipProperty->SetColor( grayTransferFunction );
+
+// mipProperty->SetInterpolationTypeToLinear();
+ mipProperty->SetInterpolationTypeToNearest();
+
+// mipProperty->ShadeOff();
+ mipProperty->ShadeOn();
+
+// mipProperty->SetAmbient(0.9);
+// mipProperty->SetDiffuse(0.9);
+// mipProperty->SetSpecular(0.9);
+
+
+
+
+
+ mMIP = vtkVolumeRayCastMIPFunction::New();
+ mMIP->SetMaximizeMethodToScalarValue();
+
+ mMapper = vtkVolumeRayCastMapper::New();
+ mMapper->SetVolumeRayCastFunction(mMIP);
+ mMapper->SetInput(mCast->GetOutput()); // (smoother.GetOutput())
+
+ mVolume = vtkVolume::New();
+ mVolume->SetMapper(mMapper);
+ mVolume->SetProperty( mipProperty );
+
+
+
+ mMapper->Update();
+
+ bbSetOutputOut(mVolume);