// BrainVolView.cpp : implementation of the CBrainVolView class // #include "stdafx.h" #include "BrainVol.h" #include "BrainVolDoc.h" #include "BrainVolView.h" #include "VolDgl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBrainVolView IMPLEMENT_DYNCREATE(CBrainVolView, CView) BEGIN_MESSAGE_MAP(CBrainVolView, CView) //{{AFX_MSG_MAP(CBrainVolView) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_OPENSTACK, OnFileOpenstack) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBrainVolView construction/destruction CBrainVolView::CBrainVolView() { // TODO: add construction code here this->ren = vtkRenderer::New(); this->renWin = vtkWin32OpenGLRenderWindow::New(); this->iren = vtkWin32RenderWindowInteractor::New(); this->Reader=vtkImageReader::New(); this->mapper = vtkPolyDataMapper::New(); this->actor = vtkActor::New(); this->imageactor = vtkImageActor::New(); } CBrainVolView::~CBrainVolView() { this->ren->Delete(); this->iren->Delete(); this->renWin->Delete(); this->Reader->Delete(); this->mapper ->Delete(); this->actor ->Delete(); this->imageactor ->Delete(); } BOOL CBrainVolView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CBrainVolView drawing void CBrainVolView::OnDraw(CDC* pDC) { CBrainVolDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CBrainVolView printing BOOL CBrainVolView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CBrainVolView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CBrainVolView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CBrainVolView diagnostics #ifdef _DEBUG void CBrainVolView::AssertValid() const { CView::AssertValid(); } void CBrainVolView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CBrainVolDoc* CBrainVolView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBrainVolDoc))); return (CBrainVolDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CBrainVolView message handlers LRESULT CBrainVolView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { //case WM_PAINT: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_MOUSEMOVE: case WM_CHAR: //case WM_TIMER: if (this->iren->GetInitialized()) { return vtkHandleMessage2(this->m_hWnd, message, wParam, lParam, this->iren); } break; } // TODO: Add your specialized code here and/or call the base class return CView::WindowProc(message, wParam, lParam); } int CBrainVolView::OnFileOpen() { CVolDgl Voldata; this->Reader=vtkImageReader::New(); vtkImageViewer2 *viewer = vtkImageViewer2::New(); renWin->AddRenderer(ren); iren->SetRenderWindow(renWin); LoadDataAttrib(); Reader->SetFileName(VolData_FName); Reader->SetDataExtent (0,VolData_Width,0,VolData_Height,1,VolData_Images); Reader->SetDataByteOrderToLittleEndian(); Reader->SetDataScalarTypeToUnsignedShort(); Reader->SetDataSpacing(VolData_Xsize,VolData_Ysize,VolData_Zsize); vtkImageShiftScale *Shift= vtkImageShiftScale::New(); Shift->SetInput(Reader->GetOutput()); Shift->SetShift(0); Shift->SetScale(.6); Shift->SetOutputScalarTypeToUnsignedChar(); imageactor->SetInput(Shift->GetOutput()); ren->AddActor(imageactor); renWin->SetSize(400,400); //iren->InstallMessageProcOn(); iren->Initialize(); iren->Start(); return 1; } int CBrainVolView::LoadDataAttrib() { CVolDgl Voldata; if (Voldata.DoModal()==IDOK) { VolData_Width=Voldata.m_Width; VolData_Height=Voldata.m_Height; VolData_Images=Voldata.m_Images; VolData_Header=Voldata.m_Header; VolData_Xsize=Voldata.m_Xsize; VolData_Ysize=Voldata.m_Ysize; VolData_MinGray=Voldata.m_MinGray; VolData_MaxGray=Voldata.m_MaxGray; VolData_Zsize=Voldata.m_Zsize; VolData_FName=Voldata.m_FileName; } return 0; } void CBrainVolView::OnFileOpenstack() { // TODO: Add your command handler code here }