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

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

?? contourview.cpp

?? 克里金、反距離插值算法_柵格圖等值線填充等
?? CPP
字號:
// ContourView.cpp : implementation file
//

#include "stdafx.h"
#include "WaferPainter.h"
#include "ContourView.h"
#include "InverseDist.h"
#include "MainFrm.h"
#include "Kriging.h"
#include <algorithm>
#include <fstream>

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

static COLORREF Colors[11] = { RGB(127, 127, 127), RGB(0, 0, 127), RGB(0, 0, 255), RGB(0, 127, 127), RGB(0, 255, 0), 
						RGB(127, 127, 0), RGB(255, 255, 0), RGB(0, 255, 255), RGB(255, 0, 255), RGB(255, 127, 0), 
						RGB(255, 0, 0) };

const int FLAT_HEIGHT = 600;
const int LEGEND_WIDTH = 200;

/////////////////////////////////////////////////////////////////////////////
// CContourView

IMPLEMENT_DYNCREATE(CContourView, CView)

CContourView::CContourView() : m_pImage(NULL), m_bImageReady(false), m_nZoom(3), m_nBaseWidth(208), m_nBaseHeight(208),
m_nNumOfLevels(11), m_bLegend(true), m_bValues(true), m_dThickMax(0), m_dThickMin(0)
{
}

CContourView::~CContourView()
{
	if(m_pImage)
		delete m_pImage;
}


BEGIN_MESSAGE_MAP(CContourView, CView)
	//{{AFX_MSG_MAP(CContourView)
	ON_COMMAND(ID_SHOWVALUES, OnShowvalues)
	ON_COMMAND(ID_SHOWLEGEND, OnShowlegend)
	ON_UPDATE_COMMAND_UI(ID_SHOWVALUES, OnUpdateShowvalues)
	ON_UPDATE_COMMAND_UI(ID_SHOWLEGEND, OnUpdateShowlegend)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CContourView drawing

void CContourView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
	if(m_bImageReady) {
		try {
			m_pImage->Draw(pDC, 0, 0, m_nZoom);
		} catch(CImageException& e) {
			::AfxMessageBox(e.what());
			m_bImageReady = false;
		}

		if(m_bValues)
			DrawValues(pDC);

		if(m_bLegend)
			DrawLegend(pDC);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CContourView diagnostics

#ifdef _DEBUG
void CContourView::AssertValid() const
{
	CView::AssertValid();
}

void CContourView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CContourDoc* CContourView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CContourDoc)));
	return (CContourDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CContourView message handlers

void CContourView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	CWaferPainterApp* pApp = static_cast<CWaferPainterApp*>(::AfxGetApp());
	int nDia = pApp->m_nDiameter;
	int nDiameter = 200;
	if(nDia == 1)
		nDiameter = 300;
	int nInterpolater = pApp->m_nInterpolater;

	CWaitCursor wait;

	CContourDoc* pDoc = GetDocument();
	vector<Point3D>& input = const_cast<vector<Point3D>&>(pDoc->m_ir.Get3DPoints());

	Interpolater* pInterpolater = NULL;
	if(nInterpolater == 0)
		pInterpolater = new InverseDist(200, 4);
	else if(nInterpolater == 1)
		pInterpolater = new Kriging(input.begin(), input.end(), 4);

	vector<double> vecZs;
	int nRadius = nDiameter / 2;
	for(int i=0; i<nDiameter; i++) {
		for(int j=0; j<nDiameter; j++) {
			double z = pInterpolater->GetInterpolatedZ(j - nRadius, i - nRadius, input.begin(), input.end());
			vecZs.push_back(z);			
		}
	}

	delete pInterpolater;

	vector<double>::iterator iter;
	iter = max_element(vecZs.begin(), vecZs.end());
	m_dThickMax = *iter;
	iter = min_element(vecZs.begin(), vecZs.end());
	m_dThickMin = *iter;
	double interval = (m_dThickMax - m_dThickMin) / (m_nNumOfLevels - 1);

	// fill in CDib structure
	int size = nDiameter * nDiameter;
	int iWidthBytes = ((nDiameter * 24 + 15) & ~15) >> 3 ;
	DWORD dwImgSize = iWidthBytes * nDiameter;

	// Data bits
	LPBYTE pDibBits;
	pDibBits = new BYTE[dwImgSize];
	LPBYTE pBit = pDibBits;

	for(i=0; i<vecZs.size(); i++) {
		double z = vecZs[i];
		int index = (int)((z - m_dThickMin) / interval);
		*pBit = GetBValue(Colors[index]);
		pBit++;
		*pBit = GetGValue(Colors[index]);
		pBit++;
		*pBit = GetRValue(Colors[index]);
		pBit++;
	}

	m_pImage = new CDib;
	try {
		m_pImage->Create(nDiameter, nDiameter, pDibBits);
	} catch(CImageException& e) {
		::AfxMessageBox(e.what());
		delete[] pDibBits;
		return;
	}
	m_bImageReady = true;

	ResizeFrame();
}

void CContourView::ResizeFrame()
{
	CMDIChildWnd* pChild = static_cast<CMDIChildWnd*>(GetParent());
	int nWidth = m_nBaseWidth * m_nZoom + 2*(::GetSystemMetrics(SM_CXSIZEFRAME)+::GetSystemMetrics(SM_CXEDGE));
	int nHeight = m_nBaseHeight * m_nZoom + 2*(::GetSystemMetrics(SM_CYSIZEFRAME)+::GetSystemMetrics(SM_CYEDGE))
		+ ::GetSystemMetrics(SM_CYCAPTION);
	if(m_bLegend)
		nWidth += LEGEND_WIDTH;

	WINDOWPLACEMENT wp;
	pChild->GetWindowPlacement(&wp);
	pChild->MoveWindow(wp.rcNormalPosition.left, wp.rcNormalPosition.top, nWidth, nHeight);
}

void CContourView::DrawValues(CDC* pDC)
{
	CContourDoc* pDoc = GetDocument();
	vector<Point3D>& input = const_cast<vector<Point3D>&>(pDoc->m_ir.Get3DPoints());

	CBrush br;
	br.CreateSolidBrush(RGB(0, 0, 0));
	CBrush* pOld;
	pOld = pDC->SelectObject(&br);
	CString thickness;
	pDC->SetBkMode(TRANSPARENT);
	for(int i=0; i<input.size(); i++) {
		int x1 = (int)(m_nZoom*(input[i].x+m_nBaseWidth/2-1));
		int y1 = (int)(m_nZoom*(0.5 * m_nBaseHeight-input[i].y+1));
		int x2 = (int)(m_nZoom*(input[i].x+m_nBaseWidth/2+1));
		int y2 = (int)(m_nZoom*(0.5 * m_nBaseHeight-input[i].y-1));
		pDC->Ellipse(x1, y1, x2, y2);
		thickness.Format(_T("%4.2f"), input[i].z);
		pDC->TextOut(x1-20, y1+4, thickness);
	}
	pDC->SelectObject(pOld);
}

void CContourView::DrawLegend(CDC* pDC)
{
	const int RECT_HEIGHT = 18;
	const int RECT_WIDTH = 40;

	int x1 = m_nZoom * m_nBaseWidth + 10;
	pDC->Rectangle(x1, 16, x1+164, (m_nNumOfLevels+1)*(RECT_HEIGHT+2));
	CString thickness;
	double interval = (m_dThickMax - m_dThickMin) / m_nNumOfLevels;
	for(int i=0; i<m_nNumOfLevels; i++) {
		CBrush br;
		br.CreateSolidBrush(Colors[i]);
		pDC->SelectObject(&br);
		pDC->Rectangle(x1+3, 20+i*20, x1+RECT_WIDTH, 30+i*20);
		thickness.Format(_T("%4.2f - %4.2f"), m_dThickMin+(i*interval), m_dThickMin+((i+1)*interval));
		pDC->TextOut(x1+RECT_WIDTH+4, 20+i*20, thickness);
	}
}

void CContourView::OnShowvalues() 
{
	// TODO: Add your command handler code here
	m_bValues = !m_bValues;
	Invalidate();
}

void CContourView::OnShowlegend() 
{
	// TODO: Add your command handler code here
	m_bLegend = !m_bLegend;
	Invalidate();
	ResizeFrame();
}

void CContourView::OnUpdateShowvalues(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bValues);
}

void CContourView::OnUpdateShowlegend(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bLegend);
}

void CContourView::OnEditCopy() 
{
	// TODO: Add your command handler code here
	if(!m_bImageReady)
		return;
	CWaitCursor wait;

	CClientDC scrDC(this);
	CDC memDC;           // screen DC and memory DC
	CBitmap bitmap;
	CBitmap* pOldBitmap;  // handles to deice-dependent bitmaps

	CRect rect;
	GetClientRect(&rect);

	memDC.CreateCompatibleDC(&scrDC);
	/* create a bitmap compatible with the screen DC */
	bitmap.CreateCompatibleBitmap(&scrDC, rect.Width(), rect.Height());

	pOldBitmap = memDC.SelectObject(&bitmap);// select new bitmap into memory DC

	memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &scrDC, 0, 0, SRCCOPY);
	HBITMAP hBitmap = (HBITMAP)bitmap.Detach();

	memDC.SelectObject(pOldBitmap);

	// Place the copy on the clipboard.
	::OpenClipboard(m_hWnd);
    ::EmptyClipboard();
    ::SetClipboardData(CF_BITMAP, hBitmap);
    ::CloseClipboard();

	// clean up 
	memDC.DeleteDC();
}

void CContourView::OnFileSave() 
{
	// TODO: Add your command handler code here
	CWaitCursor wait;

	CClientDC scrDC(this);
	CDC memDC;           // screen DC and memory DC
	CBitmap bitmap;
	CBitmap* pOldBitmap;  // handles to deice-dependent bitmaps

	CRect rect;
	GetClientRect(&rect);

	memDC.CreateCompatibleDC(&scrDC);
	bitmap.CreateCompatibleBitmap(&scrDC, rect.Width(), rect.Height());

	pOldBitmap = memDC.SelectObject(&bitmap);// select new bitmap into memory DC

	memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &scrDC, 0, 0, SRCCOPY);

	TCHAR szFilters[] = _T ("bmp files (*.bmp)|*.bmp|All files (*.*)|*.*||");
	CFileDialog dlg(FALSE, _T ("bmp"), _T ("*.bmp"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		szFilters);
	
	CString filename;
	if(dlg.DoModal() == IDOK)
		filename = dlg.GetPathName();
	else
		return;
 
	CDib dib;
	try {
		dib.Create(&bitmap);
		dib.Save(filename);
	} catch(CImageException& e) {
		::AfxMessageBox(e.what());
	}

	memDC.SelectObject(pOldBitmap);
	memDC.DeleteDC();

	CContourDoc* pDoc = GetDocument();
	pDoc->SetTitle(dlg.GetFileName());
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文一区二区三区| 久久精品视频网| 精品人在线二区三区| 久久精品免费在线观看| 亚洲综合清纯丝袜自拍| 国产精品一二三四五| 欧美精选一区二区| 成人免费一区二区三区在线观看| 日本免费新一区视频| 色偷偷一区二区三区| 国产欧美日韩视频在线观看| 蜜臀av一区二区在线观看| 色天使色偷偷av一区二区| 久久久激情视频| 久久激五月天综合精品| 91精品国产高清一区二区三区 | a4yy欧美一区二区三区| 日韩网站在线看片你懂的| 亚洲精品高清视频在线观看| 成人av在线一区二区三区| 精品国产3级a| 麻豆国产精品777777在线| 欧美日韩国产高清一区| 亚洲一区免费视频| 95精品视频在线| 综合欧美亚洲日本| www.一区二区| 亚洲欧美综合另类在线卡通| 丁香天五香天堂综合| 国产午夜精品理论片a级大结局| 久久99国产精品久久99| 日韩一区二区在线播放| 日韩激情视频在线观看| 欧美久久久影院| 午夜久久久久久久久| 欧美日韩视频在线观看一区二区三区 | 制服视频三区第一页精品| 一级做a爱片久久| 欧美在线你懂得| 日韩精品91亚洲二区在线观看| 欧美日韩免费高清一区色橹橹 | 成人av第一页| 中文字幕日韩欧美一区二区三区| 成人激情视频网站| 综合久久给合久久狠狠狠97色| 99久久99久久综合| 亚洲欧美一区二区三区极速播放| 色综合久久久久久久久久久| 亚洲图片欧美色图| 4hu四虎永久在线影院成人| 日本麻豆一区二区三区视频| 国产亚洲欧美一区在线观看| 成人av免费在线| 一区二区三区视频在线观看| 欧美精品乱人伦久久久久久| 狠狠网亚洲精品| 国产精品灌醉下药二区| 在线精品视频小说1| 日韩精品91亚洲二区在线观看| 欧美va在线播放| 99久久免费国产| 三级在线观看一区二区| 久久夜色精品国产噜噜av| 东方aⅴ免费观看久久av| 一区二区三区毛片| 日韩欧美色电影| 91香蕉视频污| 另类小说综合欧美亚洲| 国产精品传媒视频| 91.xcao| 国产suv精品一区二区883| 亚洲精品成a人| 欧美精品一区二区三区视频| 91免费视频大全| 精品一区二区三区在线播放 | 欧美精品一区二区三区高清aⅴ | 日韩欧美国产wwwww| 成人激情午夜影院| 日韩avvvv在线播放| 亚洲国产精品成人综合色在线婷婷 | 日本视频免费一区| 欧美国产欧美亚州国产日韩mv天天看完整| 91啦中文在线观看| 精品一区二区三区免费| 一区二区三区在线视频免费| 久久综合九色综合欧美98| 欧美综合久久久| 不卡视频在线看| 韩国欧美国产一区| 午夜精品一区二区三区三上悠亚| 国产午夜亚洲精品羞羞网站| 91精品国产一区二区三区| 91浏览器打开| 成人午夜看片网址| 国产在线视频一区二区三区| 亚洲va天堂va国产va久| 国产精品久久久久久久久果冻传媒| wwwwxxxxx欧美| 欧美成人一区二区三区| 制服丝袜av成人在线看| 欧美视频一区在线观看| 色综合久久六月婷婷中文字幕| 国产福利一区在线| 国产尤物一区二区在线| 免费欧美在线视频| 日韩二区三区四区| 亚洲chinese男男1069| 亚洲视频免费观看| 中文字幕一区二区三区四区 | 无码av中文一区二区三区桃花岛| 亚洲色图丝袜美腿| 国产精品色噜噜| 国产欧美日韩精品一区| 国产亚洲女人久久久久毛片| 日韩三级视频在线看| 欧美电影在线免费观看| 在线成人av网站| 在线播放91灌醉迷j高跟美女| 欧美性色黄大片| 欧美色图在线观看| 制服丝袜av成人在线看| 欧美一卡在线观看| 欧美一区二区性放荡片| 日韩精品中文字幕一区二区三区| 日韩午夜激情电影| 精品成人一区二区三区| 国产日韩欧美精品电影三级在线| 亚洲国产精品成人综合| 成人免费小视频| 亚洲综合在线五月| 午夜精品久久久| 久久国产麻豆精品| 丁香另类激情小说| jiyouzz国产精品久久| 91国模大尺度私拍在线视频| 欧美日韩中文字幕精品| 日韩欧美一级二级三级久久久| 久久久亚洲高清| 中文字幕一区二| 亚洲mv在线观看| 国产在线播放一区| 波多野结衣中文字幕一区二区三区| 91香蕉视频污在线| 日韩欧美一区二区不卡| 欧美国产视频在线| 亚洲成人av电影在线| 久久99这里只有精品| 成人性生交大片| 欧美日韩的一区二区| 久久精品人人做| 一区二区三区免费看视频| 美女一区二区在线观看| caoporm超碰国产精品| 在线播放日韩导航| 中文字幕一区三区| 日韩精品五月天| 91小宝寻花一区二区三区| 欧美一区二区三区四区久久| 国产情人综合久久777777| 午夜精品福利一区二区三区蜜桃| 国产曰批免费观看久久久| 精品视频在线免费观看| 中文字幕精品综合| 日韩va欧美va亚洲va久久| 91丨九色丨黑人外教| 精品久久久久久久久久久久久久久| 中文字幕一区二区视频| 国产在线精品免费| 6080国产精品一区二区| 中文字幕在线不卡一区二区三区| 久久激情五月激情| 欧美另类videos死尸| 国产精品每日更新| 韩国在线一区二区| 欧美另类变人与禽xxxxx| 综合久久给合久久狠狠狠97色| 国产一区二区精品久久| 555夜色666亚洲国产免| 亚洲国产日产av| 91极品视觉盛宴| 亚洲欧美在线视频观看| 国产成人精品一区二区三区四区| 欧美一区二区精品在线| 五月天中文字幕一区二区| 色天使久久综合网天天| 国产精品高潮呻吟久久| 国产乱码一区二区三区| 日韩一二三区视频| 午夜av一区二区三区| 色狠狠色噜噜噜综合网| 国产精品不卡在线观看| 懂色av中文一区二区三区| 久久亚洲一级片| 久久99精品久久久久久动态图| 69堂精品视频| 日韩在线a电影| 欧美精品日韩一区| 日韩影院在线观看| 欧美一区午夜视频在线观看| 日韩av不卡一区二区|