




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0.前言11. 悬索基本理论.仁2. 方案设计13. 软件编程2.4. 系统调试和结果分析225. 结论及进一步设想24参考文献24课设体会26沈阳航空航天大学课程设计论文课设题目,与任务书严格一致基于VC界面的输电线路模型建立摘要:本文以悬索理论为基础,采用模块化设计方法,使用Visual Basic 2010版本编写程序 代码,设计并实现了具有相应功能的输电线路的模型建立软件。本文首先指出了输电线路 的模型建立软件的背景和重要意义,然后再对各模块进行了详细设计,并通过应用实例来 说明了软件的使用方法。 为便于软件的用户界面设计,将上述的各个模块划分为了若干子 模块,并对各子模块窗体进行了详
2、细的设计,对于该软件的一些重要的事件响应、类型定 义以及子过程等,本文给出了其对应的程序代码,并对该软件使用的标准模块进行了说明。 最后,本文介绍了该软件功能的实现情况以及实验测试结果,演示了软件的用户界面和使用方法,实现了所有预期功能,并对该软件的设计与实现进行的总结和展望。关键词:悬索理论;Visual Basic 2010;用户界面0.刖言21世纪前10年到20年,是我国电力发展的关键时期,是中国电力发展规模最大的时 期。我国电力建设的规模和速度,是世界上任何国家都无法比拟的。这是由我国人口众多、 幅员辽阔、人均用电水平低的基本国情決定的。现在,中国的电力正方兴来艾,将目趋兴旺。 电力建
3、设的任务非常艰巨、壮观。然而,在输电线路的设计过程中,存在一些影响其效率和 精确性的问题,其中之一就是架空索道的计算问 题。因此,有必要开发一套用于输电线路 模型建立的软件,以提高输电线路模型建立的效率和精度,保证施工安全。1. 悬索基本理论输电线路模型的建立的主要原理是悬索基本理论。输电线路是以主缆为主要承重构件的柔性悬吊组合体系,主要靠恒载产生的初 始拉力以及几何形状的改变来获得结构刚度, 以抵抗荷载产生的变形。在正常设 计荷载作用下,即使材料应力没有超过弹性范围,也 会由于结构的有限变形而表 现出一定的几何非线性行为。从有限位移理论的角度来分析, 引起大跨度悬索输电线路的几何非线性的因素
4、主要有三个:缆索垂度效应;梁柱效应:大位移。下面的设计将围绕此部分内容展开,是此部分内容的实现。2. 方案设计输电线路模型的建立需要在一个界面输入输电线路的长度、高度、间距等参数,同时 在输入各项参数后,需要生成一个输电线路的模型,用户可根据情况选择保存或不保存所 生成的图形。根据设计要求,采用的方案如下。利用 VC界面编程技术实现各项要求,包含用户登录界面、参数输入界面、图形生成及保存功能。主要设计思想是自顶向下的编程思想3. 软件编程输电线路模型的建立采用自顶向下的设计思想,根据建模的需求来设计程序。首先需要设计一个用户登录界面,在这个子程序中,我将用户名设为sau,密码为20120407
5、02078,当用户在没有输入用户名和密码的情况下按确定键,程序将提示“用户名或密码不能为空”,当用户输入的用户名或密码错误时,程序将显示“用户名或密码输入错误”,当用户输入正确的用户名和密码,程序将跳转到参 数输入界面。登录界面程序的源代码如下:#i nclude stdafx.h#i nclude DrawWire.h#i nclude Logi nDlg.h#ifdef _DEBUG#define new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE_;#en dif/ CLogi nDlg dialogCLogi nDlg
6、:CLogi nDlg(CWnd* pPare nt /*=NULL*/):CDialog(CLoginDlg:IDD, pParent)AFX_DATA_INIT(CLogi nDlg)m_strPassword = _T();m_strUserName = _T();AFX_DATA_INITvoid CLogi nDlg:DoDataExcha nge(CDataExcha nge* pDX)CDialog:DoDataExcha nge(pDX);/AFX_DATA_MAP(CLogi nDlg)DDX_C on trol(pDX, IDC_EDIT_PASSWORD, m_editP
7、assword);DDX_C on trol(pDX, IDC_EDIT_USERNAME, m_editUserName);DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strPassword);DDV_MaxChars(pDX, m_strPassword, 32);DDX_Text(pDX, IDC_EDIT_USERNAME, m_strUserName);DDV_MaxChars(pDX, m_strUserName, 32);AFX_DATA_MAPBEGIN_MESSAGE_MAP(CLogi nDlg, CDialog)AFX_MSG_MAP(CLogi
8、 nDlg)AFX_MSG_MAPON_EN_CHANGE(IDC_EDIT_PASSWORD, & CLogi nDlg:O nEn Cha ngeEditPassword) ON_EN_CHANGE(IDC_EDIT_USERNAME, & CLogi nDlg:O nEn Cha ngeEditUsername) END_MESSAGE_MAP()BOOL CLogi nDlg: On I ni tDialog()CDialog:O nlni tDialog();m_editUserName.SetFocus();return FALSE;/ CLogi nDlg message han
9、 dlersvoid CLogi nDlg:O nOK()UpdateData();m_strUserName = sau;/ 设置用户名m_strPassword = 2012040702078;/ 设置密码if (m_strUserName.lsEmpty() | m_strPassword.lsEmpty() 检查用户输入是否有效AfxMessageBox(用户名和密码不能为空!);return ;if (m_strUserName = sau & m_strPassword = 78)CDialog:O nOK();elseAfxMessageBox(用户名或密码输入错误 ”);当用户
10、输入了正确的用户名和密码,此时应显示出参数输入界面,根据输电线路建模的需要,我 将输入的参数设定为电线杆的个数、高度、间距以及输电线路的总长度。程序运行时默认电线杆的数 量为3,高度为140米,间距为150米,输电线路的总长为360米,即每两个电线杆之间的线路长度为180米。用户可根据自己的需要更改任意参数。同时,程序还要考虑到实际情况,当用户输入的间 距大于两个电线杆之间线路的长度时,此时明显不符合实际,系统将提示“长度不能小于间距”。参 数输入界面程序的源代码如下:/ DrawWireDIg.cpp : impleme ntati on file#include stdafx.h#i nc
11、lude DrawWire.h#i nclude DrawWireDIg.h#i nclude DrawPicDlg.h#ifdef _DEBUG#define new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE.#en dif/ CDrawWireDlg dialogCDrawWireDlg:CDrawWireDlg(CWnd* pPare nt /*=NULL*/):CDialog(CDrawWireDlg:IDD, pPare nt)AFX_DATA_INIT(CDrawWireDlg)m_dDista nee = 15
12、0.0;m_dHeight = 140.0;m_dLe ngth = 340.0;m_iCo unt = 3;AFX_DATA_INITm_hIeo n = AfxGetApp()-LoadIeo n(IDR_MAINFRAME);void CDrawWireDlg:DoDataExcha nge(CDataExcha nge* pDX)CDialog:DoDataExeha nge(pDX);AFX_DATA_MAP(CDrawWireDlg)DDX_Text(pDX, IDC_EDIT_DISTANCE, m_dDista nee);DDX_Text(pDX, IDC_EDIT_HEIGH
13、T, m_dHeight);DDX_Text(pDX, IDC_EDIT_LENGTH, m_dLe ngth);DDX_Text(pDX, IDC_EDIT_COUNT, m_iCou nt);DDV_Mi nM axI nt(pDX, mCou nt, 2, 20);/AFX_DATA_MAPDDX_Co ntrol(pDX, IDC_LIST, m_lst In put);/ DDX_Co ntrol(pDX, IDC_EDIT_COUNT, m_editeou nt);DDX_Co ntrol(pDX, IDC_EDIT_COUNT, m_editCou nt);BEGIN_MESSA
14、GE_MAP(CDrawWireDlg, CDialog)AFX_MSG_MAP(CDrawWireDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUILD, On Build)AFX_MSG_MAPON_EN_CHANGE(IDC_EDIT_COUNT, & CDrawWireDlg:O nCha ngeEditCou nt) ON_EN_KILLFOCUS(IDC_EDIT_COUNT, & CDrawWireDlg:O nKillfocusEditCou nt) ON_EN_CHANGE(IDC_EDIT_LENGTH,
15、& CDrawWireDlg:O nEn Cha ngeEditLe ngth) ON_EN_CHANGE(IDC_EDIT_HEIGHT, & CDrawWireDlg:O nEn Cha ngeEditHeight) END_MESSAGE_MAP()/ CDrawWireDlg message han dlersBOOL CDrawWireDlg:O nl ni tDialog()CDialog:O nlni tDialog();SetIco n(m_hlco n, TRUE);/ Set big iconSetIco n( m_hIco n, FALSE);/ Set small ic
16、onmstln put.SetExte ndedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);/ TODO: Add extra ini tialization herein t iI ndex = 0;m_lstInput.InsertColumn(iIndex+, 名称,0, 120);mstlnput.InsertColumn(iIndex+, 间距,0, 100);mstlnput.InsertColumn(ilndex+, 长度,0, 100);On KillfocusEditCou nt();return TRUE; / return
17、 TRUE uni ess you set the focus to a control/If you add a mini mize butt on to your dialog, you will n eed the code below/ to draw the icon. For MFC applicati ons using the docume nt/view model,/ this is automatically done for you by the framework.void CDrawWireDlg:O nPai nt()if (IsIc on ic()CPaintD
18、C dc(this); / device con text for paintingSen dMessage(WMCONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Cen ter icon in clie nt recta ngleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClie ntRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y =
19、(rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIc on (x, y, m_hIc on);elseCDialog:O nPai nt();HCURSOR CDrawWireDlg:O nQueryDraglco n() return (HCURSOR) m_hlco n;void CDrawWireDlg:O nBuild()if (UpdateData() & CDrawPicDlg:CheckDataValid(this)更新Datam_data.clear();for (int i = 0; i mstI nput.Get
20、ltemCou nt(); +i)CStri ng strDista nce = m_l stI nput.GetltemText(i, 1);CString strLength = mstlnput.GetltemText(i, 2);ITEM item = ITEM(atoi(strDistance), atoi(strLength);if (item.iLe ngth item.iDista nce)strDistance.Format(%s的长度不能小于间距!, m_lstlnput.GetItemText(i, 0);AfxMessageBox(strDista nce);retur
21、n ;m_data.push_back(item);CDrawPicDlg dlgPic(this);dlgPic.DoModal();void CDrawWireDlg:O nOK()SetFocus();double CDrawWireDlg:GetDista nce() return m_dDista nee;double CDrawWireDlg:GetLe ngth() retur n m_dLe ngth;double CDrawWireDlg:GetHeight()retur n m_dHeight;double CDrawWireDlg:GetTotalDista nce()r
22、eturn m_dTotalDista nee;int CDrawWireDlg:GetCou nt()return m_iCo unt;const Datas & CDrawWireDlg:GetDatas()return m_data;void CDrawWireDlg:O nCha ngeEditCou nt()void CDrawWireDlg:O nKillfocusEditCou nt()if (UpdateData()int iSub = m_iCount - m_lstInput.GetltemCount() - 1;if (iSub = 0)return ;CStri ng
23、strText;for (int i = 0; i 0)int iln dex = m_lstI nput.GetltemCo un t();strText.Format(%d-%d, il ndex + 1, iI ndex + 2); m_lst In putnsertltem(il ndex, strText);mstln put.SetItemText(iI ndex, 1, 150);mstlnput.SetltemText(ilndex, 2, 180);elsem_l st In put.DeleteItem(m_l stl nput.GetltemCou nt() - 1);m
24、_lstl nput.UpdateLe ngth();void CDrawWireDlg:SetLe ngth(double dLe ngth, double dDista nee)m_dLe ngth = dLe ngth;m_dTotalDista nee = dDista nee;UpdateData(FALSE);参数输入完毕,当用户点击“建立模型”时,程序应建立出输电线路的模型并将其显示出来,同 时,当模型建立后,用户可根据自己的需求选择是否保存图像。相关程序的源代码如下:/ DrawPieDlg.epp : impleme ntati on file/#inelude stdafx
25、.h#i nelude drawwire.h#i nelude DrawPieDlg.h#in elude DrawWireDlg.h#ifdef _DEBUG#defi ne new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE.#en dif/ CDrawPicDIg dialogCDrawPicDlg:CDrawPicDlg(CDrawWireDlg* pPare nt):CDialog(CDrawPicDlg:IDD, NULL)AFX_DATA_INIT(CDrawPicDlg)/ NOTE: the ClassWiz
26、ard will add member initialization here AFX_DATA_INIT m_pMa in Dlg = pPare nt;m_dP = 0;m_bruBack.CreateSolidBrush(RGB(255,255,255); m_bruBarBack.CreateSolidBrush(RGB(0, 0, 0);void CDrawPicDlg:DoDataExcha nge(CDataExcha nge* pDX)CDialog:DoDataExcha nge(pDX);AFX_DATA_MAP(CDrawPicDlg)DDX_Co ntrol(pDX,
27、IDC_STA TIC_PIC, m_wn dPic); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDrawPicDlg, CDialog)AFX_MSG_MAP(CDrawPicDlg)ON_BN_CLICKED(IDC_SA VE, On Save)ON_WM_PAINT()AFX_MSG_MAPEND_MESSAGE_MAP()/ CDrawPicDlg message han dlersBOOL CDrawPicDlg:。nl ni tDialog()CDialog:O nlni tDialog();return TRUE;void CDrawPicDlg:O n
28、Save()/调用保存对话框CFileDialog dlgSave(FALSE, bmp, 保存的图像, OFN_HIDEREADONL Y |OFN_OVERWRITEPROMPT,图像文件 | *.bmp);if (dlgSave.DoModal() = IDOK)/生成文件Gen eratePic(dlgSave.GetPathName();void CDrawPicDlg:O nPai nt()CDC mdc;CRect rectPic;CBitmap bitmap;CPaintDC dc(this);/获取画图区域rectPic = GetPicRect();II创建双缓冲DCmdc
29、.CreateCompatibleDC(&dc);bitmap.CreateCompatibleBitmap(&dc, rectPic.Width(), rectPic.Height();mdc.SelectObject(bitmap);/开始画图DrawPic(&mdc, rectPic.Width(), rectPic.Height();将画好的缓冲DC贴图到屏幕上dc.BitBlt(rectPic.left, rectPic.top, rectPic.Width(), rectPic.Height(), &mdc, 0, 0, SRCCOPY);void CDrawPicDlg:Draw
30、Pic(CDC *pDC, i nt iWidth, i nt iHeight)CFo nt *pFo nt = GetFo nt();CRect rect(0, 0, iWidth, iHeight);CFo nt *pOldFo nt = (CFo nt *) pDC-SelectObject(pFo nt);/设置绘图环境pDC-SetBkMode(TRANSPARENT);pDC-SetViewportOrg(0, 0);/默认白色背景pDC-FillRect(&rect, &m _bruBack);/说明pDC-SetTextColor(RGB(200,200,200);pDC-Te
31、xtOut(O, 0,输电线路模型);/确定实际尺寸和屏幕像素之间的比例关系in t iCou nt =m_pMai nDlg-GetCou nt();double dHeight = m_pMai nDlg-GetHeight();double dLength = m_pMai nDlg-GetLe ngth();double dDista nee =m_pMa in Dlg-GetDista nce();/以最大的尺寸比例为标准,以适应不同情况double dTotalLe ngth = dDista nce*(iCou nt - 1);double dRateHor = dTotalLe
32、 ngth*1.1/rect.Width();double dRateVer = dHeight*1.1/rect.Height();double dRate = (dRateHor dRateV er)?dRateHor:dRateVer;/换算比例,将实际尺寸换算为像素尺寸dHeight /= dRate;dLe ngth /= dRate;dDista nee /= dRate;dTotalLe ngth /= dRate;/计算抛物线方程系数double dH = CalcP(dRate);/剪切区域pDC-Begi nPath();pDC-Rectangle(CRect(0, 0,
33、iWidth, iHeight - dHeight);pDC-E ndPath();pDC-SelectClipPath(RGN_DIFF);CPoi nt ptCurCe nter(0,0);pDC-SelectObject(m_bruBarBack);水平居中,计算开始位置in t iLeft = (rect.Width() - dTotalLe ngth)/2;for (int i = 0; i 0)DrawWire(pDC, ptLast, ptCurCe nter, ptCurCe nter.y + dH);/画电线杆pDC-Recta ngle(iLeft + i*dDista n
34、ee, 0, iLeft + i*dDista nee + 6, iHeight);pDC-SelectObject(pOldFo nt);void CDrawPicDlg:DrawWire(CDC *pDC, CPoi nt ptLeft, CPoi nt ptRight, double dWireHeight)/计算抛物线的原点位置CPoi nt ptOrg(ptLeft.x + (ptRight.x - ptLeft.x)/2, dWireHeight);/设置绘图的坐标系原点CPoi nt ptOldOrg = pDC-SetViewportOrg(ptOrg);int x = 0;i
35、nt y = 0;/确定开始点x = ptLeft.x - ptOrg.x;y = -x*x/(2*m_dP);pDC-MoveTo(x, y);/画所有点,按照方程:Y = XA2 /2Pfor (int i = ptLeft.x; i Li neTo(x, y);/设回原来的原点pDC-SetViewportOrg(ptOldOrg);double CDrawPicDlg:CalcP(double dRate)/曲线的总长double dLen gth = m_pMai nDlg-GetLe ngth()/dRate;/两点之间的水平距离double dDista nee = m_pMai
36、 nDlg-GetDista nce()/dRate;/计算一个接近结果的初始值H,减少循环次数double dH = (dLe ngth - dDista nce)/2;/长度误差值double dDiff = 100;误差值极小时,就计算出来了该值,比较值越小,计算的精度越高while (abs(dDiff) 0)dH += dH/2;elsedH -= dH/2;/计算出来了 H,将其带入方程求解,得出P系数的值m_dP = (dDista nce/2)*(dDista nce/2)/(2*dH);return dH;CRect CDrawPicDlg:GetPicRect()CRect
37、 rect;if (IsWi ndow(m_w ndPic.m_hWnd)获取屏幕坐标m_wn dPic.GetWi ndowRect(&rect);/转换客户区坐标Scree nToClie nt(&rect);rect.DeflateRect(1,1,1,1);return rect;void CDrawPicDlg:Ge neratePic(co nst CStri ng& strPath)CDC mdc;CRect rectPic;CBitmap bitmap;CDC *pDC = GetDC();if (pDC = NULL)AfxMessageBox(保存失败! ”);return
38、 ;/获取画图区域rectPic = GetPicRect();II创建双缓冲DCmdc.CreateCompatibleDC(pDC);bitmap.CreateCompatibleBit map (pDC, rectPic.Width(), rectPic.Height();CBitmap *pOldBitmap = (CBitmap *) mdc.SelectObject(bitmap);/开始画DrawPic(&mdc, rectPic.Width(), rectPic.Height();/保存SaveBmp(&bitmap, strPath);void CDrawPicDlg:O n
39、OK()void CDrawPicDlg:SaveBmp(CBitmap *pBitmap, con st CStri ng& strFilePath)/打开文件CFile file;if (!file.Ope n(strFilePath,CFile:modeCreate|CFile:modeWrite)AfxMessageBox(文件操作失败!);return ;/创建位图BITMAP bitm;pBitmap-GetBitmap(&bitm);char* pBuffer;int n charsize=bitm.bmHeight*bitm.bmWidthBytes;pBuffer =new
40、char ncharsize;memset(pBuffer,OxFF, ncharsize);BITMAPINFOHEADER filei nfo;BITMAPINFO bmpi nfo;bmpi nfo.bmiHeader.biSize=40;bmp in fo.bmiHeader.biWidth=bitm.bmWidth;bmp in fo.bmiHeader.biHeight=bitm.bmHeight;bmpi nfo.bmiHeader.biPla nes=bitm.bmPla nes;bmpi nfo.bmiHeader.biBitCo un t=bitm.bmBitsPixel;
41、bmpi nfo.bmiHeader.biCompressi on=BI_RGB;int nlin e=GetDIBits(GetDC()-GetSafeHdc(),(HBITMAP)pBit map-GetSafeHa ndle(),O,bmpi nfo.bmiHeader.biHeight,pBuffer,&bmpi nfo,DIB_RGB_ COLORS);int n size=n li ne*bitm.bmWidthBytes;char cc;cc=66;file.Write(&cc,1);cc=77;file.Write(&cc,1);long size=54+nsize;file.Write(&size,4);size=0;file.Write(&s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度地库车位销售与售后服务合同范本
- 二零二五年度教育培训机构加盟合同买卖补充约定
- 2025版企业招聘及员工培训一体化合同
- 2025至2030年中国新疆煤炭资源开采市场深度评估及行业投资前景咨询报告
- 2025至2030年中国高速耦合器行业市场全景监测及投资前景展望报告
- 二零二五年度专业理发店技师岗位录用协议
- 二零二五年度昆都仑召消防演练场地租赁与布置合同
- 二零二五年度履约保函标准协议书(新能源开发)
- 2025至2030年中国猪油膏行业市场调查研究及发展战略规划报告
- 二零二五年度汽车租赁企业员工租车服务合同
- 《朝花夕拾》名著导读+知识点+习题集合
- 《新能源材料与器件专业导论》课程教学大纲
- DG-TJ08-2121-2024 卫星定位测量技术标准
- 养老院文娱活动意外应急预案
- 依法信访知识培训课件
- 文件管理制度及档案管理办法
- 中医护理发展前景与展望
- 智能工厂自动化生产线建设合同
- 检验科生物安全管理
- Scratch蓝桥杯科学素养考试卷(初级组)
- 成人急性淋巴白血病
评论
0/150
提交评论