Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

VolumeDialog.cpp

Go to the documentation of this file.
00001 // VolumeDialog.cpp : implementation file
00002 //
00003 
00004 #include "stdafx.h"
00005 #include "3dvis.h"
00006 #include "VolumeDialog.h"
00007 
00008 
00009 #include "raycaster.h"
00010 extern Raycaster *raycaster;
00011 
00012 
00013 
00014 #ifndef XY
00015 #define XY 0
00016 #endif
00017 
00018 #ifndef XZ
00019 #define XZ 1
00020 #endif
00021 
00022 #ifndef YZ
00023 #define YZ 2
00024 #endif
00025 
00026 
00027 
00028 
00029 #ifdef _DEBUG
00030 #define new DEBUG_NEW
00031 #undef THIS_FILE
00032 static char THIS_FILE[] = __FILE__;
00033 #endif
00034 
00036 // CVolumeDialog dialog
00037 
00038 
00039 CVolumeDialog::CVolumeDialog(CWnd* pParent /*=NULL*/)
00040         : CDialog(CVolumeDialog::IDD, pParent) {
00041         //{{AFX_DATA_INIT(CVolumeDialog)
00042         m_dFHTreshold = 1500;
00043         m_fAmbient = 0.2f;
00044         m_fDiffuse = 0.2f;
00045         m_dHeight = 0;
00046         m_dWidth = 0;
00047         m_fZoom = 1.1f;
00048         m_dHighlight = 8.0f;
00049         m_dLX = 300;
00050         m_dLY = 300;
00051         m_dLZ = 300;
00052         m_fSpecular = 0.2f;
00053         m_bLight = FALSE;
00054         //}}AFX_DATA_INIT
00055 
00056 
00057         m_dRotateTo = NONE;
00058         m_dRenderPlane = XZ;
00059         m_dRenderMode = FH;
00060 
00061         //black
00062         m_BGColor = 0x00000000;
00063         m_dX = 92;
00064         m_dY = -300;
00065         m_dZ = 85;
00066 
00067         m_bfirst = true;
00068 }
00069 
00070 
00071 void CVolumeDialog::DoDataExchange(CDataExchange* pDX) {
00072         CDialog::DoDataExchange(pDX);
00073         //{{AFX_DATA_MAP(CVolumeDialog)
00074         DDX_Text(pDX, IDC_EDIT_FH_THRESHOLD, m_dFHTreshold);
00075         DDV_MinMaxInt(pDX, m_dFHTreshold, 0, 4095);
00076         DDX_Text(pDX, IDC_EDIT_AMBIENT, m_fAmbient);
00077         DDV_MinMaxFloat(pDX, m_fAmbient, 0.f, 1.f);
00078         DDX_Text(pDX, IDC_EDIT_DIFFUSE, m_fDiffuse);
00079         DDV_MinMaxFloat(pDX, m_fDiffuse, 0.f, 1.f);
00080         DDX_Text(pDX, IDC_EDIT_HEIGHT, m_dHeight);
00081         DDV_MinMaxInt(pDX, m_dHeight, 0, 1600);
00082         DDX_Text(pDX, IDC_EDIT_WIDTH, m_dWidth);
00083         DDV_MinMaxInt(pDX, m_dWidth, 0, 1800);
00084         DDX_Text(pDX, IDC_EDIT_ZOOM, m_fZoom);
00085         DDV_MinMaxFloat(pDX, m_fZoom, 0.1f, 10.f);
00086         DDX_Text(pDX, IDC_EDIT_X, m_dX);
00087         DDV_MinMaxInt(pDX, m_dX, -1000, 1000);
00088         DDX_Text(pDX, IDC_EDIT_Y, m_dY);
00089         DDV_MinMaxInt(pDX, m_dY, -1000, 1000);
00090         DDX_Text(pDX, IDC_EDIT_Z, m_dZ);
00091         DDV_MinMaxInt(pDX, m_dZ, -1000, 1000);
00092         DDX_Text(pDX, IDC_EDIT_HIGHLIGHT, m_dHighlight);
00093         DDX_Text(pDX, IDC_EDIT_LIGHTPOS_X, m_dLX);
00094         DDX_Text(pDX, IDC_EDIT_LIGHTPOS_Y, m_dLY);
00095         DDX_Text(pDX, IDC_EDIT_LIGHTPOS_Z, m_dLZ);
00096         DDX_Text(pDX, IDC_EDIT_SPECULAR, m_fSpecular);
00097         DDX_Check(pDX, IDC_CHECK_LIGHT, m_bLight);
00098         //}}AFX_DATA_MAP
00099 }
00100 
00101 
00102 BEGIN_MESSAGE_MAP(CVolumeDialog, CDialog)
00103         //{{AFX_MSG_MAP(CVolumeDialog)
00104         ON_WM_SHOWWINDOW()
00105         ON_BN_CLICKED(IDC_RADIO_FIRSTHIT, OnRadioFirsthit)
00106         ON_BN_CLICKED(IDC_RADIO_STANDARD, OnRadioStandard)
00107         ON_BN_CLICKED(IDC_RADIO_MIP, OnRadioMip)
00108         ON_BN_CLICKED(IDC_RADIO_VOL_XY, OnRadioVolXy)
00109         ON_BN_CLICKED(IDC_RADIO_VOL_XZ, OnRadioVolXz)
00110         ON_BN_CLICKED(IDC_RADIO_VOL_YZ, OnRadioVolYz)
00111         ON_EN_CHANGE(IDC_EDIT_FH_THRESHOLD, OnChangeEditFhThreshold)
00112         ON_EN_CHANGE(IDC_EDIT_ZOOM, OnChangeEditZoom)
00113         ON_EN_CHANGE(IDC_EDIT_HEIGHT, OnChangeEditHeight)
00114         ON_EN_CHANGE(IDC_EDIT_WIDTH, OnChangeEditWidth)
00115         ON_EN_CHANGE(IDC_EDIT_AMBIENT, OnChangeEditAmbient)
00116         ON_EN_CHANGE(IDC_EDIT_DIFFUSE, OnChangeEditDiffuse)
00117         ON_BN_CLICKED(IDC_BUTTON_BGCOLOR, OnButtonBgcolor)
00118         ON_WM_PAINT()
00119         ON_EN_CHANGE(IDC_EDIT_X, OnChangeEditX)
00120         ON_EN_CHANGE(IDC_EDIT_Y, OnChangeEditY)
00121         ON_EN_CHANGE(IDC_EDIT_Z, OnChangeEditZ)
00122         ON_BN_CLICKED(IDC_CHECK_LIGHT, OnCheckLight)
00123         ON_EN_CHANGE(IDC_EDIT_LIGHTPOS_X, OnChangeEditLightposX)
00124         ON_EN_CHANGE(IDC_EDIT_LIGHTPOS_Y, OnChangeEditLightposY)
00125         ON_EN_CHANGE(IDC_EDIT_LIGHTPOS_Z, OnChangeEditLightposZ)
00126         ON_EN_CHANGE(IDC_EDIT_HIGHLIGHT, OnChangeEditHighlight)
00127         ON_EN_CHANGE(IDC_EDIT_SPECULAR, OnChangeEditSpecular)
00128         ON_BN_CLICKED(IDC_RADIO_XRAY, OnRadioXray)
00129         //}}AFX_MSG_MAP
00130 END_MESSAGE_MAP()
00131 
00132 
00133 // CVolumeDialog message handlers
00134 
00135 void CVolumeDialog::OnShowWindow(BOOL bShow, UINT nStatus) {
00136         CDialog::OnShowWindow(bShow, nStatus);
00137         // TODO: Add your message handler code here
00138         if (!bShow || !raycaster)
00139                 return;
00140 
00141         
00142         int button;
00143         switch (m_dRenderPlane) {
00144                 case XY:
00145                         OnRadioVolXy();
00146                         button = IDC_RADIO_VOL_XY;
00147                         break;
00148                 case XZ:
00149                         OnRadioVolXz();
00150                         button = IDC_RADIO_VOL_XZ;
00151                         break;
00152                 case YZ:
00153                         OnRadioVolYz();
00154                         button = IDC_RADIO_VOL_YZ;
00155                         break;
00156                 default:
00157                         button = -1;
00158                         break;
00159         }
00160 
00161         if (button != -1)
00162                 ((CButton *)GetDlgItem(button))->SetCheck(1);
00163 
00164         
00165         switch (m_dRenderMode) {
00166                 case FH:
00167                         button = IDC_RADIO_FIRSTHIT;
00168                         break;
00169                 case STANDARD:
00170                         button = IDC_RADIO_STANDARD;
00171                         break;
00172                 default:
00173                         button = -1;
00174                         break;
00175         }
00176 
00177         if (button != -1)
00178                 ((CButton *)GetDlgItem(button))->SetCheck(1);
00179 
00180 
00181         
00182         CDC *cdc = (CDC *)this->GetDC();
00183         cdc->FillSolidRect(117, 380, 30, 22, m_BGColor);
00184 
00185 
00186         raycaster->GetScreenShotImage(m_dWidth, m_dHeight);
00187 
00188         UpdateData(FALSE);
00189 }
00190 
00191 
00192 void CVolumeDialog::OnRadioFirsthit() {
00193         raycaster->SetRendermode(FH);
00194         m_dRenderMode = FH;
00195 }
00196 
00197 void CVolumeDialog::OnRadioStandard() {
00198         raycaster->SetRendermode(STANDARD);
00199         m_dRenderMode = STANDARD;
00200 }
00201 
00202 
00203 void CVolumeDialog::OnRadioMip() {
00204         raycaster->SetRendermode(MI);
00205         m_dRenderMode = MI;
00206 }
00207 
00208 
00209 void CVolumeDialog::OnRadioXray() {
00210         raycaster->SetRendermode(XRAY);
00211         m_dRenderMode = XRAY;
00212 }
00213 
00214 
00215 void CVolumeDialog::OnRadioVolXy() {
00216         if (!raycaster)
00217                 return;
00218         
00219         if (m_bfirst) {
00220                 m_bfirst = false;
00221                 return;
00222         }
00223 
00224         m_dRotateTo = XY;
00225         m_dRotateTo = NONE;
00226         raycaster->SetViewingPlanePos(92, 128, -300);
00227 
00228         m_dX = 92;
00229         m_dY = 128;
00230         m_dZ = -300;
00231 
00232         UpdateData(FALSE);
00233 }
00234 
00235 void CVolumeDialog::OnRadioVolXz() {
00236         if (!raycaster)
00237                 return;
00238 
00239         m_dRotateTo = XZ;
00240         m_dRotateTo = NONE;
00241         raycaster->SetViewingPlanePos(92, -300, 85);
00242 
00243         m_dX = 92;
00244         m_dY = -300;
00245         m_dZ = 85;
00246 
00247         UpdateData(FALSE);
00248 }
00249 
00250 void CVolumeDialog::OnRadioVolYz() {
00251         if (!raycaster)
00252                 return;
00253 
00254         m_dRotateTo = YZ;
00255         m_dRotateTo = NONE;
00256         raycaster->SetViewingPlanePos(300, 128, 85);
00257 
00258         m_dX = 300;
00259         m_dY = 128;
00260         m_dZ = 85;
00261 
00262         UpdateData(FALSE);
00263 }
00264 
00265 void CVolumeDialog::OnChangeEditFhThreshold() {
00266         UpdateData(TRUE);
00267         raycaster->SetTreshold(m_dFHTreshold);
00268 }
00269 
00270 void CVolumeDialog::OnChangeEditZoom() {
00271         UpdateData(TRUE);
00272         raycaster->Zoom(m_fZoom);
00273 }
00274 
00275 void CVolumeDialog::OnChangeEditHeight() {
00276         UpdateData(TRUE);
00277         raycaster->SetHeight(m_dHeight);
00278 }
00279 
00280 void CVolumeDialog::OnChangeEditWidth() {
00281         UpdateData(TRUE);
00282         raycaster->SetWidth(m_dWidth);
00283 }
00284 
00285 void CVolumeDialog::OnChangeEditAmbient() {
00286         UpdateData(TRUE);
00287         raycaster->SetAmbient(m_fAmbient);
00288 }
00289 
00290 void CVolumeDialog::OnChangeEditDiffuse() {
00291         UpdateData(TRUE);
00292         raycaster->SetDiffuse(m_fDiffuse);
00293 }
00294 
00295 void CVolumeDialog::OnButtonBgcolor() {
00296         CColorDialog colDiag;
00297         if (colDiag.DoModal() != IDOK)
00298                 return;
00299 
00300         m_BGColor = colDiag.GetColor();
00301 
00302         CDC *cdc = (CDC *)this->GetDC();
00303         cdc->FillSolidRect(117, 380, 30, 22, m_BGColor);
00304 
00305         unsigned char col[3] = { m_BGColor & 0x000000FF,
00306                                                         (m_BGColor & 0x0000FF00) >> 8,
00307                                                         (m_BGColor & 0x00FF0000) >> 16 };
00308 
00309         raycaster->SetBackgroundColor(col[0], col[1], col[2]);
00310 }
00311 
00312 void CVolumeDialog::OnPaint() {
00313         CPaintDC dc(this); // device context for painting
00314         
00315         dc.FillSolidRect(117, 380, 30, 22, m_BGColor);
00316 }
00317 
00318 void CVolumeDialog::OnChangeEditX() {
00319         UpdateData(TRUE);
00320         raycaster->SetViewingPlanePos(m_dX, m_dY, m_dZ);
00321 }
00322 
00323 void CVolumeDialog::OnChangeEditY() {
00324         UpdateData(TRUE);
00325         raycaster->SetViewingPlanePos(m_dX, m_dY, m_dZ);
00326 }
00327 
00328 void CVolumeDialog::OnChangeEditZ() {
00329         UpdateData(TRUE);
00330         raycaster->SetViewingPlanePos(m_dX, m_dY, m_dZ);
00331 }
00332 
00333 #pragma warning ( push )
00334 #pragma warning (disable : 4800)
00335 
00336 void CVolumeDialog::OnCheckLight() {
00337         UpdateData(TRUE);
00338         raycaster->SetLight(m_bLight);
00339 }
00340 
00341 #pragma warning ( pop )
00342 
00343 
00344 void CVolumeDialog::OnChangeEditLightposX() {
00345         UpdateData(TRUE);
00346         raycaster->SetLightpos(VECTOR(m_dLX, m_dLY, m_dLZ));
00347 }
00348 
00349 void CVolumeDialog::OnChangeEditLightposY() {
00350         UpdateData(TRUE);
00351         raycaster->SetLightpos(VECTOR(m_dLX, m_dLY, m_dLZ));
00352 }
00353 
00354 void CVolumeDialog::OnChangeEditLightposZ() {
00355         UpdateData(TRUE);
00356         raycaster->SetLightpos(VECTOR(m_dLX, m_dLY, m_dLZ));
00357 }
00358 
00359 void CVolumeDialog::OnChangeEditHighlight() {
00360         UpdateData(TRUE);
00361         raycaster->SetHighlight(m_dHighlight);
00362 }
00363 
00364 void CVolumeDialog::OnChangeEditSpecular() {
00365         UpdateData(TRUE);
00366         raycaster->SetSpecular(m_fSpecular);
00367 }

Generated on Thu Jan 23 12:32:16 2003 by doxygen1.3-rc2