📄 fmwndlocalizer.cpp
字号:
break; } return ptImg;}CPoint RxFMWndLocalizer::Vol2D2Img(RxPoint2D<double> vptVol){ CPoint ptImg; double fZoom = m_iZoomFactor / 100.; switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: case IDF_MAIN_WND_3DLOCALA_F: case IDF_MAIN_WND_3DLOCALA_C: ptImg.x = ROUNDOFF((vptVol.x - m_szRawImg.cx / 2.) * fZoom + m_ptImgPanOffset.x + m_ptImgCenter.x); ptImg.y = ROUNDOFF((vptVol.y - m_szRawImg.cy / 2.) * fZoom + m_ptImgPanOffset.y + m_ptImgCenter.y); break; case IDF_MAIN_WND_3DLOCALS_R: case IDF_MAIN_WND_3DLOCALS_F: case IDF_MAIN_WND_3DLOCALS_C: ptImg.x = ROUNDOFF((vptVol.x - m_szRawImg.cx / 2.) * fZoom + m_ptImgPanOffset.x + m_ptImgCenter.x); ptImg.y = ROUNDOFF((m_pMPRAgent->m_iVolZ - 1 - vptVol.y - m_szRawImg.cy / 2.) * fZoom + m_ptImgPanOffset.y + m_ptImgCenter.y); break; case IDF_MAIN_WND_3DLOCALC_R: case IDF_MAIN_WND_3DLOCALC_F: case IDF_MAIN_WND_3DLOCALC_C: ptImg.x = ROUNDOFF((vptVol.x - m_szRawImg.cx / 2.) * fZoom + m_ptImgPanOffset.x + m_ptImgCenter.x); ptImg.y = ROUNDOFF((m_pMPRAgent->m_iVolZ - 1 - vptVol.y - m_szRawImg.cy / 2.) * fZoom + m_ptImgPanOffset.y + m_ptImgCenter.y); break; } return ptImg;}void RxFMWndLocalizer::CheckCrosslineRange(CPoint& point){ if (point.x < 2) point.x = 1; if (point.x > m_szWindow.cx - 2) point.x = m_szWindow.cx - 2; if (point.y < 2) point.y = 1; if (point.y > m_szWindow.cy - 2) point.y = m_szWindow.cy - 2;}void RxFMWndLocalizer::AdjustVolIndexFromHIndex(){ double fZoom = m_iZoomFactor / 100.; double fIndex; switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: case IDF_MAIN_WND_3DLOCALA_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALA_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_X); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALS_R: case IDF_MAIN_WND_3DLOCALS_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y); break; case IDF_MAIN_WND_3DLOCALS_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Y); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y); break; case IDF_MAIN_WND_3DLOCALC_R: case IDF_MAIN_WND_3DLOCALC_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALC_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_X); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_X); break; }}void RxFMWndLocalizer::AdjustVolIndexFromVIndex(){ double fZoom = m_iZoomFactor / 100.; double fIndex; switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: case IDF_MAIN_WND_3DLOCALA_F: fIndex = (m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y); break; case IDF_MAIN_WND_3DLOCALA_C: fIndex = (m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Y); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y); break; case IDF_MAIN_WND_3DLOCALC_R: case IDF_MAIN_WND_3DLOCALC_F: fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z); break; case IDF_MAIN_WND_3DLOCALC_C: fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Z); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z); break; case IDF_MAIN_WND_3DLOCALS_R: case IDF_MAIN_WND_3DLOCALS_F: fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z); break; case IDF_MAIN_WND_3DLOCALS_C: fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); if(m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Z); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z); break; }}void RxFMWndLocalizer::AdjustVolIndexFromBothHVIndex(){ double fZoom = m_iZoomFactor / 100.; double fIndex; switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: case IDF_MAIN_WND_3DLOCALA_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); fIndex = (m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALA_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); fIndex = (m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_X); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALC_R: case IDF_MAIN_WND_3DLOCALC_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_Z); break; case IDF_MAIN_WND_3DLOCALC_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolY) fIndex = m_pMPRAgent->m_iVolY - 1; m_pMPRAgent->SetCoronalIndex(fIndex); fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ - 1; m_pMPRAgent->SetAxialIndex(fIndex); if (m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_Z); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Y | RxLocalizerManager::RX_MPR_Z); break; case IDF_MAIN_WND_3DLOCALS_R: case IDF_MAIN_WND_3DLOCALS_F: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ; m_pMPRAgent->SetAxialIndex(fIndex); m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z | RxLocalizerManager::RX_MPR_X); break; case IDF_MAIN_WND_3DLOCALS_C: fIndex = (m_iHIndex - m_ptImgPanOffset.x - m_ptImgCenter.x) / fZoom + m_szRawImg.cx / 2.; if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolX) fIndex = m_pMPRAgent->m_iVolX - 1; m_pMPRAgent->SetSagittalIndex(fIndex); fIndex = m_pMPRAgent->m_iVolZ - 1 - ((m_iVIndex - m_ptImgPanOffset.y - m_ptImgCenter.y) / fZoom + m_szRawImg.cy / 2.); if (fIndex < 0) fIndex = 0; if (fIndex >= m_pMPRAgent->m_iVolZ) fIndex = m_pMPRAgent->m_iVolZ; m_pMPRAgent->SetAxialIndex(fIndex); if(m_bAfterFusion) m_pLocalizerManager->ChangeXYZIndexForFusion(RxLocalizerManager::RX_MPR_Z | RxLocalizerManager::RX_MPR_X); else m_pLocalizerManager->ChangeXYZIndex(RxLocalizerManager::RX_MPR_Z | RxLocalizerManager::RX_MPR_X); break; }}int RxFMWndLocalizer::AdjustMouseOffset4Zoom(int iOffset){ int iRet; if (abs(iOffset) < MOUSE_OFFSET_THRESHOLD) iRet = iOffset; else { if (iOffset < 0) iRet = -MOUSE_OFFSET_THRESHOLD + iOffset / MOUSE_OFFSET_THRESHOLD; else iRet = MOUSE_OFFSET_THRESHOLD + iOffset / MOUSE_OFFSET_THRESHOLD; } return iRet;}int RxFMWndLocalizer::CalcZoomFactor(){ int iZoomFactor, iIndex; switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: case IDF_MAIN_WND_3DLOCALA_F: case IDF_MAIN_WND_3DLOCALA_C: iIndex = 0; break; case IDF_MAIN_WND_3DLOCALC_R: case IDF_MAIN_WND_3DLOCALC_F: case IDF_MAIN_WND_3DLOCALC_C: iIndex = 1; break; case IDF_MAIN_WND_3DLOCALS_R: case IDF_MAIN_WND_3DLOCALS_F: case IDF_MAIN_WND_3DLOCALS_C: iIndex = 2; break; } if (m_szWindow.cx == 0 || m_szWindow.cy == 0) return 100; iZoomFactor = __min(int(100. * m_szWindow.cy / m_szRawImg.cy), int(100. * m_szWindow.cx / m_szRawImg.cx)); return iZoomFactor;}void RxFMWndLocalizer::UpdateByZoomChange(int iOldZF, int iNewZF){ CPoint ptCenter; RxPoint2D<double> vptCenter; ptCenter.x = m_szWindow.cx / 2; ptCenter.y = m_szWindow.cy / 2; m_iZoomFactor = iOldZF; vptCenter = Img2Vol2D(ptCenter); m_iZoomFactor = iNewZF; // pan搬沥 ptCenter = Vol2D2Img(vptCenter); m_ptImgPanOffset.x += (m_szWindow.cx / 2) - ptCenter.x; m_ptImgPanOffset.y += (m_szWindow.cy / 2) - ptCenter.y;}CCriticalSection* RxFMWndLocalizer::GetOwnCriticalSection(){ CCriticalSection* pcsRet; m_iViewMode = GetDlgCtrlID(); switch (m_iViewMode) { case IDF_MAIN_WND_3DLOCALA_R: pcsRet = &g_3DLocalizerAxialCS[0]; break; case IDF_MAIN_WND_3DLOCALC_R: pcsRet = &g_3DLocalizerCoronalCS[0]; break; case IDF_MAIN_WND_3DLOCALS_R: pcsRet = &g_3DLocalizerSagittalCS[0]; break; case IDF_MAIN_WND_3DLOCALA_F: pcsRet = &g_3DLocalizerAxialCS[1]; break; case IDF_MAIN_WND_3DLOCALC_F: pcsRet = &g_3DLocalizerCoronalCS[1]; break; case IDF_MAIN_WND_3DLOCALS_F: pcsRet = &g_3DLocalizerSagittalCS[1]; break; case IDF_MAIN_WND_3DLOCALA_C: pcsRet = &g_3DLocalizerAxialCS[2]; break; case IDF_MAIN_WND_3DLOCALC_C: pcsRet = &g_3DLocalizerCoronalCS[2]; break; case IDF_MAIN_WND_3DLOCALS_C: pcsRet = &g_3DLocalizerSagittalCS[2]; break; } return pcsRet;}void RxFMWndLocalizer::RedrawForFusion(RxDib *pDib){ m_bAfterFusion = TRUE; m_bUpdate = TR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -