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

📄 definemodeldlg.cpp

📁 用VC写得计算电磁学的有限元分析程序
💻 CPP
字号:
// DefineModelDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FiniteElec.h"
#include "DefineModelDlg.h"
#include "RectRegion.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDefineModelDlg dialog


CDefineModelDlg::CDefineModelDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDefineModelDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDefineModelDlg)
	m_xpos = 0.0;
	m_ypos = 0.0;
	m_xlength = 6.0;
	m_xseg = 4;
	m_yseg = 4;
	m_b_bottom = TRUE;
	m_b_left = FALSE;
	m_b_up = TRUE;
	m_b_right = FALSE;
	m_comb_rectlist = _T("");
	m_load_right = 0.0;
	m_load_up = 100.0;
	m_load_left = 0.0;
	m_load_bottom = 50.0;
	m_ylength = 6.0;
	//}}AFX_DATA_INIT
}

void CDefineModelDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDefineModelDlg)
	DDX_Text(pDX, IDC_EDIT_XPOS, m_xpos);
	DDV_MinMaxDouble(pDX, m_xpos, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_YPOS, m_ypos);
	DDV_MinMaxDouble(pDX, m_ypos, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_LENGTH, m_xlength);
	DDV_MinMaxDouble(pDX, m_xlength, 0., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_XSEGMENT, m_xseg);
	DDV_MinMaxInt(pDX, m_xseg, 1, 100);
	DDX_Text(pDX, IDC_EDIT_YSEGMENT, m_yseg);
	DDV_MinMaxInt(pDX, m_yseg, 1, 100);
	DDX_Check(pDX, IDC_CHECK_1_BOTTOM, m_b_bottom);
	DDX_Check(pDX, IDC_CHECK_2_LEFT, m_b_left);
	DDX_Check(pDX, IDC_CHECK_3_UP, m_b_up);
	DDX_Check(pDX, IDC_CHECK_4_RIGHT, m_b_right);
	DDX_CBString(pDX, IDC_COMBO_MODEL_LIST, m_comb_rectlist);
	DDV_MaxChars(pDX, m_comb_rectlist, 20);
	DDX_Text(pDX, IDC_EDIT_LOADRIGHT, m_load_right);
	DDV_MinMaxDouble(pDX, m_load_right, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_LOADUP, m_load_up);
	DDV_MinMaxDouble(pDX, m_load_up, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_LOADLEFT, m_load_left);
	DDV_MinMaxDouble(pDX, m_load_left, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_LOADBOTTOM, m_load_bottom);
	DDV_MinMaxDouble(pDX, m_load_bottom, -10000000000., 10000000000.);
	DDX_Text(pDX, IDC_EDIT_HEIGHT, m_ylength);
	DDV_MinMaxDouble(pDX, m_ylength, 0., 10000000000.);
	//}}AFX_DATA_MAP
	SetComboBox();
}


BEGIN_MESSAGE_MAP(CDefineModelDlg, CDialog)
	//{{AFX_MSG_MAP(CDefineModelDlg)
	ON_BN_CLICKED(IDC_CHECK_1_BOTTOM, OnCheck1Bottom)
	ON_BN_CLICKED(IDC_CHECK_2_LEFT, OnCheck2Left)
	ON_BN_CLICKED(IDC_CHECK_3_UP, OnCheck3Up)
	ON_BN_CLICKED(IDC_CHECK_4_RIGHT, OnCheck4Right)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_CBN_SELCHANGE(IDC_COMBO_MODEL_LIST, OnSelchangeComboModelList)
	ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
	ON_EN_SETFOCUS(IDC_EDIT_XSEGMENT, OnSetfocusEditXsegment)
	ON_EN_SETFOCUS(IDC_EDIT_YSEGMENT, OnSetfocusEditYsegment)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDefineModelDlg message handlers

void CDefineModelDlg::OnCheck1Bottom() 
{
	m_b_bottom=!m_b_bottom;
	((CEdit*)GetDlgItem(IDC_EDIT_LOADBOTTOM))->SetReadOnly(!m_b_bottom);
}

void CDefineModelDlg::OnCheck2Left() 
{
	m_b_left=!m_b_left;
	((CEdit*)GetDlgItem(IDC_EDIT_LOADLEFT))->SetReadOnly(!m_b_left);
}

void CDefineModelDlg::OnCheck3Up() 
{
	m_b_up=!m_b_up;
	((CEdit*)GetDlgItem(IDC_EDIT_LOADUP))->SetReadOnly(!m_b_up);

}

void CDefineModelDlg::OnCheck4Right() 
{
	m_b_right=!m_b_right;
	((CEdit*)GetDlgItem(IDC_EDIT_LOADRIGHT))->SetReadOnly(!m_b_right);
	
}
//////////////////////////////////////////////

void CDefineModelDlg::OnButtonAdd() 
{//增加定义区域
	double error=1e-5;
	CString strname;
	//---------------有效性检查----
	UpdateData(TRUE);//存到变量中去。
	if(m_xlength<error)
	{
		AfxMessageBox("长度要大于零!");
		return;
	}
	if(m_ylength<error)
	{
		AfxMessageBox("高度要大于零!");
		return;
	}
	//-----------------------------
	CRectRegion* rect=new CRectRegion();
	rect->m_position[0]=m_xpos;
	rect->m_position[1]=m_ypos;
	rect->m_size[0]=m_xlength;
	rect->m_size[1]=m_ylength;
	rect->m_segment[0]=m_xseg;
	rect->m_segment[1]=m_yseg;
	rect->m_b_load[0]=m_b_bottom;
	rect->m_b_load[1]=m_b_left;
	rect->m_b_load[2]=m_b_up;
	rect->m_b_load[3]=m_b_right;
	rect->m_load[0]=m_load_bottom;
	rect->m_load[1]=m_load_left;
	rect->m_load[2]=m_load_up;
	rect->m_load[3]=m_load_right;
	if(m_comb_rectlist!=_T(""))
	{
		rect->m_strName=m_comb_rectlist;
	}
	else if(m_comb_rectlist==_T(""))
	{
		strname.Format("%s%d",rect->m_strName,m_modelEntity.GetSize());
		rect->m_strName=strname;
	}
	m_modelEntity.SetSize(m_modelEntity.GetSize()+1);
	m_modelEntity.SetAt(m_modelEntity.GetSize()-1,rect);
	SetComboBox();
	ReSetData();
	//------------------------
	((CEdit*)(GetDlgItem(IDC_EDIT_LOADBOTTOM)))->SetReadOnly(!m_b_bottom);
	((CEdit*)(GetDlgItem(IDC_EDIT_LOADLEFT)))->SetReadOnly(!m_b_left);
	((CEdit*)(GetDlgItem(IDC_EDIT_LOADUP)))->SetReadOnly(!m_b_up);
	((CEdit*)(GetDlgItem(IDC_EDIT_LOADRIGHT)))->SetReadOnly(!m_b_right);
	//------------------------
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	UpdateData(FALSE);
	cb->SetCurSel(m_modelEntity.GetSize()-1);//设置选项
}
//设置复选框的显示数据
void CDefineModelDlg::SetComboBox()
{	
	int i;
	CString str;
	CRectRegion* rect;
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	cb->ResetContent();//清除所有内容
	for(i=0;i<m_modelEntity.GetSize();i++)
	{
		m_modelEntity.GetSize();
		rect=(CRectRegion*)(m_modelEntity.GetAt(i));
		str.Format("%s",rect->m_strName);
		cb->AddString(str);
	}
}
//删除矩形区域
void CDefineModelDlg::OnButtonDelete() 
{
	int deleteid;
	if(m_modelEntity.GetSize()==0)return;
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	if(cb->GetCurSel()>=cb->GetCount()||cb->GetCurSel()<0)return;
	deleteid=cb->GetCurSel();
	delete (CRectRegion*)m_modelEntity.GetAt(deleteid);//删除对象
	m_modelEntity.RemoveAt(deleteid);//删除指针
	SetComboBox();
	ReSetData();
	UpdateData(FALSE);
	if(m_modelEntity.GetSize())cb->SetCurSel(m_modelEntity.GetSize()-1);//设置选项
}

void CDefineModelDlg::Init()
{
	int i;
	ReSetData();
	for(i=0;i<m_modelEntity.GetSize();i++)
	{
		delete (CRectRegion*)(m_modelEntity.GetAt(i));
	}
	m_modelEntity.RemoveAll();
}

CDefineModelDlg::~CDefineModelDlg()
{
	Init();
}

void CDefineModelDlg::ReSetData()
{
	m_xpos = 0.0;
	m_ypos = 0.0;
	m_xlength = 1.0;
	m_xseg = 1;
	m_yseg = 1;
	m_b_bottom = FALSE;
	m_b_left = FALSE;
	m_b_up = FALSE;
	m_b_right = FALSE;
	m_comb_rectlist = _T("");
	m_load_right = 0.0;
	m_load_up = 0.0;
	m_load_left = 0.0;
	m_load_bottom = 0.0;
	m_ylength = 1.0;
}
//设置修改矩形状态
void CDefineModelDlg::OnSelchangeComboModelList() 
{
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	int which=cb->GetCurSel();//要修改的元素下标
	CRectRegion* rect=(CRectRegion*)(m_modelEntity.GetAt(which));
	m_xpos=rect->m_position[0];
	m_ypos=rect->m_position[1];
	m_xlength=rect->m_size[0];
	m_ylength=rect->m_size[1];
	m_xseg=rect->m_segment[0];
	m_yseg=rect->m_segment[1];
	m_b_bottom=rect->m_b_load[0];
	m_b_left=rect->m_b_load[1];
	m_b_up=rect->m_b_load[2];
	m_b_right=rect->m_b_load[3];
	m_load_bottom=rect->m_load[0];
	m_load_left=rect->m_load[1];
	m_load_up=rect->m_load[2];
	m_load_right=rect->m_load[3];
	m_comb_rectlist=rect->m_strName;
	UpdateData(FALSE);
	cb->SetCurSel(which);
}
//修改当前矩形区域定义
void CDefineModelDlg::OnButtonEdit() 
{
	if(m_modelEntity.GetSize()==0)return;//没有东西可改
	CRectRegion* rect;
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	int which=cb->GetCurSel();//要修改的元素,即当前选中的元素
	//方法:先删除实体中对应的对象,再将对应的指针赋新的对象的地址。
	//或者,直接对其指向的对象进行修改
	UpdateData(TRUE);
	if(which>-1)rect=(CRectRegion*)(m_modelEntity.GetAt(which));
	else 
	{
		AfxMessageBox("没有项目被选中! ");
		return;
	}
	//--------------------------
	rect->m_position[0]=m_xpos;
	rect->m_position[1]=m_ypos;
	rect->m_size[0]=m_xlength;
	rect->m_size[1]=m_ylength;
	rect->m_segment[0]=m_xseg;
	rect->m_segment[1]=m_yseg;
	rect->m_b_load[0]=m_b_bottom;
	rect->m_b_load[1]=m_b_left;
	rect->m_b_load[2]=m_b_up;
	rect->m_b_load[3]=m_b_right;
	rect->m_load[0]=m_load_bottom;
	rect->m_load[1]=m_load_left;
	rect->m_load[2]=m_load_up;
	rect->m_load[3]=m_load_right;
	if(m_comb_rectlist!=_T(""))
	{//不为空就改,否则不变
		rect->m_strName=m_comb_rectlist;
	}
	//--------------------------
	cb->SetCurSel(which);//设置当前选中的项。
}
//////////////////////////////////////////////
///
void CDefineModelDlg::OnSetfocusEditXsegment() 
{
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	int curindex=cb->GetCurSel();
	//------------------------
	UpdateData(TRUE);//存到变量
	CRectRegion* rect;
	double dx,dy;
	//----第一个矩形已经确定,则依第一个的单元大小
	if(m_modelEntity.GetSize()>0)
	{
		rect=(CRectRegion*)(m_modelEntity.GetAt(0));
		dx=rect->m_size[0]/rect->m_segment[0];
		dy=rect->m_size[1]/rect->m_segment[1];
		m_xseg=int(m_xlength/dx);
//		m_yseg=int(m_ylength/dx);
		if(m_xseg<=0)m_xseg=1;
//		if(m_yseg<=0)m_yseg=1;
	}
	//----没有确定,则依自定义段数,Y依于X的长度。
	else 
	{
		m_xseg=4;
//		m_yseg=4;
	}
	UpdateData(FALSE);//更新显示
	cb->SetCurSel(curindex);//保持选择
}
//////////////////////////////////////////////
///
void CDefineModelDlg::OnSetfocusEditYsegment() 
{
	CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
	int curindex=cb->GetCurSel();
	//------------------------
	UpdateData(TRUE);//存到变量
	CRectRegion* rect;
	double dx,dy;
	//----第一个矩形已经确定,则依第一个的单元大小
	if(m_modelEntity.GetSize()>0)
	{
		rect=(CRectRegion*)(m_modelEntity.GetAt(0));
		dx=rect->m_size[0]/rect->m_segment[0];
		dy=rect->m_size[1]/rect->m_segment[1];
//		m_xseg=int(m_xlength/dx);
		m_yseg=int(m_ylength/dx);
//		if(m_xseg<=0)m_xseg=1;
		if(m_yseg<=0)m_yseg=1;
	}
	//----没有确定,则依自定义段数,Y依于X的长度。
	else 
	{
//		m_xseg=4;
		m_yseg=4;
	}
	UpdateData(FALSE);//更新显示
	cb->SetCurSel(curindex);//保持选择
}

⌨️ 快捷键说明

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