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();//关闭文件
}
}
}