📄 finiteelementview.cpp
字号:
// FiniteElementView.cpp : implementation of the CFiniteElementView class
//
#include "stdafx.h"
#include "FiniteElement.h"
#include "FiniteElementDoc.h"
#include "FiniteElementView.h"
#include "Node.h"
#include "Element.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView
IMPLEMENT_DYNCREATE(CFiniteElementView, CScrollView)
BEGIN_MESSAGE_MAP(CFiniteElementView, CScrollView)
//{{AFX_MSG_MAP(CFiniteElementView)
ON_COMMAND(ID_VIEW_INPUTDATA, OnViewInputdata)
ON_UPDATE_COMMAND_UI(ID_VIEW_INPUTDATA, OnUpdateViewInputdata)
ON_COMMAND(ID_VIEW_GRAPH, OnViewGraph)
ON_UPDATE_COMMAND_UI(ID_VIEW_GRAPH, OnUpdateViewGraph)
ON_COMMAND(ID_VIEW_ANALYSIS, OnViewAnalysis)
ON_UPDATE_COMMAND_UI(ID_VIEW_ANALYSIS, OnUpdateViewAnalysis)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView construction/destruction
CFiniteElementView::CFiniteElementView()
{
m_linebase=20;
m_pagebase=600;
// TODO: add construction code here
}
CFiniteElementView::~CFiniteElementView()
{
}
BOOL CFiniteElementView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView drawing
void CFiniteElementView::OnDraw(CDC* pDC)
{
CFiniteElementDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->SetBkMode(TRANSPARENT);
pDC->SelectObject(&m_content_font);
if(m_tagView==0)
{
if(pDoc->m_done)
DisplayInputData(pDC,pDoc);
else DisplayFirst(pDC);
}
else if(m_tagView==1)
{
if(pDoc->m_done)
DisplayStructureGraph(pDC,pDoc);
else DisplayFirst(pDC);
}
else if(m_tagView==2)
{
if(pDoc->m_done)
DisplayAnalysisData(pDC,pDoc);
else DisplayFirst(pDC);
}
else
{
DisplayFirst(pDC);
}
// TODO: add draw code for native data here
}
void CFiniteElementView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
m_tagView=1;
m_line=m_linebase;
m_page=m_pagebase;
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal,CSize(m_line,m_page));
//初始化字体
m_title_font.CreateFont(int(m_line*1.2),0,0,0,FW_BOLD,FALSE,FALSE,FALSE,
GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
DEFAULT_QUALITY,DEFAULT_PITCH,"方正姚体");
m_content_font.CreateFont(int(m_line*0.9),0,0,0,FW_THIN,FALSE,FALSE,FALSE,
GB2312_CHARSET,OUT_TT_PRECIS,CLIP_TT_ALWAYS,
DEFAULT_QUALITY,DEFAULT_PITCH,"FIXEDSYS");
}
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView printing
BOOL CFiniteElementView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CFiniteElementView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CFiniteElementView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView diagnostics
#ifdef _DEBUG
void CFiniteElementView::AssertValid() const
{
CScrollView::AssertValid();
}
void CFiniteElementView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CFiniteElementDoc* CFiniteElementView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFiniteElementDoc)));
return (CFiniteElementDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFiniteElementView message handlers
void CFiniteElementView::OnViewInputdata()
{
// TODO: Add your command handler code here
m_tagView=0;
Invalidate();
UpdateWindow();
}
void CFiniteElementView::OnUpdateViewInputdata(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_tagView==0);
}
void CFiniteElementView::OnViewGraph()
{
// TODO: Add your command handler code here
m_tagView=1;
Invalidate();
UpdateWindow();
}
void CFiniteElementView::OnUpdateViewGraph(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_tagView==1);
}
void CFiniteElementView::OnViewAnalysis()
{
// TODO: Add your command handler code here
m_tagView=2;
Invalidate();
UpdateWindow();
}
void CFiniteElementView::OnUpdateViewAnalysis(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_tagView==2);
}
//==============================================================
void CFiniteElementView::DisplayInputData(CDC *pDC, CFiniteElementDoc *pDoc)
{
SetScrollSizes(MM_TEXT, CSize(40*m_line,3*m_page));
CPoint start;
CFont* pOldFont;
CNode* pNode;
CElement* pElement;
int i,j;
start=CPoint(m_line*5,m_line*5);
pOldFont=pDC->SelectObject(&m_title_font);
pDC->SetTextColor(RGB(128,0,128));
//----------------------
if(!pDC->IsPrinting())
{
CRect rect;
GetClientRect(&rect);
pDC->SelectStockObject(GRAY_BRUSH);
pDC->Rectangle(&CRect(0,0,rect.right,m_page*3));
pDC->SelectStockObject(WHITE_BRUSH);
pDC->Rectangle(CRect(start.x-2*m_line,start.y-3*m_line,
start.x+35*m_line,3*m_page-10*m_line));
}
//------------------------------
pDC->TextOut(start.x+4*m_line,start.y,"数据文件原始输入信息");
pDC->SelectObject(pOldFont);
char str[20];
sprintf(str,"结点总数:%d\0",pDoc->m_structure.m_node_num);
pDC->TextOut(start.x,start.y+m_line*2,str);
sprintf(str,"单元总数:%d\0",pDoc->m_structure.m_element_num);
pDC->TextOut(start.x,start.y+m_line*3,str);
sprintf(str,"支承节点数:%d\0",pDoc->m_structure.m_supportnode_num);
pDC->TextOut(start.x,start.y+m_line*4,str);
sprintf(str,"结点荷载数:%d\0",pDoc->m_structure.m_loadnode_num);
pDC->TextOut(start.x,start.y+m_line*5,str);
sprintf(str,"问题类型码:%d\0",pDoc->m_structure.m_question_id);
pDC->TextOut(start.x,start.y+m_line*6,str);
//-----------------------------------------------------
sprintf(str,"弹性模量:%7.5e\0",pDoc->m_structure.m_young);
pDC->TextOut(start.x,start.y+m_line*7,str);
sprintf(str,"泊松比:%7.5e",pDoc->m_structure.m_possion);
pDC->TextOut(start.x,start.y+m_line*8,str);
sprintf(str,"单元厚度:%7.5e",pDoc->m_structure.m_thickness);
pDC->TextOut(start.x,start.y+m_line*9,str);
sprintf(str,"容重:%7.5e",pDoc->m_structure.m_weight);
pDC->TextOut(start.x,start.y+m_line*10,str);
//-------------------------------------------------------
start=CPoint(start.x,start.y+12*m_line);
pDC->TextOut(start.x,start.y,"单元结点码数据:");
for(i=0;i<pDoc->m_structure.m_element_num;i++)
{
pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
sprintf(str,"%d",pElement->m_element_id);
pDC->TextOut(start.x,start.y+(i+1)*m_line,str);
for(j=0;j<3;j++)
{
pNode=pElement->m_pNode[j];
sprintf(str,"%d",pNode->m_node_id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -