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

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

?? contourdrawer.cpp

?? 等值線追蹤與繪制(源代碼)(1.0).rar
?? 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一区二区三区免费野_久草精品视频
69堂亚洲精品首页| 黑人精品欧美一区二区蜜桃| 日本中文字幕一区二区视频| 男人的天堂亚洲一区| 国产九九视频一区二区三区| av激情成人网| 欧美区视频在线观看| 26uuu另类欧美亚洲曰本| 国产精品久久久久一区二区三区共| 亚洲私人影院在线观看| 午夜精品免费在线| 国产精品一区三区| 欧洲精品一区二区| 日韩欧美成人激情| 亚洲同性gay激情无套| 日精品一区二区三区| 国产福利一区二区三区视频在线 | 成人黄页毛片网站| 欧美色欧美亚洲另类二区| 精品少妇一区二区| 亚洲欧美福利一区二区| 麻豆国产欧美日韩综合精品二区 | 制服丝袜亚洲色图| 国产婷婷色一区二区三区四区 | 粉嫩av一区二区三区在线播放 | 亚洲视频免费在线| 青青草原综合久久大伊人精品 | 在线看日本不卡| 欧美精品一区二区蜜臀亚洲| 亚洲美女视频在线观看| 精品一区二区三区免费毛片爱| 97久久超碰国产精品| 欧美大胆一级视频| 亚洲一区二区美女| 国产成人免费视频网站高清观看视频 | 一本色道久久综合亚洲aⅴ蜜桃| 欧美一区二区久久久| 国产精品久久久久久久岛一牛影视| 日韩高清一级片| 99re成人精品视频| 久久久.com| 青青草国产成人av片免费| 一本色道a无线码一区v| 久久亚洲一区二区三区四区| 无码av中文一区二区三区桃花岛| 成人av综合一区| 精品国产一二三区| 午夜国产精品影院在线观看| 99久久99久久久精品齐齐| 久久综合一区二区| 人人精品人人爱| 欧美三级资源在线| 亚洲婷婷综合色高清在线| 国产高清在线精品| 精品成人a区在线观看| 视频精品一区二区| 欧美亚洲综合一区| 中文字幕亚洲不卡| 国产91精品在线观看| 久久综合久久综合亚洲| 免费在线看成人av| 欧美日韩的一区二区| 亚洲宅男天堂在线观看无病毒| 波多野结衣91| 国产校园另类小说区| 精品一区二区三区在线观看国产| 欧美精品自拍偷拍| 亚洲线精品一区二区三区八戒| 91在线视频网址| 国产精品乱子久久久久| 国产99久久久国产精品潘金 | 首页国产欧美日韩丝袜| 欧美亚洲尤物久久| 亚洲精品videosex极品| 91福利在线看| 一区二区三区在线免费| 91久久精品一区二区三| 亚洲欧美日韩国产成人精品影院| 99久久夜色精品国产网站| 国产精品久久久久久福利一牛影视| 福利一区二区在线观看| 日本一区二区在线不卡| 国产69精品久久777的优势| 欧美国产综合一区二区| 波多野结衣亚洲| 综合亚洲深深色噜噜狠狠网站| 99视频有精品| 亚洲精品国产a久久久久久 | 天天色综合天天| 欧美日韩国产一区二区三区地区| 亚洲国产毛片aaaaa无费看| 欧美日韩色综合| 奇米色一区二区三区四区| 日韩一区二区免费电影| 久久国产欧美日韩精品| 久久色在线观看| 成人国产在线观看| 亚洲少妇中出一区| 欧美性受xxxx黑人xyx性爽| 婷婷国产v国产偷v亚洲高清| 日韩视频一区二区三区在线播放| 久色婷婷小香蕉久久| 国产午夜亚洲精品理论片色戒| 成人福利视频在线看| 亚洲激情自拍视频| 3d动漫精品啪啪1区2区免费| 久久国产综合精品| 亚洲国产成人一区二区三区| 日本精品一区二区三区四区的功能| 一区二区三区免费网站| 欧美剧情片在线观看| 久久爱www久久做| 国产精品美日韩| 欧美午夜电影在线播放| 色一情一伦一子一伦一区| 亚洲图片欧美色图| 亚洲精品一区二区三区在线观看| 福利视频网站一区二区三区| 一区二区三区中文免费| 日韩美一区二区三区| 成人午夜激情片| 亚洲成人av一区| 久久综合狠狠综合| 成人av资源在线| 亚洲福利一二三区| 久久久不卡网国产精品二区 | 中文字幕亚洲视频| 日韩一区二区在线看| 成人h动漫精品一区二| 日韩综合在线视频| 欧美国产97人人爽人人喊| 欧美天天综合网| 国产精品18久久久久久vr | 在线亚洲+欧美+日本专区| 麻豆国产欧美日韩综合精品二区| 国产精品久久久久久久久免费樱桃| 欧美视频一区二区三区| 国产成人精品影视| 午夜久久久影院| 国产精品美女久久久久久久网站| 欧美精品色一区二区三区| 成人精品小蝌蚪| 日韩不卡一二三区| 亚洲精品写真福利| 久久久综合九色合综国产精品| 欧美色精品天天在线观看视频| 国产69精品久久777的优势| 日本强好片久久久久久aaa| 亚洲视频网在线直播| 久久久午夜精品| 欧美一区在线视频| 欧美最猛性xxxxx直播| 福利一区二区在线观看| 麻豆成人免费电影| 亚洲国产精品久久一线不卡| 国产精品欧美经典| 精品国产三级a在线观看| 欧美日韩精品一区二区三区| 99re亚洲国产精品| 国产成人av一区| 老司机精品视频一区二区三区| 亚洲一区二区三区四区不卡| 国产精品婷婷午夜在线观看| 精品国产免费视频| 91精品在线免费观看| 欧美在线观看视频一区二区三区| 久久久久久毛片| 日韩欧美卡一卡二| 欧美区视频在线观看| 色爱区综合激月婷婷| eeuss鲁片一区二区三区在线看| 韩国女主播成人在线观看| 日韩av网站在线观看| 亚洲国产精品久久艾草纯爱 | 处破女av一区二区| 国产精品综合视频| 国内精品不卡在线| 老司机午夜精品| 老司机午夜精品| 美国十次了思思久久精品导航| 香蕉成人伊视频在线观看| 亚洲一区二区偷拍精品| 一区二区高清免费观看影视大全 | 国产精品亚洲专一区二区三区| 久久99精品国产.久久久久久| 日韩av成人高清| 日本免费在线视频不卡一不卡二| 午夜成人免费电影| 视频在线观看一区| 日本中文字幕一区二区有限公司| 国产精品区一区二区三区| 国产精品嫩草影院av蜜臀| 精品成人一区二区三区| 精品国产精品网麻豆系列| 日韩一级二级三级| 日韩视频免费观看高清完整版在线观看 | 在线视频国内一区二区| 在线观看免费成人| 欧美日本在线观看| 欧美一区二区三区日韩|