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

📄 matlabimportdlg.h

📁 图像处理的压缩算法
💻 H
📖 第 1 页 / 共 2 页
字号:
		if(!strRet.IsEmpty())
			return 0;	
			
		int nRet = AddMatlabDoubleArray(wks, strMatLabVarName, bReplaceCurrent);
		strExecute.Format("%s=%s;"
		                  "clear %s;",strMatLabVarName,STR_TEMP_ARRAY_NAME,STR_TEMP_ARRAY_NAME);
		strRet = m_mlObj.Execute(strExecute);

		return nRet;		
	}
	//------- end Soapy 8/12/03

	
	BOOL	GetMatlabComplexMatrices( StringArray &asNames, string& strResult )
	{
		for(int ii = 0; ii < asNames.GetSize(); ii++)
		{
			MatrixLayer mlay_r, mlay_i;
			bool bNewR= get_Origin_matrix(asNames[ii]+"r", mlay_r);
			bool bNewI= get_Origin_matrix(asNames[ii]+"i", mlay_i);
			
			Matrix<double> mr(mlay_r), mi(mlay_i);
			if(!m_mlObj.GetMatrix(asNames[ii], &mr, &mi))
			{
				if(bNewR)
					mlay_r.Destroy();
				if(bNewI)
					mlay_i.Destroy();
				
				strResult += asNames[ii] + " ";
			}
		}
		if(!strResult.IsEmpty())
			strResult += ": matrices not found in Matlab!";
		return TRUE;
	}
	//end this three functions are the CPY code from MatlabConsole.c
	////////////////////////////////////////////////////////////////
	
	
	int	FillTheGridWithData()
	{
		int iRet = 0;
		string	strRet = m_mlObj.Execute("whos;");
	
		_DBSTR( strRet )
	
		if( -1 == strRet.Find("???") )
		{
			//use strRet's whos output to get the list of variables:
			//  Name                           Size         Bytes  Class
			//
			//  b                              1x1             16  double array (complex)		
			//  t                              1x1            478  struct array
			//  very_very_very_long_name       1x5             10  char array
			//  w                              2x3            600  cell array
			//  x                              2x3             48  double array
			//  y                              2x3             48  double array
			//  z                              1x5             10  char array
			//
			//Grand total is 54 elements using 1194 bytes
	
			//Object vsFlx = VSFLEX_GRID;
			//Object vsFlx = m_vsFlex;
			
			m_vsFlex.SetupTheGrid();	//delete all but headers
	
			if ( strRet.IsEmpty() )
				return iRet;
		
			StringArray strLines;
			int lll = strRet.GetTokens( strLines, '\n' );
			//for(int ln = 0; ln < strLines.GetSize(); ln++)
			//the very first line is the header, the second is white
			//the last two lines are white and summary respectively
			//can be ASSERT-ed here
			for ( int ln = MATLAB_OUTPUT_SKIP_LINES; ln < strLines.GetSize() - MATLAB_OUTPUT_SKIP_LINES; ln++ )
			{
				string strLine = strLines[ln];
			
				StringArray strTokens;
				int nInLine = strLine.GetTokens( strTokens );
	
				if ( MATLAB_OUTPUT_NUMTOKENS > nInLine )	//4 categories: Name,Size,Bytes,Class
					continue;
	
				string strRow = strTokens[0] + "\t" +
								strTokens[1] + "\t" +
								strTokens[2] + "\t" +
								strTokens[3];
				
				if ( MATLAB_OUTPUT_NUMTOKENS + 1 == nInLine )
				{
					//handle the last token that can contain more words better here  "double array (complex)"
					strRow += " " + strTokens[4];
				}
	
				if ( MATLAB_OUTPUT_NUMTOKENS + 2 == nInLine )
				{
					//handle the last token that can contain more words better here  "double array (complex)"
					strRow += " " + strTokens[5];
				}
	
				if ( MATLAB_OUTPUT_NUMTOKENS + 2 < nInLine )
				{
					_DBSTR("DVT Matlab whos: more than 3 tokens in Class")
					continue;
				}
	
				m_vsFlex.AddItem( strRow );
			}
		
		    // expand outline, resize to fit, collapse outline
		    m_vsFlex.ReDraw();
		    
		}
		else
		{
			iRet = -2;
			//try to clean anyways
		}
			
		return iRet;
	}
	
	
	int GetMatlabVarType(long nR)
	{
		string strType = m_vsFlex.GetCell( nR, MATLAB_OUTPUT_TYPE_COL );
		
		if(strType.CompareNoCase("double array") == 0)
			return MATLAB_VAR_DOUBLE_ARRAY;
		else if(strType.CompareNoCase("double complex") == 0)
			return MATLAB_VAR_COMPLEX_ARRAY;
		else if(strType.Find("int") != -1)
			return MATLAB_VAR_INTEGER_ARRAY;
		else if(strType.Find("char") != -1)
			return MATLAB_VAR_CHAR_ARRAY;
		else if(strType.CompareNoCase("single array") == 0)
			return MATLAB_VAR_SINGLE_ARRAY;

		return MATLAB_VAR_UNKNOWN;
	}
	
	
	BOOL OnImportAsMatrices(Control ctrl)
	{
		StringArray	asNames;
		StringArray	asNamesC;
		StringArray asNamesSI;
		int nRowsSelected = m_vsFlex.SelectedRows();
				
	    for( int ii=0; ii < nRowsSelected; ii++ )
	    {
	    	string strOut(m_vsFlex.SelectedRow(ii));
			_DBSTR( strOut )
			long nR = m_vsFlex.SelectedRow(ii);
			int nVarType = GetMatlabVarType(nR);
			if(nVarType == MATLAB_VAR_DOUBLE_ARRAY)
				asNames.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
			else if(nVarType == MATLAB_VAR_COMPLEX_ARRAY)
				asNamesC.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
			else if((nVarType == MATLAB_VAR_INTEGER_ARRAY)||
				(nVarType == MATLAB_VAR_SINGLE_ARRAY)||
				(nVarType == MATLAB_VAR_CHAR_ARRAY))
				asNamesSI.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
			
			
	    }    
	    
		string		strResult;
		
		GetMatlabRealMatrices( asNames, strResult );
		
		GetMatlabComplexMatrices( asNamesC, strResult );
		
		GetMatlabOtherNumMatrices( asNamesSI, strResult );
	
		return TRUE;	//for now
	}
	
	
	
	// return number of cols added
	int AddMatlabDoubleArray(Worksheet& wks, string strMatLabVarName, bool bReplaceCurrent)
	{
		MatrixLayer mlTemp;
		if(!mlTemp.Create(NULL, CREATE_HIDDEN))
			return 0;
		
		Matrix<double> mm(mlTemp);
		///Soapy 11/20/03 7.0753   DELETE_TEMPORARY_MATRIX
		/*
		if(!m_mlObj.GetMatrix(strMatLabVarName, &mm))
		{			
			mlTemp.Destroy();  ///Soapy 11/12/03 7.0749 	DELETE_HIDDEN_MATRIX_WHEN_IMPORT_FAIL
			return 0;
		}
		*/
		int nRet=0;
		if(m_mlObj.GetMatrix(strMatLabVarName, &mm))
		{	
			nRet = MatToWks(mm, wks, strMatLabVarName);
		}
		
		mlTemp.Destroy();  
		return nRet;
	}	
	
	// return number of cols added
	int AddMatlabComplexArray(Worksheet& wks, string strMatLabVarName)
	{
		//MatrixLayer mlTemp;
		//if(!mlTemp.Create(NULL, CREATE_HIDDEN))
		//	return 0;
		// more codes goes here
		printf("%s: complex matrix not supported\n");
		return 0;
	}
	
			
	BOOL OnImportAsSingleWks(Control ctrl)
	{
		int nRowsSelected = m_vsFlex.SelectedRows();
		
		bool	bWksCreated = false;
		
		Worksheet wksTemp;
		if(m_bUpdateCols)
			wksTemp.Attach(MATLAB_WKS_NAME);
		
		if(!wksTemp.IsValid())
		{
			//CPY 1/29/03 SHOW_WKS_WHEN_IMPORT
			//if(!wksTemp.Create(NULL, CREATE_HIDDEN))
			if(!wksTemp.Create())
			{
				_DBSTR("Creating worksheet failed")
				return FALSE;
			}
			bWksCreated = true;
		}
		if(bWksCreated)
		{
			while(wksTemp.DeleteCol(0))	 // Remove all columns in worksheet
				;
		}
		
		int nNameCount = 0;
		
		for( int ii = 0; ii < nRowsSelected; ii++ )
		{
			long nR = m_vsFlex.SelectedRow(ii);
			int nVarType = GetMatlabVarType(nR);
			string strVarName = m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL );
			
			if(nVarType == MATLAB_VAR_DOUBLE_ARRAY)				
				nNameCount += AddMatlabDoubleArray(wksTemp, strVarName, m_bUpdateCols);
			else if(nVarType == MATLAB_VAR_COMPLEX_ARRAY)
				nNameCount += AddMatlabComplexArray(wksTemp, strVarName);
			else if((nVarType == MATLAB_VAR_SINGLE_ARRAY)||
				(nVarType == MATLAB_VAR_INTEGER_ARRAY) || 
				(nVarType == MATLAB_VAR_CHAR_ARRAY))
				nNameCount += AddMatlabNumArray(wksTemp, strVarName, m_bUpdateCols);
			else
			{
				printf("%d: %s -- Data type not supported\n", strVarName);
			}
		}
		//---- CPY 1/29/03 SHOW_WKS_WHEN_IMPORT
		/*
		if(nNameCount > 0 && bWksCreated)
		{
			wksTemp.GetPage().Rename(MATLAB_WKS_NAME);
			wksTemp.GetPage().SetShow();
			return TRUE;
		}
		*/
		if(bWksCreated)
		{
			if(0==nNameCount)
				wksTemp.Destroy();
			else
				wksTemp.GetPage().Rename(MATLAB_WKS_NAME);
		}
		//----			
			
		return nNameCount > 0? TRUE : FALSE;	
	}
	
	BOOL OnUpdateWorkSpace(Control ctrl)
	{
		if(m_mlObj)
		{
			FillTheGridWithData();
		}
		return TRUE;
	}
	

	/*
	BOOL OnCheckKeepRunning(Control ctrl)
	{
		if(m_mlObj)
		{
			m_bKeepMatlabAlive = !m_bKeepMatlabAlive;
			m_mlObj.KeepMatlabRunning = m_bKeepMatlabAlive;
		}
		return TRUE;
	}
	*/
	
	
	
private:
	
	int m_nTimerID;
	
	bool 	m_bRestoreWorkspace;
	
	Matlab m_mlObj;
	
	Button m_btnUpdate;
	//CP IDC_MATLAB_KEEP_RUNNING
	/*
	Button m_chkKeepRunning;
	BOOL	m_bKeepMatlabAlive;	
	*/
	
	bool	m_bSingle;
	
};

#endif //_MATLAB_IMPORTDLG_H
	

⌨️ 快捷键说明

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