📄 finiteelecdoc.cpp
字号:
// FiniteElecDoc.cpp : implementation of the CFiniteElecDoc class
//
#include "stdafx.h"
#include "FiniteElec.h"
#include "FiniteElecDoc.h"
#include "Example.h"
#include "MainFrm.h"
#include "SetMesh.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFiniteElecDoc
IMPLEMENT_DYNCREATE(CFiniteElecDoc, CDocument)
BEGIN_MESSAGE_MAP(CFiniteElecDoc, CDocument)
//{{AFX_MSG_MAP(CFiniteElecDoc)
ON_COMMAND(ID_MODAL_ONE, OnModalOne)
ON_COMMAND(ID_MODAL_TWO, OnModalTwo)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_MODAL_SETMESH, OnModalSetmesh)
ON_COMMAND(ID_MODAL_USER, OnModalUser)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_MODEL_SOLVE, OnModelSolve)
ON_COMMAND(ID_FILE_SAVEMODEL, OnFileSavemodel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFiniteElecDoc construction/destruction
CFiniteElecDoc::CFiniteElecDoc()
{
// TODO: add one-time construction code here
m_isLoaded=false;
m_savetype=1;
m_modeltype=100;
}
CFiniteElecDoc::~CFiniteElecDoc()
{
}
BOOL CFiniteElecDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_strOutputFileName=_T("");//数据体文件名=全路径名
m_strInputFileName=_T(""); //分析结果文件名
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
m_structure.Init();//初始化模型数据
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CFiniteElecDoc serialization
void CFiniteElecDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
if(m_savetype==1)
{
m_structure.m_model.Serialize(ar);
}
else if(m_savetype==0)//输出运算分析结果
{
m_structure.Serialize(ar);
m_savetype=1;
}
}
else
{
//装载数据
m_structure.Serialize(ar);
if(m_structure.m_done)
{
m_isLoaded=1;
}
else
{
m_isLoaded=0;
}
}
// ((CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView()->OnInitialUpdate();
}
/////////////////////////////////////////////////////////////////////////////
// CFiniteElecDoc diagnostics
#ifdef _DEBUG
void CFiniteElecDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CFiniteElecDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFiniteElecDoc commands
void CFiniteElecDoc::OnModalOne()
{
OnNewDocument();
m_modeltype=1;
m_structure.m_model.CreateModelOne();
m_structure.GetDataFromModal();//生成实例数据体,将进行运算
// OnFileSaveAs();
m_isLoaded=1;//数据体成功加载
SetModifiedFlag(TRUE);
// this->SetTitle(m_structure.m_strExamName);
AfxMessageBox(m_structure.m_strExamName+"->已经成功生成");
// UpdateAllViews(NULL);//刷新视图显示结果
((CMainFrame*)(AfxGetMainWnd()))->OnViewInputgraph();//转到模型显示
}
/////////////////////////////////////////////////////
////
void CFiniteElecDoc::OnModalTwo()
{
OnNewDocument();
m_modeltype=2;
m_structure.m_model.CreateModelTwo();//生成数据
m_structure.GetDataFromModal();//生成实例数据体,将进行运算
// OnFileSaveAs();
m_isLoaded=1;//数据体成功加载
SetModifiedFlag(TRUE);
// this->SetTitle(m_structure.m_strExamName);
AfxMessageBox(m_structure.m_strExamName+"->已经成功生成");
// UpdateAllViews(NULL);//刷新视图显示结果
((CMainFrame*)(AfxGetMainWnd()))->OnViewInputgraph();//转到模型显示
}
///////////////////////////////////////////////
//设置网格剖分精度
void CFiniteElecDoc::OnModalSetmesh()
{
if(m_structure.m_model.m_setMeshDlg.DoModal())
{
m_structure.m_model.SetMesh();
}
}
/////////////////////////////////////////////////
//------------显示建模对话框体--------------
void CFiniteElecDoc::OnModalUser()
{
//无模态对话框
/*if(m_structure.m_model.m_defineModelDlg.GetSafeHwnd()==0)
m_structure.m_model.m_defineModelDlg.Create(IDD_DIALOG_DEFINE);
m_structure.m_model.m_defineModelDlg.ShowWindow(SW_SHOW);*/
//如果有例子存在就新建,否则不建立。这样能保持自定义矩形区域。
// if(m_modeltype<100)
OnNewDocument();//新建操作不会清空对话内容。所以可能保持数据 。
m_modeltype=100;
if(m_structure.m_model.m_defineModelDlg.DoModal()==IDOK)
{
if(m_structure.m_model.m_defineModelDlg.m_modelEntity.GetSize()<=0)
{
AfxMessageBox("没有定义矩形区域!请定义矩形区域。 ");
return;
m_isLoaded=0;
}
m_isLoaded=1;//数据体成功加载
m_structure.m_model.CreateModel();
m_structure.GetDataFromModal();//生成实例数据体,将进行运算
}
else
{
return;
}
SetModifiedFlag(TRUE);
AfxMessageBox("已经成功生成自定义模型数据。可以求解了!(: ");
// UpdateAllViews(NULL);//刷新视图显示结果
((CMainFrame*)(AfxGetMainWnd()))->OnViewInputgraph();//转到模型显示
}
void CFiniteElecDoc::OnFileOpen()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"文本文件(*.txt)|*.txt|所有格式(*.*)|*.*||");
dlg.m_ofn.lpstrTitle=_T("打开模型数据文件");
if(dlg.DoModal()==IDOK)
{
m_strInputFileName=dlg.GetPathName();
CDocument::OnOpenDocument(dlg.GetPathName());
}
((CMainFrame*)(AfxGetMainWnd()))->OnViewInputgraph();//转到模型显示
}
/////////////////////////////////////
//求解计算模型
void CFiniteElecDoc::OnModelSolve()
{
CWaitCursor wait;//显示等待状态,函数外自动恢复
if(m_structure.AnalysisStructure()==0)
AfxMessageBox("求解失败!请检查数据体是否加载或有效!");
else
{
AfxMessageBox("求解成功!可以查看结果。 ");
// UpdateAllViews(NULL);//刷新视图显示结果
((CMainFrame*)(AfxGetMainWnd()))->OnViewOutputgraph();//转到模型云图显示
}
}
//保存模型数据
void CFiniteElecDoc::OnFileSavemodel()
{
m_savetype=1;
//TRUE打开 FALSE保存
if(!m_isLoaded)
{
AfxMessageBox("数据体没有建立,请重新建立数据体。");
return;
}
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"文本文件(*.txt)|*.txt|所有格式(*.*)|*.*||");
dlg.m_ofn.lpstrTitle="保存模型数据";
if(dlg.DoModal()==IDOK)
{
m_strInputFileName=dlg.GetPathName();
// dlg.GetFileExt(); //获取扩展名:txt
// dlg.GetFileTitle(); //获取文件标题:filename
// dlg.GetFileName(); //获取文件名:filename.txt
// dlg.GetPathName(); //获取文件全路径名:c://path//path2//filename.txt
CDocument::OnSaveDocument(dlg.GetPathName());
}
}
//保存运算结果
void CFiniteElecDoc::OnFileSave()
{
m_savetype=0;
if(!m_structure.m_solved)//没有结算,返回
{
AfxMessageBox("还没有进行求解,不能输出结果。请先求解! ");
return;
}
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"文本文件(*.txt)|*.txt|所有格式(*.*)|*.*||");
dlg.m_ofn.lpstrTitle=_T("保存运算分析结果");
if(dlg.DoModal()==IDOK)
{
m_strOutputFileName=dlg.GetPathName();
CDocument::OnSaveDocument(dlg.GetPathName());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -