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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? polyobj.cpp

?? 參數(shù)化車間設(shè)備資源繪制程序
?? CPP
字號:
#include "StdAfx.h"
#include "polyobj.h"
#include "visdrawview.h"
#include "visdrawdoc.h"
#include ".\polyobj.h"

//#include <math.h>

IMPLEMENT_SERIAL(CPolyObj, CFigureObj, 0)



CFloatPoint::CFloatPoint(void)
{
	pointx = 0.0;
	pointy = 0.0;
}

CFloatPoint::~CFloatPoint(void)
{
}

//////////////////////////////////////////////////////

CPolyObj::CPolyObj(void)
{
}

CPolyObj::~CPolyObj(void)
{
	//if (m_points != NULL)
	//	delete[] m_points;

	if(m_floatpoints != NULL)
		delete[] m_floatpoints;
}

CPolyObj::CPolyObj(const CRect& position)
		: CFigureObj(position)
{
	ASSERT_VALID(this);	
	m_nShape = polygonshape;
	m_points = NULL;
	m_floatpoints = NULL;
	m_nPoints = 0;
	m_nAllocPoints = 0;
}

void CPolyObj::Serialize(CArchive& ar)
{
	ASSERT_VALID(this);
	int i;
	//調(diào)用基類串行化
	CFigureObj::Serialize( ar );

	if( ar.IsStoring() )
	{
		ar << (WORD) m_nShape;
		ar << (WORD) m_nPoints;
		ar << (WORD) m_nAllocPoints;
		for (i = 0;i< m_nPoints; i++)
			ar << m_floatpoints[i].pointx << m_floatpoints[i].pointy;
	}
	else
	{
		WORD wTemp;
		ar >> wTemp; m_nShape = (Shape)wTemp;
		ar >> wTemp; m_nPoints = wTemp;
		ar >> wTemp; m_nAllocPoints = wTemp;
		m_floatpoints = new CFloatPoint[m_nAllocPoints];
		for (i = 0;i < m_nPoints; i++)
			ar >> m_floatpoints[i].pointx >> m_floatpoints[i].pointy;
	}
}

void CPolyObj::Draw(CVisDrawView* pView, CDC* pDC)
{
	ASSERT_VALID(this);

	CBrush brush;
	if (!brush.CreateBrushIndirect(&m_logbrush))
		return;
	CPen pen;
	if (!pen.CreatePenIndirect(&m_logpen))
		return;

	CBrush* pOldBrush;
	CPen* pOldPen;

	if (m_bBrush)
		pOldBrush = pDC->SelectObject(&brush);
	else
		pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);

	if (m_bPen)
		pOldPen = pDC->SelectObject(&pen);
	else
		pOldPen = (CPen*)pDC->SelectStockObject(NULL_PEN);


	//創(chuàng)建一個臨時CPoint對象數(shù)組,保存多邊形邏輯頂點邏輯坐標
	CPoint* m_points = new CPoint[m_nPoints];
		
	double ptx,pty;
	CPoint pt;

	//把所有頂點的世界坐標轉(zhuǎn)化為邏輯坐標
	for(int i = 0;i<m_nPoints;i++)
	{
		ptx = m_floatpoints[i].pointx;
		pty = m_floatpoints[i].pointy;
		pView->WorldToClient(pt,ptx,pty);
		m_points[i].x=pt.x;
		m_points[i].y =pt.y;

	}	
	
	switch(m_nShape)
	{
	case polygonshape:		//繪制多邊形

		pDC->Polygon(m_points, m_nPoints);
		break;

	case polylineshape:		//繪制多邊線

		pDC->Polyline(m_points, m_nPoints);
		break;
	}

	//刪除臨時頂點數(shù)組
	delete[] m_points;

	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}

//計算多邊形圖形元邊界矩形,以邏輯坐標表示
CRect CPolyObj::CalcBounds(CVisDrawView* pView)
{
	ASSERT_VALID(this);

	//創(chuàng)建臨時頂點邏輯坐標數(shù)組
	CPoint* m_points = new CPoint[m_nPoints];
		
	double ptx,pty;
	CPoint pt;

	//把所有頂點的世界坐標轉(zhuǎn)化為邏輯坐標
	for(int i = 0;i<m_nPoints;i++)
	{
		ptx = m_floatpoints[i].pointx;
		pty = m_floatpoints[i].pointy;
		pView->WorldToClient(pt,ptx,pty);
		m_points[i].x=pt.x;
		m_points[i].y =pt.y;

	}	

	//找出所有頂點中x,y的最大與最小值,并由矩形對象bounds保存
	CRect bounds(m_points[0], CSize(0, 0));
	for (int i = 1; i < m_nPoints; ++i)
	{
		if (m_points[i].x < bounds.left)
			bounds.left = m_points[i].x;
		if (m_points[i].x > bounds.right)
			bounds.right = m_points[i].x;
		if (m_points[i].y < bounds.top)
			bounds.top = m_points[i].y;
		if (m_points[i].y > bounds.bottom)
			bounds.bottom = m_points[i].y;
	}
	
	//刪除臨時頂點數(shù)組
	delete[] m_points;

	//保存多邊形邊界矩形
	m_position = bounds;
	
	return bounds;

}

//添加多邊形節(jié)點
void CPolyObj::AddPoint(const CPoint& point, CVisDrawView* pView)
{
	ASSERT_VALID(this);

	//參數(shù)point是邏輯坐標,需要轉(zhuǎn)化為實際坐標
	double ptx,pty;
	pView->ClientToWorld(point,ptx,pty);

	//動態(tài)創(chuàng)建數(shù)組
	if (m_nPoints == m_nAllocPoints)
	{
	
		CFloatPoint* newfloatPoints = new CFloatPoint[m_nAllocPoints + 1];
		if (m_floatpoints != NULL)
		{
			memcpy(newfloatPoints, m_floatpoints, sizeof(CFloatPoint) * m_nAllocPoints);
			delete[] m_floatpoints;
		}
		m_floatpoints = newfloatPoints;
		
		m_nAllocPoints += 1;
	}

	//如果是第一個頂點或不重合的頂點,添加到數(shù)組中去
	if(m_nPoints == 0 ||((m_floatpoints[m_nPoints - 1].pointx != ptx)
		&&(m_floatpoints[m_nPoints - 1].pointy != pty)))
	{
		m_floatpoints[m_nPoints].pointx = ptx;
		m_floatpoints[m_nPoints].pointy = pty;
		m_nPoints++;

		//如果頂點數(shù)不為0,計算多邊形邊界矩形
		if(m_nPoints != 0)
		CalcBounds(pView);

		//修改文檔標致
        pView->GetDocument()->SetModifiedFlag();
	}
	
}

//返回手柄個數(shù)
int CPolyObj::GetHandleCount()
{
	ASSERT_VALID(this);

	return m_nPoints;
}

// 返回手柄中心邏輯坐標
CPoint CPolyObj::GetHandle(CVisDrawView* pView, int nHandle)
{
	ASSERT_VALID(this);
	
	ASSERT(nHandle >= 1 && nHandle <= m_nPoints);

	double ptx,pty;
	CPoint pt;
	
	//把頂點世界坐標轉(zhuǎn)化為邏輯坐標
	ptx = m_floatpoints[nHandle - 1].pointx;
	pty = m_floatpoints[nHandle - 1].pointy;
	pView->WorldToClient(pt,ptx,pty);
	
	return pt;
}
//移動手柄
void CPolyObj::MoveHandleTo(int nHandle, CPoint point, CVisDrawView* pView)
{
	ASSERT_VALID(this);
	ASSERT(nHandle >= 1 && nHandle <= m_nPoints);

	//把鼠標邏輯坐標轉(zhuǎn)化為世界坐標
	double pointx,pointy;
	pView->ClientToWorld(point,pointx,pointy);

	if (m_floatpoints[nHandle - 1].pointx == pointx &&
		m_floatpoints[nHandle - 1].pointy == pointy)
		return;	

	m_floatpoints[nHandle - 1].pointx = pointx;
	m_floatpoints[nHandle - 1].pointy = pointy;

	CalcBounds(pView);
}

// delta為邏輯坐標
void CPolyObj::MoveTo(CPoint delta, CVisDrawView* pView)
{
	ASSERT_VALID(this);	
	//把delta轉(zhuǎn)化為世界坐標
	double pointx,pointy;
	pointx = pView->ClientToWorld(delta.x);
	pointy = -pView->ClientToWorld(delta.y);


	//修改所有頂點坐標
//	double ptx,pty;
//	CPoint pt;

	//把所有頂點的世界坐標轉(zhuǎn)化為邏輯坐標
	for(int i = 0;i<m_nPoints;i++)
	{
		m_floatpoints[i].pointx += pointx;
		m_floatpoints[i].pointy += pointy;
	}	

	//重新計算邊界矩形
	CalcBounds(pView);

	//修改文檔標志	
	m_pDocument->SetModifiedFlag();
}
//BOOL CPolyObj::IsSelected(CVisDrawView* pView,const CPoint& point)
//{
  // ASSERT_VALID(this);

	//參數(shù)point是鼠標的邏輯坐標
	//double distance,ptx,pty;
	//int nSelectDistance;

	//CPoint local,StartPoint,EndPoint;
	//local = point;
	//鼠標點的設(shè)備坐標
	//pView->DocToClient(local);

	//識別精度值
	//nSelectDistance = pView->GetDocument()->GetSetectDistance()/2;
	
	//平移所有頂點坐標
	//for(int i=0;i<m_nPoints;i++)
	//{
	//	int j=i+1;
	//	if(j==m_nPoints) j=0;

		//把頂點實際坐標轉(zhuǎn)化為邏輯坐標
	//	ptx=m_floatpoints[i].pointx;
    //    pty=m_floatpoints[i].pointy;
	//	pView->WorldToClient(StartPoint,ptx,pty);

		//把頂點實際坐標轉(zhuǎn)化為邏輯坐標
	//	ptx=m_floatpoints[i].pointx;
    //    pty=m_floatpoints[i].pointy;
	//	pView->WorldToClient(EndPoint,ptx,pty);

	//	pView->DocToClient(StartPoint);
	//	pView->DocToClient(EndPoint);

		//鼠標點到直線的距離
    //   distance =(int)PointToLine(StartPoint,EndPoint,local);
	   //根據(jù)拾取條件判斷圖元是否被拾取
	//   if(distance < nSelectDistance)
	//    return TRUE;
	//}
	//return false;

	
//}

//double CPolyObj::PointToLine(CPoint nStartPt, CPoint nEndPt, CPoint pt)
//{
	//int A,B,C;
	//double distance;

	//計算直線參數(shù)
	//A = nStartPt.y - nEndPt.y;
	//B = nEndPt.x - nStartPt.x;
	//C = nStartPt.x*nEndPt.y - nEndPt.x*nStartPt.y;

	//計算點到直線距離
	//distance = (A*pt.x + B*pt.y + C)*(A*pt.x + B*pt.y + C)/(A*A + B*B);
	//distance = sqrt(distance);
	//return distance;
//}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本午夜精品视频在线观看 | 亚洲va欧美va人人爽| 免费成人av资源网| 99精品视频一区| 欧美mv日韩mv亚洲| 亚洲国产精品久久久男人的天堂| 高清免费成人av| 欧美成人a在线| 亚洲电影一级片| 91蜜桃免费观看视频| 中文字幕免费不卡在线| 美女免费视频一区| 欧美三级电影在线看| 中文字幕在线观看不卡| 国产精品影音先锋| 亚洲精品一区二区三区香蕉| 午夜精品久久久久久久久久久| av一二三不卡影片| 亚洲国产成人av网| 91极品美女在线| 亚洲精品写真福利| 91视频国产资源| 亚洲伦理在线免费看| www.日韩av| 亚洲日本免费电影| 丁香婷婷综合网| 欧美高清一级片在线观看| 国产成人综合自拍| 日本一区二区免费在线 | 91丨porny丨首页| 国产精品久久久久久久久久久免费看| 国产乱人伦精品一区二区在线观看| 欧美成人猛片aaaaaaa| 久久99精品国产麻豆婷婷| 91麻豆精品国产自产在线观看一区 | 日韩精品国产欧美| 欧美福利电影网| 免费成人在线观看| 欧美精品一区二区三区在线播放| 美女视频黄 久久| 久久综合九色综合久久久精品综合| 精久久久久久久久久久| 久久免费视频一区| 国产1区2区3区精品美女| 国产精品久久福利| 欧美中文字幕不卡| 日韩高清中文字幕一区| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品一区二区久久不卡| 亚洲国产电影在线观看| 91在线小视频| 夜夜嗨av一区二区三区| 91精品国产91久久久久久最新毛片 | 95精品视频在线| 亚洲一区自拍偷拍| 日韩欧美你懂的| 国产精品综合av一区二区国产馆| 亚洲国产精品t66y| 在线观看国产一区二区| 狠狠色伊人亚洲综合成人| 亚洲国产精品黑人久久久| 欧美伊人久久大香线蕉综合69| 日韩高清一区二区| 国产精品国产三级国产aⅴ中文| 欧洲视频一区二区| 麻豆91在线播放| 亚洲日韩欧美一区二区在线| 91精品免费在线| 播五月开心婷婷综合| 天涯成人国产亚洲精品一区av| 久久久精品黄色| 欧美色图天堂网| 国产东北露脸精品视频| 免费在线观看一区| 中文字幕视频一区| 日韩欧美视频在线| 91传媒视频在线播放| 国产成人在线视频网站| 天堂蜜桃91精品| 亚洲欧美日韩国产综合在线| 日韩精品最新网址| 欧美亚洲动漫精品| 成人动漫一区二区| 精品一区二区三区视频| 亚洲自拍偷拍网站| 亚洲欧洲av在线| 精品国产免费一区二区三区香蕉 | av亚洲精华国产精华精华| 日本aⅴ免费视频一区二区三区| 中文字幕中文乱码欧美一区二区| 日韩一区二区精品葵司在线| 91啦中文在线观看| 成人免费观看视频| 国产在线精品一区在线观看麻豆| 亚洲国产精品久久一线不卡| 亚洲视频一区二区在线观看| 久久夜色精品一区| 欧美一级精品在线| 欧美丰满一区二区免费视频 | 99久久国产综合色|国产精品| 精品一区二区三区的国产在线播放| 亚洲一区中文在线| 亚洲美女视频一区| 亚洲免费观看视频| 日韩一区中文字幕| 国产精品乱码妇女bbbb| 国产蜜臀97一区二区三区| 欧美精品一区视频| 久久综合视频网| 精品乱码亚洲一区二区不卡| 日韩美女视频在线| 精品国产伦一区二区三区免费 | 一区二区三区丝袜| 亚洲少妇屁股交4| 亚洲女同女同女同女同女同69| 国产精品成人午夜| 国产精品国产三级国产aⅴ入口| 欧美高清在线一区二区| 欧美高清在线精品一区| 亚洲欧洲日韩av| 在线观看一区日韩| 日韩电影免费在线观看网站| 一区二区三区精品在线观看| 欧美不卡一区二区| 91久久线看在观草草青青 | 蜜臀91精品一区二区三区| 成人av影视在线观看| 欧美日韩精品欧美日韩精品一 | 亚洲成人三级小说| 豆国产96在线|亚洲| 欧美精品黑人性xxxx| 亚洲欧美自拍偷拍色图| 日韩在线观看一区二区| 99久久久无码国产精品| 欧美二区乱c少妇| 亚洲欧洲在线观看av| 久久久美女艺术照精彩视频福利播放| 综合色中文字幕| 国产盗摄女厕一区二区三区| 国产99久久久国产精品潘金网站| 91麻豆精品久久久久蜜臀| 亚洲色图制服丝袜| 国产美女主播视频一区| 56国语精品自产拍在线观看| 中文字幕国产一区二区| 国内久久精品视频| 在线观看一区二区视频| 亚洲日本在线天堂| 成人激情动漫在线观看| 日韩免费电影一区| 蜜桃视频在线观看一区| 色88888久久久久久影院野外| 中文字幕欧美一区| 国产一区二区三区精品欧美日韩一区二区三区 | 中文字幕不卡在线播放| 日韩成人免费电影| 欧美日韩视频不卡| 国产精品视频观看| 国产宾馆实践打屁股91| 国产亚洲精品超碰| 免费精品99久久国产综合精品| 不卡的av网站| 欧美激情在线免费观看| 黄页网站大全一区二区| 91精品国产综合久久福利软件 | 91视频xxxx| 中文字幕一区二区在线观看| 日本欧美一区二区三区| 欧美日韩高清一区二区三区| 亚洲成a人v欧美综合天堂| 91免费版pro下载短视频| 综合激情网...| 国产一区二区三区在线观看免费视频| 欧美精品第一页| 日本不卡免费在线视频| 日韩欧美资源站| 日本不卡不码高清免费观看| 91麻豆精品国产91久久久久久| 亚洲成人自拍偷拍| 337p亚洲精品色噜噜狠狠| 日本成人中文字幕| 日韩视频一区二区| 国产精品系列在线播放| 久久久精品天堂| 91网站在线观看视频| 欧美mv日韩mv国产网站app| 国产精品一二三四区| 最新日韩av在线| 色中色一区二区| 首页国产欧美久久| 日韩一区二区免费在线观看| 国产一区二区主播在线| 国产精品久久国产精麻豆99网站| k8久久久一区二区三区| 亚洲精品在线免费观看视频| 亚洲成人福利片| 日韩欧美在线网站| 国产乱码精品一品二品| 成人免费一区二区三区在线观看| 欧美亚洲一区二区三区四区|