亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? contourdrawer.cpp

?? 生成等值線的代碼 用VISUAL C++開發
?? CPP
字號:
// ContourDrawer.cpp: implementation of the CContourDrawer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ContourGenerator.h"
#include "Contour.h"
#include "ContourDrawer.h"
#include "ClrFileDialog.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CContourDrawer::CContourDrawer(CContour* pContour)
{
	ASSERT(pContour!=NULL);
	m_pContourOwner = pContour;

	m_ContourObjSets.RemoveAll();

	m_ScaleRatio = 1.0f;  
	m_TranslateX = 0.0f;
	m_TranslateY = 0.0f;

	m_ColorTable.SetValueRange(m_pContourOwner->GetDataOwner()->GetDataInfo().zMin,
		                       m_pContourOwner->GetDataOwner()->GetDataInfo().zMax);
}

CContourDrawer::~CContourDrawer()
{
	RemoveAllContourObjs();
}

void CContourDrawer::RemoveAllContourObjs()
{
	int nSize = m_ContourObjSets.GetSize();
	for(int i=0; i<nSize; i++)
	{
		delete m_ContourObjSets[i];
	}

	m_ContourObjSets.RemoveAll();

}

void CContourDrawer::CreateContourObjs()
{//根據m_pContourOwner中的追蹤出的等值線曲線,構造ContourObj對象

	TRACE0("CContourDrawer::CreateContourObjs()\n");

	ASSERT(m_pContourOwner!=NULL);

	RemoveAllContourObjs(); //創建之前先清除

	CGridDataInfo& dataInfo = m_pContourOwner->GetDataOwner()->GetDataInfo();
	CGeoRect gridBorder(dataInfo.xMin,dataInfo.yMin,
		                dataInfo.xMax,dataInfo.yMax);
	
	float value;
	CCurveList* pCurveList;
	int numVals = m_pContourOwner->GetNumberOfValues();
	for(int i=0; i<numVals; i++)
	{
		pCurveList = m_pContourOwner->GetContours().GetAt(i);	
		ASSERT( pCurveList!=NULL );

        value = m_pContourOwner->GetValue(i);
		
		POSITION pos = pCurveList->GetHeadPosition();
		CCurve* pCtrLine = NULL;
			
		CContourObj* pCntrObj = NULL;
		while (pos!=NULL)
		{
			pCtrLine = pCurveList->GetNext(pos);
			ASSERT(pCtrLine->GetSize()>=2); //一條等值線曲線至少有2個點

			//創建ContourObj對象,并存入鏈表中
			pCntrObj = new CContourObj(pCtrLine,value);
			ASSERT(pCntrObj!=NULL);
			m_ContourObjSets.Add(pCntrObj);			
		}
		
	}

}

//---計算縮放比例和平移量---
void CContourDrawer::CalcScaleRatioAndTranslateXY(CDC* pDC,const CRect& drawRect)
{
	int oldMapMode = pDC->GetMapMode();
	pDC->SetMapMode(MM_LOENGLISH); //使y軸向上
	
	CRect rt(drawRect);
	pDC->DPtoLP(&rt);
	
	CGridDataInfo& dataInfo = m_pContourOwner->GetDataOwner()->GetDataInfo(); 
	CGeoRect mapRect(dataInfo.xMin,dataInfo.yMin,dataInfo.xMax,dataInfo.yMax);
	
	int rtW = rt.Width();
	int rtH = abs(rt.Height());
	float width  = mapRect.Width();
	float height = mapRect.Height();

	m_ScaleRatio = (width/rtW > height/rtH) ? width/rtW : height/rtH ; //取比例大的
	
	mapRect.Scale(m_ScaleRatio); //計算比例變換后的平移量
	m_TranslateX =  rt.CenterPoint().x - mapRect.CenterPoint().x; //x方向平移量
	m_TranslateY =  rt.CenterPoint().y - mapRect.CenterPoint().y; //y方向平移量

	pDC->SetMapMode(oldMapMode);

	TRACE3("ratio=%f,Movex=%f,Movey=%f\n",m_ScaleRatio,m_TranslateX,m_TranslateY);
	
}

void CContourDrawer::DoDraw(CDC* pDC, const CRect& drawRect)
{
	//把等值線區域居中顯示在繪制矩形drawRect中
	ASSERT(m_pContourOwner!=NULL);

	//1.如果Contour重新成生了,則就重新創建Contour繪制對象
	if(m_pContourOwner->IsGeneratingAgain())
		CreateContourObjs();

	//2.在繪制之前必須先計算好縮放比例和平移量
	CalcScaleRatioAndTranslateXY(pDC,drawRect);
	
	//3.先畫網格邊框
	DrawGridBorder(pDC);
	
	//4.再畫等值線
	DrawContours(pDC);

}

//繪制網格邊框
void CContourDrawer::DrawGridBorder(CDC* pDC)
{
	ASSERT( m_pContourOwner!=NULL );

	int oldMapMode = pDC->GetMapMode();
	pDC->SetMapMode(MM_LOENGLISH);
	
	CPen greenPen;
	greenPen.CreatePen(PS_SOLID,1,RGB(0,255,0));
	CPen* oldPen = pDC->SelectObject(&greenPen);

	CGridDataInfo& dataInfo = m_pContourOwner->GetDataOwner()->GetDataInfo(); 
	CGeoRect mapRect(dataInfo.xMin,dataInfo.yMin,dataInfo.xMax,dataInfo.yMax);
		
	mapRect.Scale(m_ScaleRatio);
	mapRect.Translate(m_TranslateX,m_TranslateY);

	pDC->MoveTo(int(mapRect.left), int(mapRect.top));
	pDC->LineTo(int(mapRect.right),int(mapRect.top));
	pDC->LineTo(int(mapRect.right),int(mapRect.bottom));
	pDC->LineTo(int(mapRect.left), int(mapRect.bottom));
	pDC->LineTo(int(mapRect.left), int(mapRect.top));
	
	pDC->SelectObject(oldPen);
	pDC->SetMapMode(oldMapMode);
}

void CContourDrawer::DrawContours(CDC* pDC)
{//繪制Contour對象,在繪制之前,必須做好繪制順序的排序(調用SortDrawOrder函數)
	ASSERT( m_pContourOwner!=NULL );
	ASSERT( m_ScaleRatio!=0 );
	
	int oldMapMode = pDC->GetMapMode();
	pDC->SetMapMode(MM_LOENGLISH);

	CContourObj* pContourObj = NULL;
	
	int nSize = m_ContourObjSets.GetSize();

	for(int i=0; i<nSize; i++)
	{
		pContourObj = m_ContourObjSets[i];
		pContourObj->Draw(pDC,m_ColorTable,
			              m_ScaleRatio,m_TranslateX,m_TranslateY);
	}

	pDC->SetMapMode(oldMapMode);

}

void CContourDrawer::ModifyColorTable()
{
	CClrFileDialog Dlg(
		TRUE, // TRUE for FileOpen, FALSE for FileSaveAs
		"clr",
		"*.clr",	//LPCTSTR lpszFileName = NULL,
		OFN_HIDEREADONLY  | OFN_OVERWRITEPROMPT | OFN_ENABLETEMPLATE,
		"Data Files (*.clr) | *.clr ||",
		NULL);
	if(Dlg.DoModal()!=IDOK)
		return;
	
	m_ColorTable.LoadColorTable(Dlg.GetPathName());
	

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡的av| 欧美国产激情二区三区| 欧美影院一区二区三区| 91免费在线看| 欧美在线视频日韩| 欧美三级中文字幕| 欧美二区在线观看| 91精品国产综合久久久久| 91精品国产色综合久久不卡电影| 欧美日韩三级一区二区| 精品视频999| 欧美喷水一区二区| 日韩视频免费直播| 精品少妇一区二区三区在线视频| 中文字幕国产精品一区二区| 国产三级精品三级在线专区| 国产精品免费看片| 成人欧美一区二区三区在线播放| 日韩一区日韩二区| 一区二区三区中文字幕| 午夜精品久久久| 免费美女久久99| 国产乱国产乱300精品| 国产成人av影院| 99国产精品国产精品毛片| 色噜噜狠狠色综合欧洲selulu| 日本道免费精品一区二区三区| 欧美中文字幕一区| 在线成人免费视频| 久久久久久久久蜜桃| 国产精品免费视频网站| 亚洲一区在线观看免费| 日韩av一区二区三区四区| 日本亚洲三级在线| 国产69精品久久久久777| 91网页版在线| 7777女厕盗摄久久久| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品久久久久久久久免费桃花 | 精品日韩一区二区三区免费视频| 久久久夜色精品亚洲| 樱花影视一区二区| 久久国产精品99久久久久久老狼| 风间由美一区二区av101| 一本大道久久a久久精二百| 欧美疯狂做受xxxx富婆| 中文字幕国产精品一区二区| 亚洲国产精品久久艾草纯爱| 精品亚洲aⅴ乱码一区二区三区| 处破女av一区二区| 欧美日韩另类国产亚洲欧美一级| 久久久精品中文字幕麻豆发布| 一区二区欧美视频| 国产激情精品久久久第一区二区| 日本韩国精品一区二区在线观看| 欧美α欧美αv大片| 亚洲男人都懂的| 91福利在线观看| 精品美女被调教视频大全网站| 中文字幕人成不卡一区| 男男视频亚洲欧美| 91蜜桃免费观看视频| 日韩一级免费一区| 一区二区在线免费观看| 国产精品综合二区| 91麻豆精品国产91久久久久久| 国产精品色哟哟| 久久精品国产亚洲aⅴ| 91久久免费观看| 国产欧美一区二区在线| 开心九九激情九九欧美日韩精美视频电影 | 美国av一区二区| 欧美主播一区二区三区| 国产精品视频看| 韩国三级电影一区二区| 欧美日韩国产高清一区| 亚洲欧洲精品一区二区精品久久久| 免费看欧美美女黄的网站| 欧美亚洲高清一区二区三区不卡| 欧美激情在线一区二区| 久久er99精品| 91精品国产麻豆| 亚洲国产精品尤物yw在线观看| kk眼镜猥琐国模调教系列一区二区| 欧美成人女星排名| 无码av中文一区二区三区桃花岛| 91性感美女视频| 日本一区二区三区四区| 韩国午夜理伦三级不卡影院| 91精品国产综合久久蜜臀| 亚洲成人自拍偷拍| 欧美三级视频在线观看| 亚洲自拍偷拍图区| 日本高清不卡一区| 亚洲人成亚洲人成在线观看图片| 成人一级黄色片| 欧美国产精品专区| 成人夜色视频网站在线观看| 国产亚洲一区二区在线观看| 国内精品国产成人国产三级粉色| 欧美一区二区高清| 日韩中文欧美在线| 日韩女同互慰一区二区| 麻豆精品久久久| 久久众筹精品私拍模特| 国产成人在线视频网站| 中文字幕免费观看一区| www.日韩精品| 亚洲男人都懂的| 欧美在线视频你懂得| 亚洲va欧美va国产va天堂影院| 欧美性做爰猛烈叫床潮| 亚洲一卡二卡三卡四卡无卡久久| 日本韩国欧美在线| 亚洲一区二区三区视频在线播放 | 成人免费高清在线| 国产精品国产三级国产| 99r国产精品| 亚洲综合色噜噜狠狠| 欧美日韩一本到| 蜜桃av一区二区| 国产婷婷精品av在线| 99久久99久久精品免费观看 | 亚洲超碰精品一区二区| 91精品国产综合久久国产大片| 日本麻豆一区二区三区视频| 精品乱码亚洲一区二区不卡| 国内精品久久久久影院薰衣草| 国产欧美日韩不卡免费| 色综合天天综合色综合av| 亚洲图片自拍偷拍| 日韩一区二区三区四区五区六区| 国产一区二区不卡老阿姨| 1区2区3区欧美| 欧美麻豆精品久久久久久| 精品中文字幕一区二区小辣椒 | 久久精品99国产精品| 国产日韩欧美综合一区| 91片在线免费观看| 日韩精品亚洲一区二区三区免费| 日韩三级.com| 99久久精品免费观看| 亚洲成a人片在线观看中文| 久久综合成人精品亚洲另类欧美 | 国产欧美精品区一区二区三区 | 色综合中文字幕国产 | 亚洲一区二区综合| 日韩女优毛片在线| av一区二区三区四区| 亚洲成av人影院在线观看网| 久久久一区二区三区捆绑**| 91猫先生在线| 麻豆91精品视频| 中文字幕亚洲在| 6080yy午夜一二三区久久| 国产成人免费视频网站 | 婷婷丁香激情综合| 日本一区二区综合亚洲| 欧美日韩一区国产| 国产麻豆91精品| 亚洲va天堂va国产va久| 国产精品伦理在线| 56国语精品自产拍在线观看| 波多野结衣中文字幕一区二区三区 | 日韩一区二区免费电影| av在线这里只有精品| 精品综合久久久久久8888| 亚洲综合成人在线| 欧美激情一区二区三区| 4438x亚洲最大成人网| 91在线观看地址| 国产久卡久卡久卡久卡视频精品| 亚洲一区二区三区四区不卡| 中文字幕av在线一区二区三区| 欧美一区二区三区视频在线| 91丨porny丨户外露出| 国产精品亚洲视频| 美国精品在线观看| 亚洲高清免费视频| 亚洲男人的天堂网| 国产精品色呦呦| 国产午夜精品美女毛片视频| 制服.丝袜.亚洲.中文.综合| 91在线视频18| 成人一级视频在线观看| 精品亚洲国内自在自线福利| 亚洲超碰97人人做人人爱| 亚洲激情校园春色| 国产精品久久久爽爽爽麻豆色哟哟| 日韩精品中午字幕| 欧美一区二区三区成人| 欧美少妇一区二区| 在线精品国精品国产尤物884a| 成人看片黄a免费看在线| 国产一区91精品张津瑜| 精品一区二区影视| 久久99精品久久只有精品| 免费观看一级欧美片| 日韩精品电影一区亚洲| 婷婷久久综合九色综合伊人色|