Hi everyone, I have have a little problem.I want to show a vtk console window
resulting from interactor->start(); in a Fl_Window. Plese can you tell me how i
can do it. Tell me the problem in following Program.
////////////////////////////////////////////////////
////////////////////////////////////////////////////
#include "vtkSmartPointer.h"
#include "vtkStructuredPointsReader.h"
#include "vtkThresholdPoints.h"
#include "vtkMaskPoints.h"
#include "vtkConeSource.h"
#include "vtkGlyph3D.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkStructuredPoints.h"
#include "vtkOutlineFilter.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkContourFilter.h"
#include "vtkProperty.h"
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
int main()
{
Fl_Window win(400,200,"My First Program");
//The goal of this project/lab is primarily to represent/show the flow
of blood in the carotid artery.
//The data is provided not as an image (although one can have even image data
from an MRA) but as a .vtk
//file. These files are typically used to contain text data. Other kinds of
files such as XML files can also
//be used for the VTK data. For more details on the VTK dataformats check
www.vtk.org/VTK/img/file-formats.pdf
//In this lab we are going to create a pipeline which starts from a
vtkStructuredPointsReader (used to read) the
//.vtk files such as the carotid.vtk file which we are going to use today. Then
the pipeline tri-furcates into three
//pipelines: (i) The piprline for showing the vector flow; (ii) Pipeline for
showing the outline; (iii) Pipeline for
//displaying the boundaries of the arteries.
//THIS IS THE FIRST PIPELINE FOR SHOWING THE VECTOR FLOW.
//Create a data reader of type vtkStructuredPointsReader since we are
dealing with .vtk files and
//read the carotid.vtk datafile
vtkSmartPointer<vtkStructuredPointsReader> DataReader =
vtkSmartPointer<vtkStructuredPointsReader>::New();
DataReader->SetFileName("carotid.vtk");
// So now your data source has been specified.
//Create the Threshold Points Object
vtkSmartPointer<vtkThresholdPoints> Threshold =
vtkSmartPointer<vtkThresholdPoints>::New();
Threshold->SetInput(DataReader->GetOutput());
Threshold->ThresholdByUpper(200);
//The role of the vtkMaskPoints is basically to mask/ignore certain
data points. Here we are reading every
//10th data point and then ignoring the next 9 daata points, if we were
to read all datapoints in that
//case you would have two many vectors in the
// display and you wont be able to get a clear picture of the flow. So
this filter is used to parse and
// ignore parts of the data.
vtkSmartPointer<vtkMaskPoints> Mask =
vtkSmartPointer<vtkMaskPoints>::New();
Mask->SetInput(Threshold->GetOutput());
Mask->SetOnRatio(10); //Take every 10th Point
//We are using the cone as the structure which will be used to display
each and every vector.
vtkSmartPointer<vtkConeSource> Cone =
vtkSmartPointer<vtkConeSource>::New();
Cone->SetResolution(3);
Cone->SetHeight(1);
Cone->SetRadius(0.25);
//This class integrates the data from the pipeline with the geometric
object used for display such as
//the cone in this example. You can use any kind of glyph that you
want, arrow etc.
vtkSmartPointer<vtkGlyph3D> Cones = vtkSmartPointer<vtkGlyph3D>::New();
Cones->SetInput(Mask->GetOutput());
Cones->SetSource(Cone->GetOutput());
Cones->SetScaleFactor(0.5);
Cones->SetScaleModeToScaleByVector();
//Mapper you guys already know !!!
vtkSmartPointer<vtkPolyDataMapper> Mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
Mapper->SetInput(Cones->GetOutput());
Mapper->SetScalarRange(2,10); //Color coding of the glyphs
//Same for Actor !!!
vtkSmartPointer<vtkActor> FlowActor = vtkSmartPointer<vtkActor>::New();
FlowActor->SetMapper(Mapper);
//THIS IS THE SECOND PIPELINE FOR SHOWING THE OUTLINE OF THE BOUNDING
BOX.
//Code for building the outline
//Create an outline filter as you guys have done multiple times
previously. and connect it to the
//data reader so that the program can get the dimensions of the data
and make an outline around it.
vtkSmartPointer<vtkOutlineFilter> OutlineFilter =
vtkSmartPointer<vtkOutlineFilter>::New();
OutlineFilter->SetInput(DataReader->GetOutput());
//Connect the outline filter to Mapper.
vtkSmartPointer<vtkPolyDataMapper> OutlineMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
OutlineMapper->SetInput(OutlineFilter->GetOutput());
//Connect the Mapper to Actor etc....
vtkSmartPointer<vtkActor> OutlineActor =
vtkSmartPointer<vtkActor>::New();
OutlineActor->SetMapper(OutlineMapper);
//THIS IS THE THIRDLINE PIPELINE FOR SHOWING THE SEMI-OPAQUE ARTERIES
USING ISOSURFACES.
//Code for showing the arteries
//Create a contour filter and connect it to the dataset with a
specified iso-value.
vtkSmartPointer<vtkContourFilter> Arteries =
vtkSmartPointer<vtkContourFilter>::New();
Arteries->SetInput(DataReader->GetOutput());
Arteries->SetValue(0,190);
//Mapper
vtkSmartPointer<vtkPolyDataMapper> ArteryMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
ArteryMapper->SetInput(Arteries->GetOutput());
ArteryMapper->ScalarVisibilityOff();
//Actor
vtkSmartPointer<vtkActor> ArteryActor =
vtkSmartPointer<vtkActor>::New();
ArteryActor->SetMapper(ArteryMapper);
vtkProperty* Temp = ArteryActor->GetProperty();
Temp->SetRepresentationToWireframe();
Temp->SetOpacity(0.25);
//SET UP THE THREE RENDERING COMPONENTS (RENDERER, WINDOW, INTERACTOR)
AND CONNECT THEM TO THE THREE PIPELINES
vtkSmartPointer<vtkRenderer> Renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> RenderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
RenderWindow->AddRenderer(Renderer);
vtkSmartPointer<vtkRenderWindowInteractor> Interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
Interactor->SetRenderWindow(RenderWindow);
//Connect the rendering components with the rest of the pipeline
Renderer->AddActor(OutlineActor);
Renderer->AddActor(FlowActor);
Renderer->AddActor(ArteryActor);
//Set Window Size and Background.
RenderWindow->SetSize(500, 500);
Renderer->SetBackground(0.1,0.2,0.4);
//And MAGIC !!!!!!!
Interactor->Initialize();
Interactor->Start();
win.show();
return(Fl::run());
}
_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev