www.pudn.com > QQandSample.rar > RotationDoc.cpp


// RotationDoc.cpp : implementation of the CRotationDoc class 
// 
 
#include "stdafx.h" 
#include "Rotation.h" 
 
#include "RotationDoc.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CRotationDoc 
 
IMPLEMENT_DYNCREATE(CRotationDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CRotationDoc, CDocument) 
	//{{AFX_MSG_MAP(CRotationDoc) 
	ON_COMMAND(ID_FILE_SAVE, OnFileSave) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRotationDoc construction/destruction 
 
CRotationDoc::CRotationDoc() 
{ 
	// TODO: add one-time construction code here 
	m_signal.data=NULL; 
	m_psignal.data=NULL; 
	m_bFileOpen=false; 
 
} 
 
CRotationDoc::~CRotationDoc() 
{ 
		if(m_signal.data!=NULL) 
			delete [] m_signal.data; 
		if(m_psignal.data!=NULL) 
			delete [] m_psignal.data; 
} 
 
BOOL CRotationDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CRotationDoc serialization 
 
void CRotationDoc::Serialize(CArchive&ar) 
{ 
	 
	//写数据:ar<——数组,数据传给ar进行序列化 
	//读数据:ar--->数组。ar传给数组 
	if (ar.IsStoring()) 
	{ 
		//ar<<(long)m_signal.a; 
	//	ar<<(long)m_signal.f; 
		ar<<(float)m_signal.fs; 
	//	ar<<(float)m_signal.ph; 
	//	m_signal.n=256*1024; 
		ar<<(long)m_signal.n; 
		 
		for(int i=0;i>m_ChanNum;//先读通道数 
 
		ar>>m_SegDataLen;//读第二各参数 :数据块长度 
		 
		float ftmp;//共用类型 
		// 读第三个参数:采样频率 
		ar>>ftmp; 
        m_SampFreq = ftmp; 
		//读第四个参数:最大阶比 
		ar>>ftmp; 
		m_MaxOrder = ftmp; 
		//读第五个参数:最大转速 
		ar>>ftmp; 
		m_MaxRspd = ftmp; 
		//读第六个参数:原始脉冲序列的角度间隔 
		m_DeltAngle=0.0f; 
		ar>>ftmp; 
	    m_DeltAngle = ftmp;// 原始脉冲序列的角度间隔(单位:度) 
         
		//初始化通道1 
        if(m_signal.data!=NULL) //若指针非空,即里面有数据 
		{ 
		  delete [] m_signal.data;/// 删除数组中的数据 
		  m_signal.data=NULL;//给数据实部赋零指针 
		} 
        //m_signal.a=1; 
        m_signal.fs=m_SampFreq; 
		m_signal.n=m_SegDataLen; 
		m_signal.data=new double[m_signal.n];//注意指针的动态分配 
		 
		//初始化通道2 
        if(m_psignal.data!=NULL)  
		{ 
		  delete [] m_psignal.data; 
		  m_psignal.data=NULL; 
		} 
         
        m_psignal.fs=m_SampFreq; 
		m_psignal.n=m_SegDataLen; 
		m_psignal.data=new double[m_psignal.n];//注意指针的动态分配 
		 
		//读通道1 
		for(long i=0;i>ftmp; 
			m_signal.data[i]=ftmp; 
		} 
		//读通道2 
        for(long m=0;m>ftmp; 
			m_psignal.data[m]=ftmp; 
		} 
		m_OpenFlag=TRUE; 
		//读数据完毕 
 	} 
//		double ttm; 
//		 
//		//>>m_signal.a; 
//		//>>m_signal.f; 
//		ar>>m_signal.fs; 
//		//ar>>m_signal.ph; 
//		ar>>m_signal.n; 
//		 
//		if(m_signal.data!=NULL) 
//		{ 
//			delete [] m_signal.data; 
//			m_signal.data=NULL; 
//		} 
//		m_signal.data= new double [m_signal.n]; 
//		for(int i=0;i>ttm; 
//			m_signal.data[i]=ttm; 
//			 
//		}	 
//		m_OpenFlag=true; 
//	 
//	} 
	 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRotationDoc diagnostics 
 
#ifdef _DEBUG 
void CRotationDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CRotationDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CRotationDoc commands 
 
void CRotationDoc::BeganSample() 
{ 
//	m_signal.a=m_SampleDoc.m_A; 
//	m_signal.f=m_SampleDoc.m_HZ; 
	m_signal.fs=m_SampleDoc.m_sample; 
	m_signal.n=m_SampleDoc.m_long*1024; 
//	m_signal.ph=m_SampleDoc.m_PH; 
	if(m_signal.data!=NULL) 
		delete [] m_signal.data; 
	m_signal.data= new double [m_signal.n]; 
	m_caculate.SinTest(&m_signal,0); 
 
} 
 
 
void CRotationDoc::OnFileSave()  
{ 
	 
	CFileDialog m_FileDlg(FALSE,NULL,"*.dat",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 
							  "数据文件(*.dat)|*.dat||",NULL); 
	  
							   
	if(m_FileDlg.DoModal()==IDOK) 
	{ 
	 
	m_pathname=m_FileDlg.GetPathName(); 
	m_filename=m_FileDlg.GetFileName(); 
	CFile File; 
	if(!File.Open(m_pathname,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)) 
	{ 
		AfxMessageBox("不能打开文件"); 
	} 
	else 
	{ 
		CArchive ar(&File,CArchive::store); 
		 
		Serialize(ar);	 
		 
		ar.Flush();//清空文件数据 
		ar.Close();//关闭序列化 
		File.Close();//关闭文件 
		 
	} 
	}	 
	 
	 
}