예제 #1
0
void CFlatBrushPen::Draw(CDC* pDC,CRect& rcInvalid)
{
	if(m_nPtCount <= 1)
	{
		return;
	}

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeHighQuality);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	Pen penDraw(m_crColor, (float)m_nWidth * m_fScale);
	penDraw.ScaleTransform(1, 2.0f / m_nWidth, MatrixOrderAppend);
	penDraw.RotateTransform(m_ftransAngle, MatrixOrderAppend);

	if(m_bSelected || m_bEdit)
	{
		graph.SetSmoothingMode(SmoothingModeAntiAlias);
		DrawHotShape(graph);
	}

	if(!m_bFinish)
	{
		Rect	rc(rcInvalid.left, rcInvalid.top, rcInvalid.Width(), rcInvalid.Height());
		graph.SetClip(rc);
	}

	graph.ExcludeClip(&m_RgnErase);

	PointF* pPt = m_ptary.GetData();
	graph.DrawLines(&penDraw, pPt, m_nPtCount);
}
예제 #2
0
void CDiamond::Draw(CDC* pDC,CRect& rcInvalid)
{
	if(m_nPtCount <= 0)
		return;

	Pen penDraw(m_crColor,(float)m_nWidth);
	penDraw.SetLineJoin(LineJoinRound);
	penDraw.SetDashStyle(m_nDashStyle);

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	if(m_nPtCount <= 1)
	{
		return;
	}
	else 
	{
		if(m_bFinish && (m_bSelected || m_bEdit))
		{
			DrawHotShape(graph);
		}

		graph.ExcludeClip(&m_RgnErase);
		PointF* pPt = m_ptary.GetData();
		graph.DrawPolygon(&penDraw,pPt,4);
	}
}
void CToolRegularRuler::Draw(CDC* pDC, CRect& rcInvalid)
{
	if(m_nPtCount <= 1)
	{
		return;
	}

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);
	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	Pen penDraw(m_crColor, 2);

	RectF rcf(m_ptary[0].X, m_ptary[0].Y,
		m_ptary[1].X - m_ptary[0].X,
		m_ptary[1].Y - m_ptary[0].Y);

	DrawRulerMarks(graph);
	graph.DrawRectangle(&penDraw, rcf);

	if(m_bSelected || m_bEdit)
	{
		DrawHotShape(graph);
	}
}
예제 #4
0
void CNormalPen::Draw(CDC* pDC)
{
	if(m_nPtCount == 0)
		return;
	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);
	
	Pen penDraw(m_crColor,(float)m_nWidth);
	penDraw.SetDashStyle(m_nDashStyle);
	penDraw.SetStartCap(m_nStartCap);

	PointF* pPt = m_ptary.GetData();
	if(m_bFinish)
	{
		penDraw.SetEndCap(m_nEndCap);
		penDraw.SetLineJoin(LineJoinRound);
		graph.DrawCurve(&penDraw,pPt,m_nPtCount,0.8f);
	}
	else
	{
		graph.DrawCurve(&penDraw,pPt,m_nPtCount - 1,0.8f);
	}
	if(m_bSelected)
	{
		DrawHotShape(graph);
	}
}
예제 #5
0
void CNormalPen::Draw(CDC* pDC,CRect& rcInvalid)
{
	if(m_nPtCount == 0)
	{
		return;
	}

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);
	Rect rc(rcInvalid.left, rcInvalid.top, rcInvalid.Width(), rcInvalid.Height());

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	if(m_bSelected || m_bEdit)
	{
		DrawHotShape(graph);
	}

	graph.ExcludeClip(&m_RgnErase);
	
	Pen penDraw(m_crColor,(float)m_nWidth);
	penDraw.SetDashStyle(m_nDashStyle);
	penDraw.SetStartCap(m_nStartCap);
	penDraw.SetLineJoin(LineJoinRound);

	int nCount = (int)m_ptary.GetCount();
	PointF* pPt = m_ptary.GetData();

	if(!m_bFinish)
	{
		graph.SetClip(rc);

		if(DashStyleSolid == m_nDashStyle)
		{
			penDraw.SetEndCap(m_nEndCap);
		}
	}
	else
	{
		penDraw.SetEndCap(m_nEndCap);
		penDraw.SetWidth(m_fScale * m_nWidth);
	}

	graph.DrawCurve(&penDraw, pPt, nCount);
}
예제 #6
0
void CRectangle::Draw(CDC* pDC,CRect& rcInvalid)
{
	if(m_nPtCount <= 0)
	{
		return;
	}
		
	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	CPoint ptLT;
	CPoint ptRB;
	ptLT.x = (int)m_ptary[0].X;
	ptLT.y = (int)m_ptary[0].Y;
	ptRB.x = (int)m_ptary[1].X;
	ptRB.y = (int)m_ptary[1].Y;
	CRect rc(ptLT,ptRB);
	rc.NormalizeRect();

	if(m_bSelected || m_bEdit)
	{
		DrawHotShape(graph);
	}

	graph.ExcludeClip(&m_RgnErase);

	if(m_nPtCount == 1)
	{
		return;
	}
	if(RS_ROUND == m_nRStyle)
	{
		DrawRoundRect(graph,rc);
	}
	else if(RS_SQUARE == m_nRStyle)
	{
		DrawSquare(graph,rc);
	}
	else if(RS_RECT == m_nRStyle)
	{
		DrawRectangle(graph,rc);
	}
}
예제 #7
0
void CNTriangle::Draw(CDC* pDC,CRect& rcInvalid)
{
	if(m_nPtCount <= 0)
	{
		return;
	}

	Pen penDraw(m_crColor,(float)m_nWidth);
	penDraw.SetLineJoin(LineJoinRound);
	penDraw.SetDashStyle(m_nDashStyle);

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	if(!m_bFinish)
	{
		PointF* pPt = m_ptary.GetData();

		if(m_bhas3temppts)
		{
			Pen penPrev(Color::Blue, (float)m_nWidth);
			penPrev.SetDashStyle(DashStyleDash);
			graph.DrawLine(&penPrev, m_ptary[0], m_ptary[2]);
		}

		graph.DrawLines(&penDraw, pPt, m_nPtCount + 1);
	}
	else if(m_nPtCount == 3)
	{
		if(m_bSelected || m_bEdit)
		{
			DrawHotShape(graph);
		}

		graph.ExcludeClip(&m_RgnErase);
		PointF* pPt = m_ptary.GetData();
		graph.DrawPolygon(&penDraw, pPt, m_nPtCount);
	}
}
예제 #8
0
void CTriangle::Draw(CDC* pDC)
{
	if(m_nPtCount <= 0)
		return;

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle,m_ptCenter);
	graph.SetTransform(&mat);

	Pen penDraw(m_crColor,(float)m_nWidth);
	penDraw.SetLineJoin(LineJoinRound);

	if(m_nPtCount == 2)
	{

		Pen pent(Color::Blue,2);
		pent.SetDashStyle(DashStyleDot);

		CPoint ptLT;
		CPoint ptRB;
		ptLT.x = (int)m_ptary[0].X;
		ptLT.y = (int)m_ptary[0].Y;
		ptRB.x = (int)m_ptary[1].X;
		ptRB.y = (int)m_ptary[1].Y;
		CRect rc(ptLT,ptRB);
		rc.NormalizeRect();
		graph.DrawRectangle(&pent,rc.left,rc.top,rc.Width(),rc.Height());
	}
	else if(m_nPtCount == 3)
	{
		PointF* pPt = m_ptary.GetData();
		graph.DrawPolygon(&penDraw,pPt,m_nPtCount);

		if(m_bSelected)
		{
			DrawHotShape(graph);
		}
	}
}
예제 #9
0
void CAngleLabel::Draw(CDC* pDC, CRect& rcInvalid)
{
	if(m_nPtCount <= 0)
	{
		return;
	}

	Pen penDraw(m_crColor, (float)m_nWidth);
	penDraw.SetLineJoin(LineJoinRound);
	penDraw.SetEndCap(LineCapRound);
	penDraw.SetStartCap(LineCapRound);
	penDraw.SetDashStyle(m_nDashStyle);

	Graphics graph(pDC->m_hDC);
	graph.SetSmoothingMode(SmoothingModeAntiAlias);

	Matrix mat;
	mat.RotateAt(m_fAngle, m_ptCenter);
	graph.SetTransform(&mat);
	PointF* pPt = m_ptary.GetData();

	if(m_bhas3temppts || m_bFinish)
	{
		PointF ptd[3];
		ptd[0] = pPt[1];
		ptd[1] = pPt[0];
		ptd[2] = pPt[2];

		graph.ExcludeClip(&m_RgnErase);
		graph.DrawLines(&penDraw, ptd, 3);
		DrawAngleLabelMark(graph);
	}
	else
	{
		graph.DrawLine(&penDraw, pPt[0], pPt[1]);
	}

	if(m_bSelected || m_bEdit)
	{
		DrawHotShape(graph);
	}
}