#include <ccInteractor.h>
Collaboration diagram for MainWindow:

Public Slots | |
| void | openFile () |
| Method for handling a call to open a file. | |
| void | saveFile () |
| Method for handling a call to save an image. | |
| void | newSubdivision (void) |
| Method for handling subdivision calls. | |
Public Member Functions | |
| void | init (void) |
| initializes GUI | |
Private Attributes | |
| RenderWindowInteractor * | interactor |
| provides GUI and OpenGL functionality | |
| int | subdiv |
| Number of Subdivisions. | |
| QString | fileName |
| filename of *.3DS to open | |
| QString | SaveFile |
| filename of image file to save | |
| vtkInterpolatingSubdivisionFilter * | filter1 |
| indentifier for linear and butterfly subdivision method | |
| vtkApproximatingSubdivisionFilter * | filter2 |
| indentifier for catmull-clark and loop subdivision method | |
| vtk3DSOurImporter * | importer |
| imports *.3DS files in vtk | |
| QSpinBox * | noOfSubdivisions |
| GUI element for selection of the number of subdivisions. | |
| QRadioButton * | triangle |
| GUI element: Radiobutton for selection of mesh type. | |
| QRadioButton * | quad |
| GUI element: Radiobutton for selection of mesh type. | |
| QRadioButton * | loop |
| GUI element: Radiobutton for selection of sudivision type. | |
| QRadioButton * | linear |
| GUI element: Radiobutton for selection of subdivision type. | |
| QRadioButton * | butterfly |
| GUI element: Radiobutton for selection of subdivision type. | |
| QRadioButton * | cc |
| GUI element: Radiobutton for selection of subdivision type. | |
| QLabel * | lsubdiv |
| GUI element: label. | |
Definition at line 46 of file ccInteractor.h.
|
|
initializes GUI
Definition at line 4 of file ccInteractor.cpp. References butterfly, cc, interactor, linear, loop, lsubdiv, newSubdivision(), noOfSubdivisions, openFile(), quad, saveFile(), and triangle. Referenced by main().
00004 {
00005 interactor = NULL;
00006 QVBox *mainBox = new QVBox(this);
00007 mainBox->setGeometry(10,10,330,400);
00008
00009 QPushButton *buttonOK = new QPushButton("Open 3Ds-File...", mainBox, "button_open");
00010 buttonOK->setGeometry(10,10,310,20);
00011 QHBox *h1box = new QHBox(mainBox);
00012 h1box->setGeometry(10,30,310,20);
00013 lsubdiv = new QLabel("&Number of Subdivisions:",h1box);
00014 noOfSubdivisions = new QSpinBox(h1box,"spin1");
00015 noOfSubdivisions->setMinValue(1);
00016 noOfSubdivisions->setMaxValue(20);
00017 lsubdiv->setBuddy(noOfSubdivisions);
00018 QButtonGroup *selectStartType = new QButtonGroup("Select initial mesh type", mainBox);
00019 selectStartType->setGeometry(10,60,310,80);
00020 QButtonGroup *selectSubdivMeth = new QButtonGroup("Select initial subdivision method", mainBox);
00021 selectSubdivMeth->setGeometry(10,110,310,140);
00022 triangle = new QRadioButton("Triangle", selectStartType);
00023 triangle->setGeometry(10, 20, 100, 20);
00024 triangle->setChecked(true);
00025 quad = new QRadioButton("Quad", selectStartType);
00026 quad->setGeometry(10, 50, 100, 20);
00027 quad->setChecked(false);
00028 selectStartType->insert(triangle, 0);
00029 selectStartType->insert(quad, 1);
00030 linear = new QRadioButton("Linear", selectSubdivMeth);
00031 linear->setGeometry(10,20,200,20);
00032 linear->setChecked(true);
00033 loop = new QRadioButton("Loop", selectSubdivMeth);
00034 loop->setGeometry(10,50,200,20);
00035 loop->setChecked(false);
00036 butterfly = new QRadioButton("Butterfly",selectSubdivMeth);
00037 butterfly->setGeometry(10,80,200,20);
00038 butterfly->setChecked(false);
00039 cc = new QRadioButton("CatmullClark",selectSubdivMeth);
00040 cc->setGeometry(10,110,200,20);
00041 cc->setChecked(false);
00042
00043 selectSubdivMeth->insert(linear,0);
00044 selectSubdivMeth->insert(loop,1);
00045 selectSubdivMeth->insert(butterfly,2);
00046 selectSubdivMeth->insert(cc,3);
00047 QPushButton *buttonSubdivide = new QPushButton("Subdivision", mainBox, "button_subdivide");
00048 QPushButton *buttonSave = new QPushButton("Save Image",mainBox,"button_save");
00049 connect( buttonOK, SIGNAL(clicked()), this, SLOT(openFile()));
00050 connect( buttonSubdivide, SIGNAL(clicked()), this, SLOT(newSubdivision()));
00051 connect( buttonSave, SIGNAL(clicked()),this,SLOT(saveFile()));
00052 }
|
|
|
Method for handling subdivision calls.
Definition at line 105 of file ccInteractor.cpp. References butterfly, cc, fileName, filter1, filter2, RenderWindow::GetRenderer(), importer, interactor, linear, loop, vtkCatmullClarkFilter::New(), vtk3DSOurImporter::New(), noOfSubdivisions, vtk3DSOurImporter::SetPolys(), subdiv, and triangle. Referenced by init().
00105 {
00106
00107 printf("start of new subdivision\n");
00108
00109 importer = vtk3DSOurImporter::New();
00110 if (triangle->isChecked()) importer->SetPolys("triangle"); else importer->SetPolys("quad");
00111 importer->ComputeNormalsOn();
00112 importer->SetFileName(fileName);
00113 importer->Read();
00114
00115 printf("Test\n");
00116
00117
00118 subdiv = (noOfSubdivisions->value());
00119
00120 filter1 = NULL;
00121 filter2 = NULL;
00122
00123 // create Render Window Interactor
00124 interactor = new RenderWindowInteractor(this);
00125 CHECK_PTR( interactor );
00126 interactor->resize( 400, 400 );
00127 interactor->setGeometry( 360, 10, 400, 400 );
00128
00129 if(linear->isChecked())
00130 (vtkLinearSubdivisionFilter*)filter1 = vtkLinearSubdivisionFilter::New();
00131 if(loop->isChecked())
00132 (vtkLoopSubdivisionFilter*)filter2 = vtkLoopSubdivisionFilter::New();
00133 if(butterfly->isChecked())
00134 (vtkButterflySubdivisionFilter*)filter1 = vtkButterflySubdivisionFilter::New();
00135 if(cc->isChecked())
00136 (vtkCatmullClarkFilter*)filter2 = vtkCatmullClarkFilter::New();
00137
00138 if((filter1 != NULL)&&(filter2 == NULL))
00139 filter1->SetNumberOfSubdivisions(subdiv);
00140 else if((filter2 != NULL)&&(filter1 == NULL))
00141 filter2->SetNumberOfSubdivisions(subdiv);
00142 else exit(1);
00143
00144 vtkRenderer *renderer = vtkRenderer::New();
00145 vtkRenderWindow *renderWindow = vtkRenderWindow::New();
00146 renderWindow->AddRenderer(renderer);
00147 renderer->SetBackground(0,0,0);
00148
00149 vtkActorCollection *ac = importer->GetRenderer()->GetActors();
00150 ac->InitTraversal();
00151 vtkActor *dsActor=ac->GetNextActor();
00152 while (dsActor!=NULL) {
00153 vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00154
00155 vtkPolyDataMapper *figureMapper = vtkPolyDataMapper::New();
00156
00157 if(filter1 != NULL) {
00158 filter1->SetInput(polyData);
00159 figureMapper->SetInput(filter1->GetOutput());
00160 }
00161 if(filter2 != NULL) {
00162 filter2->SetInput(polyData);
00163 figureMapper->SetInput(filter2->GetOutput());
00164 }
00165
00166 vtkActor *actor = vtkActor::New();
00167
00168 actor->SetMapper(figureMapper);
00169 actor->SetProperty(dsActor->GetProperty());
00170
00171 // ========================================================
00172 // Here the Actors are added to our interactor
00173 // ========================================================
00174 interactor->GetRenderer()->AddActor(actor);
00175
00176 dsActor=ac->GetNextActor();
00177 }
00178
00179 interactor->GetRenderer()->ResetCamera();
00180 printf("show interactor\n");
00181 interactor->show();
00182
00183 }
|
|
|
Method for handling a call to open a file.
Definition at line 55 of file ccInteractor.cpp. References fileName. Referenced by init().
00055 {
00056
00057 QFileDialog *fd = new QFileDialog( this, "Open File", TRUE );
00058
00059 fd->setMode( QFileDialog::ExistingFile );
00060 fd->setViewMode( QFileDialog::List );
00061 fd->setFilter( "Data File (*.3ds)" );
00062
00063 if( fd->exec() == QDialog::Accepted ) {
00064 fileName = fd->selectedFile();
00065 }
00066 }
|
|
|
Method for handling a call to save an image.
Definition at line 68 of file ccInteractor.cpp. References interactor, and SaveFile. Referenced by init().
00068 {
00069 if(interactor != NULL) {
00070 SaveFile = QFileDialog::getSaveFileName("/home","Images (*.bmp *.xbm *.xpm *.png *.jpg *.jpeg )",
00071 this, "save file dialog",
00072 "Choose a file name to save under");
00073 QImage *newImg = new QImage();
00074 *newImg = interactor->grabFrameBuffer();
00075
00076 if ( SaveFile != NULL ) {
00077 if(SaveFile.endsWith("jpg") ||
00078 SaveFile.endsWith("JPG") ||
00079 SaveFile.endsWith("JPEG")||
00080 SaveFile.endsWith("jpeg")) {
00081 newImg->save(SaveFile,"JPEG",100);
00082 } else {
00083 if(SaveFile.endsWith("bmp") ||
00084 SaveFile.endsWith("BMP")) {
00085 newImg->save(SaveFile,"BMP",100);
00086 } else {
00087 if(SaveFile.endsWith("xbm") ||
00088 SaveFile.endsWith("XBM")) {
00089 newImg->save(SaveFile,"XBM",100);
00090 } else {
00091 if(SaveFile.endsWith("xpm") ||
00092 SaveFile.endsWith("XPM")) {
00093 newImg->save(SaveFile,"XPM",100);
00094 } else {
00095 newImg->save(SaveFile,"PNG",100);
00096 }
00097 }
00098 }
00099 }
00100 }
00101 delete newImg;
00102 }
00103 }
|
|
|
GUI element: Radiobutton for selection of subdivision type.
Definition at line 77 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
|
|
GUI element: Radiobutton for selection of subdivision type.
Definition at line 79 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
|
|
filename of *.3DS to open
Definition at line 55 of file ccInteractor.h. Referenced by newSubdivision(), and openFile(). |
|
|
indentifier for linear and butterfly subdivision method
Definition at line 59 of file ccInteractor.h. Referenced by newSubdivision(). |
|
|
indentifier for catmull-clark and loop subdivision method
Definition at line 61 of file ccInteractor.h. Referenced by newSubdivision(). |
|
|
imports *.3DS files in vtk
Definition at line 63 of file ccInteractor.h. Referenced by newSubdivision(). |
|
|
provides GUI and OpenGL functionality
Definition at line 51 of file ccInteractor.h. Referenced by init(), newSubdivision(), and saveFile(). |
|
|
GUI element: Radiobutton for selection of subdivision type.
Definition at line 75 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
|
|
GUI element: Radiobutton for selection of sudivision type.
Definition at line 73 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
|
|
GUI element: label.
Definition at line 81 of file ccInteractor.h. Referenced by init(). |
|
|
GUI element for selection of the number of subdivisions.
Definition at line 67 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
|
|
GUI element: Radiobutton for selection of mesh type.
Definition at line 71 of file ccInteractor.h. Referenced by init(). |
|
|
filename of image file to save
Definition at line 57 of file ccInteractor.h. Referenced by saveFile(). |
|
|
Number of Subdivisions.
Definition at line 53 of file ccInteractor.h. Referenced by newSubdivision(). |
|
|
GUI element: Radiobutton for selection of mesh type.
Definition at line 69 of file ccInteractor.h. Referenced by init(), and newSubdivision(). |
1.3.2