⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmwndlocalizer.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// FMWndLocalizer.cpp : implementation file//#include "stdafx.h"#include "fusion.h"#include "framemain.h"#include "FMWndVR.h"#include "dib.h"#include "FusionGlobal.h"#include "FusionDefine.h"#include "FusionEnum.h"#include "FMWndLocalizer.h"#include "Transform3DInfo.h"#include <math.h>// yeni#include "ipl.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif#define RGB_CROSS_HAIR RGB(0, 255, 0)#define COLOR_REF_NODULE RGB(255, 0, 0)#define COLOR_FLOAT_NODULE RGB(0, 0, 255)#define COLOR_MANUAL RGB(0, 255, 0)#define COLOR_CONTOUR_LINE RGB(255, 255, 255)#define COLOR_CONTOUR_POINT RGB(255, 255, 255)#define RADIUS 5CCriticalSection g_3DLocalizerAxialCS[3];CCriticalSection g_3DLocalizerCoronalCS[3];CCriticalSection g_3DLocalizerSagittalCS[3];int RxFMWndLocalizer::m_iZoomFactor = 100;int RxFMWndLocalizer::m_btnMode = BTN_NONE;int RxFMWndLocalizer::m_iInterleaving = 0;BOOL RxFMWndLocalizer::m_bAfterFusion = FALSE;extern void Zoom(BYTE *in_image, int in_width, int in_height, 				 unsigned char *out_image, int out_width, int out_height, int color);/////////////////////////////////////////////////////////////////////////////// RxFMWndLocalizerRxFMWndLocalizer::RxFMWndLocalizer(UINT iRFCNum) : RxFMWnd(iRFCNum){	m_iRFCNum = iRFCNum;	m_pnOriginalImage = NULL;	m_ptImgPanOffset = CPoint(0, 0);	m_pDib = NULL;	m_pLocalizerManager = NULL;	m_bUpdate = FALSE;	m_iWindowingLevel = 90;	m_iWindowingWidth = 190;	m_bNoduleDisplay = FALSE;	m_pMPRAgent = NULL;	MakeColorTable(5, 30, 100, 230);	m_nEdgeDilationFactor = 2;}RxFMWndLocalizer::~RxFMWndLocalizer(){	if(m_pDib)		delete m_pDib;		if(m_pnOriginalImage)		delete [] m_pnOriginalImage;}BEGIN_MESSAGE_MAP(RxFMWndLocalizer, RxFMWnd)	//{{AFX_MSG_MAP(RxFMWndLocalizer)	ON_WM_CREATE()	ON_WM_PAINT()	ON_WM_SIZE()	ON_WM_MOUSEMOVE()	ON_WM_LBUTTONDOWN()	ON_WM_SETCURSOR()	ON_WM_LBUTTONUP()	ON_WM_RBUTTONDOWN()	ON_WM_MOUSEWHEEL()	ON_WM_RBUTTONUP()	ON_COMMAND(IDTB_DISTANCE, OnNoduleDisplay)	ON_UPDATE_COMMAND_UI(IDTB_DISTANCE, OnUpdateNoduleDisplay)	ON_WM_KEYDOWN()	//}}AFX_MSG_MAP	ON_COMMAND(IDFM_NC_TAB_CHANGED,			OnNcTabChanged)	ON_COMMAND_RANGE(IDFM_LOCAL_BTN_PIXEL,	IDFM_LOCAL_BTN_EDGE,	OnLocalInterleaving)	ON_COMMAND(IDFM_LOCAL_BTN_MIN,			OnLocalMin)	ON_COMMAND(IDFM_LOCAL_BTN_MAX,			OnLocalMax)	ON_COMMAND(IDFM_LOCAL_BTN_RESTORE,		OnLocalRestore)	ON_COMMAND(IDFM_NC_SLIDER_CHANGING,		OnNcSliderChanging)	ON_COMMAND(IDFM_NC_SLIDER_CHANGED,		OnNcSliderChanged)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxFMWndLocalizer message handlersint RxFMWndLocalizer::OnCreate(LPCREATESTRUCT lpCreateStruct) {	if (RxFMWnd::OnCreate(lpCreateStruct) == -1)		return -1;	AddTab(_T("Axial"));	AddTab(_T("Coronal"));	AddTab(_T("Sagittal"));	WORD	wStyle = 0;	switch (GetDlgCtrlID())	{		case IDF_MAIN_WND_3DLOCALA_R:		case IDF_MAIN_WND_3DLOCALA_F:			SetCurTab(0, FALSE);			break;		case IDF_MAIN_WND_3DLOCALA_C:			SetCurTab(0, FALSE);			wStyle = RXCBS_VISIBLE;			break;		case IDF_MAIN_WND_3DLOCALC_R:		case IDF_MAIN_WND_3DLOCALC_F:		case IDF_MAIN_WND_3DLOCALC_C:			SetCurTab(1, FALSE);			break;		case IDF_MAIN_WND_3DLOCALS_R:		case IDF_MAIN_WND_3DLOCALS_F:		case IDF_MAIN_WND_3DLOCALS_C:			SetCurTab(2, FALSE);			break;	}	AddButton(IDFM_LOCAL_BTN_FRAME, IDB_FMWND_BTN_FRAME, wStyle|RXCBS_CHECKBOX|RXCBS_CHECK);	AddButton(IDFM_LOCAL_BTN_PIXEL, IDB_FMWND_BTN_PIXEL, wStyle|RXCBS_CHECKBOX|RXCBS_NORMAL);	AddButton(IDFM_LOCAL_BTN_EDGE,  IDB_FMWND_BTN_EDGE,  wStyle|RXCBS_CHECKBOX|RXCBS_NORMAL);	AddButton(IDFM_LOCAL_SPERATOR1, 0,					 wStyle|RXCBS_SEPARATOR);	AddButton(IDFM_LOCAL_BTN_RESTORE, IDB_FMWND_BTN_RESTORE, RXCBS_NORMAL);	AddButton(IDFM_LOCAL_BTN_MIN,     IDB_FMWND_BTN_MIN,     RXCBS_VISIBLE|RXCBS_NORMAL);	AddButton(IDFM_LOCAL_BTN_MAX,     IDB_FMWND_BTN_MAX,     RXCBS_VISIBLE|RXCBS_NORMAL);	return 0;}void RxFMWndLocalizer::OnSize(UINT nType, int cx, int cy) {	// update size buttons at caption	int		nFrame3DFMatrix = RxGetFrameMain()->Frame3DF_GetMatrix();	if(nFrame3DFMatrix == FRAME_MATRIX_12)	{		SetTabVisible(TRUE, FALSE);		SetBtnVisible(IDFM_LOCAL_BTN_RESTORE, FALSE, FALSE);		SetBtnVisible(IDFM_LOCAL_BTN_MIN, TRUE, FALSE);		SetBtnVisible(IDFM_LOCAL_BTN_MAX, FALSE, TRUE);		m_bSliderVert = FALSE;	}	else if(nFrame3DFMatrix == FRAME_MATRIX_32)	{		SetTabVisible(FALSE, FALSE);		if(cy < 50)		{			SetBtnVisible(IDFM_LOCAL_BTN_MIN, FALSE, FALSE);			SetBtnVisible(IDFM_LOCAL_BTN_RESTORE, TRUE, FALSE);			SetBtnVisible(IDFM_LOCAL_BTN_MAX, TRUE, TRUE);		}		else		{			SetBtnVisible(IDFM_LOCAL_BTN_MIN, TRUE, FALSE);			SetBtnVisible(IDFM_LOCAL_BTN_RESTORE, FALSE, FALSE);			SetBtnVisible(IDFM_LOCAL_BTN_MAX, TRUE, TRUE);		}		m_bSliderVert = TRUE;	}	m_iViewMode = GetDlgCtrlID();	switch (m_iViewMode)	{		case IDF_MAIN_WND_3DLOCALA_R:		case IDF_MAIN_WND_3DLOCALA_F:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizer[0] = CSize(cx, cy);			break;		case IDF_MAIN_WND_3DLOCALA_C:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizerCombine[0] = CSize(cx, cy);			break;		case IDF_MAIN_WND_3DLOCALC_R:		case IDF_MAIN_WND_3DLOCALC_F:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizer[1] = CSize(cx, cy);			break;		case IDF_MAIN_WND_3DLOCALC_C:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizerCombine[1] = CSize(cx, cy);			break;		case IDF_MAIN_WND_3DLOCALS_R:		case IDF_MAIN_WND_3DLOCALS_F:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizer[2] = CSize(cx, cy);			break;		case IDF_MAIN_WND_3DLOCALS_C:			RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE]->m_szLocalizerCombine[2] = CSize(cx, cy);			break;	}		m_szWindow = CSize(cx, cy);	m_iHIndex = cx >> 1;	m_iVIndex = cy >> 1;	m_ptImgCenter.x = cx >> 1;	m_ptImgCenter.y = cy >> 1;	RxFMWnd::OnSize(nType, cx, cy);}void RxFMWndLocalizer::OnActivateWnd(BOOL bActivate, CWnd *pCurWnd, CWnd *pOldWnd){	RxFMWnd::OnActivateWnd(bActivate, pCurWnd, pOldWnd);	if(bActivate)	{		RxFrameBottom	*pFrameBottom = RxGetFrameBottom();		if(m_iRFCNum != COMBINED_MODE)				pFrameBottom->EnableWindowing(-1, TRUE);		int		nTBCurMode = RxGetFrameMain()->GetTBCurMode();		if(nTBCurMode == BTN_MEASURE_DISTANCE || nTBCurMode == BTN_MEASURE_AREA ||			nTBCurMode == BTN_MEASURE_VOLUME)			RxGetFrameMain()->SetTBCurMode(BTN_ZOOM);	}}void RxFMWndLocalizer::InitLocalizer(){	m_bAfterFusion = FALSE;	m_iViewMode = GetDlgCtrlID();	switch(m_iRFCNum){	case REFERENCE_MODE:		m_pLocalizerManager = RxGetFrameMain()->m_pLocalizerManager[REFERENCE_MODE];		break;	case FLOAT_MODE:		m_pLocalizerManager = RxGetFrameMain()->m_pLocalizerManager[FLOAT_MODE];		break;	case COMBINED_MODE:		m_pLocalizerManager = RxGetFrameMain()->m_pLocalizerManager[COMBINED_MODE];		g_arrRefNodule.AddNewNodule(127.0 + 2.0/3.0, 372.0 + 2.0/3.0, 286.0 + 1.0/3.0);		g_arrFloatNodule.AddNewNodule(133.77777777778, 370.52991452991, 216.28571428571);	}		m_pMPRAgent = m_pLocalizerManager->GetMPRAgent();		switch (m_iViewMode) {	case IDF_MAIN_WND_3DLOCALA_R:	case IDF_MAIN_WND_3DLOCALA_F:	case IDF_MAIN_WND_3DLOCALA_C:		m_szRawImg = CSize(m_pMPRAgent->m_iVolX, m_pMPRAgent->m_iVolY);		break;	case IDF_MAIN_WND_3DLOCALC_R:	case IDF_MAIN_WND_3DLOCALC_F:	case IDF_MAIN_WND_3DLOCALC_C:		m_szRawImg = CSize(m_pMPRAgent->m_iVolY, m_pMPRAgent->m_iVolZ);		break;	case IDF_MAIN_WND_3DLOCALS_R:	case IDF_MAIN_WND_3DLOCALS_F:	case IDF_MAIN_WND_3DLOCALS_C:		m_szRawImg = CSize(m_pMPRAgent->m_iVolX, m_pMPRAgent->m_iVolZ);		break;	}}void RxFMWndLocalizer::ResampleBasicMPR(BOOL bRedraw){	if (m_pnOriginalImage)		delete[] m_pnOriginalImage;	CSingleLock lockDib(GetOwnCriticalSection());	lockDib.Lock();	switch (m_iViewMode) {	case IDF_MAIN_WND_3DLOCALA_R:	case IDF_MAIN_WND_3DLOCALA_F:	case IDF_MAIN_WND_3DLOCALA_C:		m_pnOriginalImage = m_pMPRAgent->GetAxialHighResImage();		break;	case IDF_MAIN_WND_3DLOCALC_R:	case IDF_MAIN_WND_3DLOCALC_F:	case IDF_MAIN_WND_3DLOCALC_C:		m_pnOriginalImage = m_pMPRAgent->GetCoronalHighResImage();		break;	case IDF_MAIN_WND_3DLOCALS_R:	case IDF_MAIN_WND_3DLOCALS_F:	case IDF_MAIN_WND_3DLOCALS_C:		m_pnOriginalImage = m_pMPRAgent->GetSagittalHighResImage();		break;	}	lockDib.Unlock();	if (bRedraw)		Redraw();}void RxFMWndLocalizer::Redraw(BOOL bUpdate){	m_bUpdate = FALSE;	if (m_szWindow.cx == 0 || m_szWindow.cy == 0)		return;	if (bUpdate && m_pnOriginalImage && (!m_bAfterFusion || (m_iRFCNum!=COMBINED_MODE))) {		CSingleLock lockDib(GetOwnCriticalSection());		lockDib.Lock();		if (m_pDib)			delete m_pDib;		unsigned char *pWindowingTable;		if (m_iRFCNum == COMBINED_MODE)			pWindowingTable = RxGetFrameTuning()->GetWindowingTable(0);		else			pWindowingTable = RxGetFrameTuning()->GetWindowingTable(m_iRFCNum);		//m_pDib = m_pLocalizerManager->GetColorImage(m_pnOriginalImage, m_szRawImg);		m_pDib = (RxDib*)RxRawImgToDIB(m_pnOriginalImage, m_szRawImg, m_szDIB, m_iZoomFactor, pWindowingTable, TRUE);//		TRACE(_T("\nWindowinglevel : %d, Windowingwidth : %d"), m_iWindowingLevel, m_iWindowingWidth);		lockDib.Unlock();		m_bUpdate = TRUE;	}	else if (m_bAfterFusion){		switch (m_iViewMode) {		case IDF_MAIN_WND_3DLOCALA_C:			m_pLocalizerManager->ResampleAfterFusion(RxLocalizerManager::RX_AXIAL);			break;		case IDF_MAIN_WND_3DLOCALC_C:			m_pLocalizerManager->ResampleAfterFusion(RxLocalizerManager::RX_CORONAL);			break;					case IDF_MAIN_WND_3DLOCALS_C:			m_pLocalizerManager->ResampleAfterFusion(RxLocalizerManager::RX_SAGITTAL);			break;		}		m_bUpdate = TRUE;	}	Invalidate();	UpdateWindow();}void RxFMWndLocalizer::OnNcTabChanged(){	RxGetFrameMain()->Frame3DF_Local_Exchange(GetMsgTab());}void RxFMWndLocalizer::OnLocalInterleaving(UINT nID){	switch(nID)	{		case IDFM_LOCAL_BTN_FRAME :			if (m_iInterleaving == 0)				return;			break;		case IDFM_LOCAL_BTN_PIXEL :			if (m_iInterleaving == 1)				return;			break;		case IDFM_LOCAL_BTN_EDGE :			if (m_iInterleaving == 2)				return;			break;	}	if(m_iInterleaving == 0)		SetBtnCheck(IDFM_LOCAL_BTN_FRAME, FALSE, TRUE);	else if(m_iInterleaving == 1)		SetBtnCheck(IDFM_LOCAL_BTN_PIXEL, FALSE, TRUE);	else if(m_iInterleaving == 2)		SetBtnCheck(IDFM_LOCAL_BTN_EDGE,  FALSE, TRUE);	switch(nID){		case IDFM_LOCAL_BTN_FRAME :			SetBtnCheck(IDFM_LOCAL_BTN_FRAME, TRUE, TRUE);			m_iInterleaving = 0;			break;		case IDFM_LOCAL_BTN_PIXEL :			SetBtnCheck(IDFM_LOCAL_BTN_PIXEL, TRUE, TRUE);			m_iInterleaving = 1;			break;		case IDFM_LOCAL_BTN_EDGE :			SetBtnCheck(IDFM_LOCAL_BTN_EDGE,  TRUE, TRUE);			m_iInterleaving = 2;			break;	}	m_pLocalizerManager->RedrawAll();}void RxFMWndLocalizer::OnLocalMin(){	RxFrameMain		*pFrameMain		= RxGetFrameMain();	int				nFrame3DFMatrix = pFrameMain->Frame3DF_GetMatrix();	if(nFrame3DFMatrix == FRAME_MATRIX_12)		pFrameMain->Frame3DF_Local_Nor();	else if(nFrame3DFMatrix == FRAME_MATRIX_32)	{		int		nIndex, nID = GetDlgCtrlID();		if(nID == IDF_MAIN_WND_3DLOCALA_R || nID == IDF_MAIN_WND_3DLOCALA_F || nID == IDF_MAIN_WND_3DLOCALA_C){			nIndex = 0;		}		else if(nID == IDF_MAIN_WND_3DLOCALC_R || nID == IDF_MAIN_WND_3DLOCALC_F || nID == IDF_MAIN_WND_3DLOCALC_C){			nIndex = 1;		}		else if(nID == IDF_MAIN_WND_3DLOCALS_R || nID == IDF_MAIN_WND_3DLOCALS_F || nID == IDF_MAIN_WND_3DLOCALS_C){			nIndex = 2;		}		pFrameMain->Frame3DF_Local_Min(nIndex);	}	m_pLocalizerManager->Reset();}void RxFMWndLocalizer::OnLocalMax(){	int		nIndex, nID = GetDlgCtrlID();	if(nID == IDF_MAIN_WND_3DLOCALA_R || nID == IDF_MAIN_WND_3DLOCALA_F || nID == IDF_MAIN_WND_3DLOCALA_C){		nIndex = 0;		RxGetFrameMain()->Frame3DF_Local_Max(nIndex);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -