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

📄 finiteelementview.cpp

📁 自编的有限元方法解决弹性力学平面问题的软件。有图形显示
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -