Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

vtkSq3SubdivisionView.cpp

Go to the documentation of this file.
00001 // vtkSq3SubdivisionView.cpp : Implementierung der Klasse CvtkSq3SubdivisionView
00002 //
00003 
00004 #include "stdafx.h"
00005 #include "vtkSq3Subdivision.h"
00006 #include "vtkSq3SubdivisionDoc.h"
00007 #include "vtkSq3SubdivisionView.h"
00008 #include "VTK3DSOurImporter.h"
00009 #include "vtkConeSource.h"
00010 #include "vtkPolyDataMapper.h"
00011 #include "vtkRenderWindow.h"
00012 #include "vtkLoopSubdivisionFilter.h"
00013 #include "vtkTriangleFilter.h"
00014 #include "vtkActorCollection.h"
00015 #include "vtkPolyData.h"
00016 #include "vtkRenderWindowInteractor.h"
00017 #include "vtkRenderer.h"
00018 #include "vtkCellArray.h"
00019 #include "vtkCommand.h"
00020 #include "MainFrm.h"
00021 #include "vtkLoopSubdivisionFilter.h"
00022 #include "vtkLinearSubdivisionFilter.h"
00023 #include "vtkButterflySubdivisionFilter.h"
00024 #include "vtkSQ3SubdivisionFilter.h"
00025 
00026 #ifdef _DEBUG
00027 #define new DEBUG_NEW
00028 #endif
00029 
00030 bool first = TRUE;
00031 
00032 
00033 // CvtkSq3SubdivisionView
00034 
00035 IMPLEMENT_DYNCREATE(CvtkSq3SubdivisionView, CView)
00036 
00037 BEGIN_MESSAGE_MAP(CvtkSq3SubdivisionView, CView)
00038         // Standarddruckbefehle
00039         ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
00040         ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
00041         ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
00042         ON_WM_CREATE()
00043         ON_WM_SIZE()
00044         ON_WM_ERASEBKGND()
00045         ON_WM_HSCROLL()
00046         ON_BN_CLICKED(IDC_BUTTON1, OnClick)
00047         ON_BN_CLICKED(IDC_BUTTON2, OnClick)
00048         ON_BN_CLICKED(IDC_BUTTON3, OnClick)
00049         ON_BN_CLICKED(IDC_BUTTON4, OnClick)
00050 END_MESSAGE_MAP()
00051 
00052 // CvtkSq3SubdivisionView Erstellung/Zerstörung
00053 
00054 CvtkSq3SubdivisionView::CvtkSq3SubdivisionView()
00055 {
00056 first = TRUE;
00057 }
00058 
00059 CvtkSq3SubdivisionView::~CvtkSq3SubdivisionView()
00060 {
00061         // Delete the the renderer, window and interactor objects.
00062         if (!first)
00063         {this->ren->Delete();
00064         this->iren->Delete();
00065         this->renWin->Delete();
00066         this->loopFilter->Delete();
00067         this->linearFilter->Delete();
00068         this->butterflyFilter->Delete();
00069         this->sq3Filter->Delete();
00070         this->ac->Delete();
00071         }
00072 
00073 }
00074 
00075 BOOL CvtkSq3SubdivisionView::PreCreateWindow(CREATESTRUCT& cs)
00076 {
00077         // TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie
00078         //  CREATESTRUCT cs modifizieren.
00079 
00080         return CView::PreCreateWindow(cs);
00081 }
00082 
00083 // CvtkSq3SubdivisionView-Zeichnung
00084 
00085 void CvtkSq3SubdivisionView::OnDraw(CDC* pDC)
00086 {
00087         CvtkSq3SubdivisionDoc* pDoc = GetDocument();
00088         ASSERT_VALID(pDoc);
00089 
00090         if (first)
00091         {
00092         // Create the the renderer, window and interactor objects.
00093         this->ren = vtkRenderer::New();
00094         this->renWin = vtkWin32OpenGLRenderWindow::New();
00095         this->iren = vtkWin32RenderWindowInteractor::New();
00096 
00097         //AfxMessageBox((char*)GetDocument()->fname);
00098         {
00099         importer = VTK3DSOurImporter::New();
00100         importer->SetPolys("triangle");
00101         importer->ComputeNormalsOn();
00102         importer->SetFileName(pDoc->fname);
00103         importer->Read();
00104 
00105         ac = importer->GetRenderer()->GetActors();
00106         //ac = ren->GetActors();
00107         ac->InitTraversal();
00108         vtkActor *dsActor=ac->GetNextActor();
00109         
00110         loopFilter = vtkLoopSubdivisionFilter::New();
00111         linearFilter = vtkLinearSubdivisionFilter::New();
00112         butterflyFilter = vtkButterflySubdivisionFilter::New();
00113         sq3Filter = vtkSQ3SubdivisionFilter::New();
00114 
00115         while (dsActor!=NULL) {
00116     vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00117 
00118         loopFilter->SetInput(polyData);          
00119         loopFilter->SetNumberOfSubdivisions(0);  // set initial amount
00120         linearFilter->SetInput(polyData);          
00121         linearFilter->SetNumberOfSubdivisions(0);  // set initial amount
00122         butterflyFilter->SetInput(polyData);          
00123         butterflyFilter->SetNumberOfSubdivisions(0);  // set initial amount
00124         sq3Filter->SetInput(polyData);          
00125         sq3Filter->SetNumberOfSubdivisions(0);  // set initial amount
00126 
00127     vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00128     mapper->SetInput(butterflyFilter->GetOutput());
00129     vtkActor *actor = vtkActor::New();
00130 
00131     actor->SetMapper(mapper);
00132     actor->SetProperty(dsActor->GetProperty()); 
00133     ren->AddActor(actor);
00134     dsActor=ac->GetNextActor();
00135         }
00136         }
00137 
00138         this->renWin->AddRenderer(this->ren);
00139         // setup the parent window
00140         this->renWin->SetParentId(this->m_hWnd);
00141         this->iren->SetRenderWindow(this->renWin);
00142 
00143         first = FALSE;
00144 
00145 
00146         }
00147 
00148         if ( !this->iren->GetInitialized() )
00149         {
00150                 CRect rect;
00151 
00152                 this->GetClientRect(&rect);
00153                 this->iren->Initialize();
00154                 this->renWin->SetSize(rect.right-rect.left,rect.bottom-rect.top);
00155                 this->renWin->SetPosition(0,0);
00156 
00157                 this->ren->ResetCamera();
00158         }
00159 
00160         // Invoke the pipeline
00161         Pipeline();
00162 
00163         this->renWin->Render();
00164 
00165 }
00166 
00167 
00168 // CvtkSq3SubdivisionView drucken
00169 
00170 BOOL CvtkSq3SubdivisionView::OnPreparePrinting(CPrintInfo* pInfo)
00171 {
00172         // Standardvorbereitung
00173         return DoPreparePrinting(pInfo);
00174 }
00175 
00176 void CvtkSq3SubdivisionView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
00177 {
00178         // TODO: Zusätzliche Initialisierung vor dem Drucken hier einfügen
00179 }
00180 
00181 void CvtkSq3SubdivisionView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
00182 {
00183         // TODO: Bereinigung nach dem Drucken einfügen
00184 }
00185 
00186 
00187 // CvtkSq3SubdivisionView Diagnose
00188 
00189 #ifdef _DEBUG
00190 void CvtkSq3SubdivisionView::AssertValid() const
00191 {
00192         CView::AssertValid();
00193 }
00194 
00195 void CvtkSq3SubdivisionView::Dump(CDumpContext& dc) const
00196 {
00197         CView::Dump(dc);
00198 }
00199 
00200 CvtkSq3SubdivisionDoc* CvtkSq3SubdivisionView::GetDocument() const // Nicht-Debugversion ist inline
00201 {
00202         ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CvtkSq3SubdivisionDoc)));
00203         return (CvtkSq3SubdivisionDoc*)m_pDocument;
00204 }
00205 #endif //_DEBUG
00206 
00207 
00208 int CvtkSq3SubdivisionView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
00209 {
00210         if (CView::OnCreate(lpCreateStruct) == -1)
00211                 return -1;
00212         
00213         m_trackbar.Create(WS_CHILD|WS_VISIBLE|TBS_AUTOTICKS|TBS_BOTTOM|TBS_HORZ, CRect(0,0,150,33), this, IDC_TRACKBAR);
00214         m_trackbar.SetRange(0,5,TRUE);
00215         m_trackbar.SetTicFreq(1);
00216         m_trackbar.SetLineSize(1);
00217         m_trackbar.SetPageSize(1);
00218         m_button1.Create("Linear", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,    CRect(150,0,250,33), this, IDC_BUTTON1);
00219         m_button2.Create("Butterfly", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON, CRect(250,0,350,33), this, IDC_BUTTON2);
00220         m_button3.Create("Loop", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,      CRect(350,0,450,33), this, IDC_BUTTON3);
00221         m_button4.Create("Square3", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,   CRect(450,0,550,33), this, IDC_BUTTON4);
00222         CheckDlgButton(IDC_BUTTON1, BST_CHECKED); 
00223         /*
00224         this->renWin->AddRenderer(this->ren);
00225         // setup the parent window
00226         this->renWin->SetParentId(this->m_hWnd);
00227         this->iren->SetRenderWindow(this->renWin);
00228         */
00229 
00230         return 0;
00231 }
00232 
00233 void CvtkSq3SubdivisionView::OnSize(UINT nType, int cx, int cy) 
00234 {
00235         CView::OnSize(nType, cx, cy);
00236         
00237         CRect rect;
00238         if (!first)
00239         {this->GetClientRect(&rect);
00240         this->renWin->SetSize(rect.right-rect.left,rect.bottom-rect.top);
00241         }
00242 }
00243 
00244 BOOL CvtkSq3SubdivisionView::OnEraseBkgnd(CDC* pDC) 
00245 {
00246         // TODO: Add your message handler code here and/or call default
00247         
00248         //return CView::OnEraseBkgnd(pDC);
00249         return TRUE;
00250 }
00251 
00252 LRESULT CvtkSq3SubdivisionView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
00253 {
00254         switch (message)
00255         {
00256                 //case WM_PAINT: 
00257                 case WM_LBUTTONDOWN: 
00258                 case WM_LBUTTONUP: 
00259                 case WM_MBUTTONDOWN: 
00260                 case WM_MBUTTONUP: 
00261                 case WM_RBUTTONDOWN: 
00262                 case WM_RBUTTONUP: 
00263                 case WM_MOUSEMOVE:
00264                 case WM_CHAR:
00265                 case WM_TIMER:
00266                 if (!first)
00267                 {if (this->iren->GetInitialized())
00268                 {
00269                         return vtkHandleMessage2(this->m_hWnd, message, wParam, lParam, this->iren);
00270                 }}
00271                 break;
00272         }
00273 
00274         
00275         return CView::WindowProc(message, wParam, lParam);
00276 }
00277 
00278 void CvtkSq3SubdivisionView::Pipeline ( void )
00279 {
00280 }
00281 // CvtkSq3SubdivisionView Meldungshandler
00282 
00283 void CvtkSq3SubdivisionView::OnClick ()
00284 {
00285         if (m_button1.GetState() != 0) 
00286         {
00287                 linearFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00288                 linearFilter->Update();
00289                 ac = ren->GetActors();
00290                 ac->InitTraversal();
00291                 vtkActor *dsActor2=ac->GetNextActor();
00292                 
00293 
00294                 ac = importer->GetRenderer()->GetActors();
00295                 ac->InitTraversal();
00296                 vtkActor *dsActor=ac->GetNextActor();
00297 
00298                 while (dsActor!=NULL) {
00299             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00300 
00301             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00302             mapper->SetInput(linearFilter->GetOutput());
00303             vtkActor *actor = vtkActor::New();
00304 
00305             dsActor2->SetMapper(mapper);
00306             dsActor2->SetProperty(dsActor->GetProperty()); 
00307             
00308                 dsActor=ac->GetNextActor();
00309                 }
00310 
00311                 Invalidate();
00312         }
00313 
00314         if (m_button2.GetState() != 0) 
00315         {
00316                 butterflyFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00317                 butterflyFilter->Update();
00318                 ac = ren->GetActors();
00319                 ac->InitTraversal();
00320                 vtkActor *dsActor2=ac->GetNextActor();
00321                 
00322 
00323                 ac = importer->GetRenderer()->GetActors();
00324                 ac->InitTraversal();
00325                 vtkActor *dsActor=ac->GetNextActor();
00326 
00327                 while (dsActor!=NULL) {
00328             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00329 
00330             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00331             mapper->SetInput(butterflyFilter->GetOutput());
00332             vtkActor *actor = vtkActor::New();
00333 
00334             dsActor2->SetMapper(mapper);
00335             dsActor2->SetProperty(dsActor->GetProperty()); 
00336             
00337                 dsActor=ac->GetNextActor();
00338                 }
00339 
00340                 Invalidate();
00341         }
00342 
00343         if (m_button3.GetState() != 0) 
00344         {
00345                 loopFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00346                 loopFilter->Update();
00347                 ac = ren->GetActors();
00348                 ac->InitTraversal();
00349                 vtkActor *dsActor2=ac->GetNextActor();
00350                 
00351 
00352                 ac = importer->GetRenderer()->GetActors();
00353                 ac->InitTraversal();
00354                 vtkActor *dsActor=ac->GetNextActor();
00355 
00356                 while (dsActor!=NULL) {
00357             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00358 
00359             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00360             mapper->SetInput(loopFilter->GetOutput());
00361             vtkActor *actor = vtkActor::New();
00362 
00363             dsActor2->SetMapper(mapper);
00364             dsActor2->SetProperty(dsActor->GetProperty()); 
00365             
00366                 dsActor=ac->GetNextActor();
00367                 }
00368 
00369                 Invalidate();
00370         }
00371 
00372         if (m_button4.GetState() != 0) 
00373         {
00374                 loopFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00375                 loopFilter->Update();
00376                 ac = ren->GetActors();
00377                 ac->InitTraversal();
00378                 vtkActor *dsActor2=ac->GetNextActor();
00379                 
00380 
00381                 ac = importer->GetRenderer()->GetActors();
00382                 ac->InitTraversal();
00383                 vtkActor *dsActor=ac->GetNextActor();
00384 
00385                 while (dsActor!=NULL) {
00386             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00387 
00388             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00389             mapper->SetInput(sq3Filter->GetOutput());
00390             vtkActor *actor = vtkActor::New();
00391 
00392             dsActor2->SetMapper(mapper);
00393             dsActor2->SetProperty(dsActor->GetProperty()); 
00394             
00395                 dsActor=ac->GetNextActor();
00396                 }
00397 
00398                 Invalidate();
00399         }
00400 
00401 }
00402 
00403 void CvtkSq3SubdivisionView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
00404 {
00405         // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
00406 
00407         int currentNumber = loopFilter->GetNumberOfSubdivisions();
00408         
00409         //if (currentNumber != m_trackbar.GetPos())
00410         {
00411         if (m_button1.GetState() != 0) 
00412         {
00413                 linearFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00414                 linearFilter->Update();
00415                 ac = ren->GetActors();
00416                 ac->InitTraversal();
00417                 vtkActor *dsActor2=ac->GetNextActor();
00418                 
00419 
00420                 ac = importer->GetRenderer()->GetActors();
00421                 ac->InitTraversal();
00422                 vtkActor *dsActor=ac->GetNextActor();
00423 
00424                 while (dsActor!=NULL) {
00425             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00426 
00427             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00428             mapper->SetInput(linearFilter->GetOutput());
00429             vtkActor *actor = vtkActor::New();
00430 
00431             dsActor2->SetMapper(mapper);
00432             dsActor2->SetProperty(dsActor->GetProperty()); 
00433             
00434                 dsActor=ac->GetNextActor();
00435                 }
00436 
00437                 Invalidate();
00438         }
00439 
00440         if (m_button2.GetState() != 0) 
00441         {
00442                 butterflyFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00443                 butterflyFilter->Update();
00444                 ac = ren->GetActors();
00445                 ac->InitTraversal();
00446                 vtkActor *dsActor2=ac->GetNextActor();
00447                 
00448 
00449                 ac = importer->GetRenderer()->GetActors();
00450                 ac->InitTraversal();
00451                 vtkActor *dsActor=ac->GetNextActor();
00452 
00453                 while (dsActor!=NULL) {
00454             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00455 
00456             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00457             mapper->SetInput(butterflyFilter->GetOutput());
00458             vtkActor *actor = vtkActor::New();
00459 
00460             dsActor2->SetMapper(mapper);
00461             dsActor2->SetProperty(dsActor->GetProperty()); 
00462             
00463                 dsActor=ac->GetNextActor();
00464                 }
00465 
00466                 Invalidate();
00467         }
00468 
00469         if (m_button3.GetState() != 0) 
00470         {
00471                 loopFilter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00472                 loopFilter->Update();
00473                 ac = ren->GetActors();
00474                 ac->InitTraversal();
00475                 vtkActor *dsActor2=ac->GetNextActor();
00476                 
00477 
00478                 ac = importer->GetRenderer()->GetActors();
00479                 ac->InitTraversal();
00480                 vtkActor *dsActor=ac->GetNextActor();
00481 
00482                 while (dsActor!=NULL) {
00483             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00484 
00485             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00486             mapper->SetInput(loopFilter->GetOutput());
00487             vtkActor *actor = vtkActor::New();
00488 
00489             dsActor2->SetMapper(mapper);
00490             dsActor2->SetProperty(dsActor->GetProperty()); 
00491             
00492                 dsActor=ac->GetNextActor();
00493                 }
00494 
00495                 Invalidate();
00496         }
00497 
00498         if (m_button4.GetState() != 0) 
00499         {
00500                 sq3Filter->SetNumberOfSubdivisions(m_trackbar.GetPos());
00501                 sq3Filter->Update();
00502                 ac = ren->GetActors();
00503                 ac->InitTraversal();
00504                 vtkActor *dsActor2=ac->GetNextActor();
00505                 
00506 
00507                 ac = importer->GetRenderer()->GetActors();
00508                 ac->InitTraversal();
00509                 vtkActor *dsActor=ac->GetNextActor();
00510 
00511                 while (dsActor!=NULL) {
00512             vtkPolyData *polyData = (vtkPolyData*)(dsActor->GetMapper()->GetInputAsDataSet());
00513 
00514             vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
00515                 mapper->SetInput(sq3Filter->GetOutput());
00516             vtkActor *actor = vtkActor::New();
00517 
00518             dsActor2->SetMapper(mapper);
00519             dsActor2->SetProperty(dsActor->GetProperty()); 
00520             
00521                 dsActor=ac->GetNextActor();
00522                 }
00523 
00524                 Invalidate();
00525         }
00526         }
00527 
00528         CView::OnHScroll(nSBCode, nPos, pScrollBar);
00529 }

Generated on Thu Jul 3 16:54:24 2003 for Sq3Subdivision by doxygen1.2.18