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

📄 finiteelecdoc.cpp

📁 用VC写得计算电磁学的有限元分析程序
💻 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 + -