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

📄 printview.cpp

📁 本人自编的另一个有限元软件
💻 CPP
字号:
// PrintView.cpp : implementation file
//

#include "stdafx.h"
#include "FiniteElec.h"
#include "PrintView.h"
#include "FiniteElecDoc.h"
#include "Element.h"
#include "math.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPrintView

IMPLEMENT_DYNCREATE(CPrintView, CScrollView)

CPrintView::CPrintView()
{
	EnableAutomation();
	Init();
}

CPrintView::~CPrintView()
{
}

void CPrintView::OnFinalRelease()
{
	// When the last reference for an automation object is released
	// OnFinalRelease is called.  The base class will automatically
	// deletes the object.  Add additional cleanup required for your
	// object before calling the base class.

	CScrollView::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(CPrintView, CScrollView)
	//{{AFX_MSG_MAP(CPrintView)
	ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
	ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
	ON_COMMAND(ID_VIEW_GODOWN, OnViewGodown)
	ON_COMMAND(ID_VIEW_GOLEFT, OnViewGoleft)
	ON_COMMAND(ID_VIEW_GORIGHT, OnViewGoright)
	ON_COMMAND(ID_VIEW_GOUP, OnViewGoup)
	ON_COMMAND(ID_VIEW_RESET, OnViewReset)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(CPrintView, CScrollView)
	//{{AFX_DISPATCH_MAP(CPrintView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_IPrintView to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {42D92017-98E1-43B5-8099-AC91334F1DFF}
static const IID IID_IPrintView =
{ 0x42d92017, 0x98e1, 0x43b5, { 0x80, 0x99, 0xac, 0x91, 0x33, 0x4f, 0x1d, 0xff } };

BEGIN_INTERFACE_MAP(CPrintView, CScrollView)
	INTERFACE_PART(CPrintView, IID_IPrintView, Dispatch)
END_INTERFACE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPrintView drawing

void CPrintView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}
//_______________________________
///////////////////////////////////
//绘制数据完全由CStructure决定
void CPrintView::OnDraw(CDC* pDC)
{
	CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
	////----------------------
	if(m_tagView==0&&pDoc->m_isLoaded)
	{
//		pDC->TextOut(m_line*5,m_line*5,"这里显示区域的形态");
		DrawInputGraph(pDC);
	}
	else if(m_tagView==1&&pDoc->m_structure.m_solved)
	{
		DrawOutputGraph(pDC);
//		pDC->TextOut(m_line*5,m_line*5,"这里显示等值图");
	}
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CPrintView diagnostics

#ifdef _DEBUG
void CPrintView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CPrintView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPrintView message handlers
///////////////////
///初始化数据
void CPrintView::Init()
{
	m_line=20;
	m_page=m_line*20;
	m_scale=1.0;
//	m_tagView=100;
	m_xoy=CPoint(5*m_line,20*m_line);
}
//////////////////////////////////
////
void CPrintView::DrawInputGraph(CDC *pDC)
{
	CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
	int width;
	width=int(sqrt(pDoc->m_structure.m_nodeArray.GetSize())*1)*m_line;
	SetScrollSizes(MM_TEXT,CSize(width,width));

//-----------------------------------------
	CElement* pElement;
	int i;
	for(i=0;i<pDoc->m_structure.m_elementArray.GetSize();i++)
	{	pDoc->m_structure.m_elementArray.GetSize();
		//绘制每个单元,调用单元的绘制函数
		pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
		pElement->DrawFrame(pDC,m_xoy,m_scale);
	}
}

void CPrintView::DrawOutputGraph(CDC *pDC)
{
	CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
	int width;
	width=int(sqrt(pDoc->m_structure.m_nodeArray.GetSize())*1)*m_line;
	SetScrollSizes(MM_TEXT,CSize(width,width));
//------------------------------------------
	CElement* pElement;
	CNode* pNode;
	int i;
	double max,min,temp;
	max=min=((CNode*)(pDoc->m_structure.m_nodeArray.GetAt(0)))->m_nodeValue;
	for(i=0;i<pDoc->m_structure.m_nodeArray.GetSize();i++)
	{//求出区域内电压值的范围
		pNode=(CNode*)(pDoc->m_structure.m_nodeArray.GetAt(i));
		temp=pNode->m_nodeValue;
		if(temp>=max)max=temp;
		else if(temp<min)min=temp;
	}
	//-----------------------------
	for(i=0;i<pDoc->m_structure.m_elementArray.GetSize();i++)
	{	pDoc->m_structure.m_elementArray.GetSize();
		//绘制每个单元,调用单元的绘制函数
		pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
		pElement->DrawEqualValueGraph(pDC,m_xoy,min,max,m_scale);
	}
}
/////////////////////////////////////////
//
void CPrintView::OnViewZoomin() 
{
	m_scale+=0.5f;// 一次增加0.5倍
	m_line=int(m_line*m_scale);
	m_page=int(m_page*m_scale);
	GetDocument()->UpdateAllViews(NULL);
//	OnViewGodown();
}

void CPrintView::OnViewZoomout() 
{
	m_scale-=0.5f;// 一次减小0.5倍
	if(m_scale<=0)m_scale=0;
	m_line=int(m_line*m_scale);
	m_page=int(m_page*m_scale);
//	GetDocument()->UpdateAllViews(this);//这种情况下将不会更新自身了。
	GetDocument()->UpdateAllViews(NULL);
//	OnViewGoup();
}
///////////////////////////////////////
///移动图形
void CPrintView::OnViewGoleft() 
{
	m_xoy.x-=40;	
	GetDocument()->UpdateAllViews(NULL);
//	OnInitialUpdate();
}
void CPrintView::OnViewGoright() 
{
	m_xoy.x+=40;	
	GetDocument()->UpdateAllViews(NULL);
//	OnInitialUpdate();
}
void CPrintView::OnViewGodown() 
{
	m_xoy.y+=40;	
	GetDocument()->UpdateAllViews(NULL);
//	OnInitialUpdate();
}
void CPrintView::OnViewGoup() 
{
	m_xoy.y-=40;	
	GetDocument()->UpdateAllViews(NULL);
//	OnInitialUpdate();
}

void CPrintView::OnViewReset() 
{//回到初始状态
	Init();
	m_xoy.x=5*m_line;
	m_xoy.y=20*m_line;
	GetDocument()->UpdateAllViews(NULL);
//	OnInitialUpdate();
}

⌨️ 快捷键说明

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