⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccurve.cpp

📁 绘图软件
💻 CPP
字号:
#include "stdafx.h"
#include "CCurve.h"
#include"EastDrawView.h"
IMPLEMENT_SERIAL(CCurve,CObject,1)
void CCurve::DrawStatic(CDC*pDC)
{
 CPen m_pen;
 m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor);
 CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
 int oldDrawingMode=pDC->SetROP2(m_DrawingMode);
 
    
m_FirstPoint=m_PointList->GetAt(0);
 pDC->MoveTo(m_FirstPoint);
 for(int i=0;i<m_PointList->GetSize();i++)
 {
   pDC->LineTo(m_PointList->GetAt(i));
   pDC->LineTo(m_PointList->GetAt(i));
 }
   pDC->LineTo(m_PointList->GetAt(i-1));
   pDC->SelectObject(pen);
   pDC->SetROP2(oldDrawingMode);
  
}

int CCurve::IsOnMarginPoint(CPoint point)
{
  CRect rect;
  for(int i=0;i<m_PointList->GetSize();i=i+10)
  {
   rect=CRect(m_PointList->GetAt(i),m_PointList->GetAt(i));
   rect.InflateRect(4,4);
   if(rect.PtInRect(point))
   {
	   m_FoundPoint=m_PointList->GetAt(i);
	   return i+i;
   }
  }

   return -1;
}

void CCurve::Initial()
{
 CUnit::Initial();
 
 m_PointList=new CArray<CPoint,CPoint>;
}

void CCurve::Serialize(CArchive &ar)
{
if(ar.IsStoring())
  {
   ar<<m_PenColor<<m_PenStyle<<m_PenWidth;
  }
  else
  {
  ar>>m_PenColor>>m_PenStyle>>m_PenWidth;
 
  }
   m_PointList->Serialize(ar);
}

CCurve::CCurve()
{
Initial();
}

void CCurve::DrawMask(CDC*pDC,CPoint first,CPoint second)
{
 CPen m_pen;
 m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor);
 CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
 
 pDC->MoveTo(first);
 pDC->LineTo(second);
 pDC->SelectObject(pen);
}

BOOL CCurve::IsInRgn(CPoint point)
{
 CRect rect;
  for(int i=0;i<m_PointList->GetSize();i++)
  {
   rect=CRect(m_PointList->GetAt(i),m_PointList->GetAt(i));
   rect.InflateRect(9,9);
   if(rect.PtInRect(point))
	   return i;
  }
return -1;

}

void CCurve::ShowSelectPoint(CDC *pDC)
{
  CRect rect;
  CBrush brush;
brush.CreateSolidBrush(RGB(255,0,0));
CPen m_pen;
m_pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen *OldPen=pDC->SelectObject(&m_pen);
int oldBkMode=pDC->SetBkMode(OPAQUE); 
CBrush *OldBrush=pDC->SelectObject(&brush);
int oldDrawingMode=pDC->SetROP2(R2_NOTXORPEN);
  for(int i=0;i<m_PointList->GetSize();i=i+10)
  {
   rect=CRect(m_PointList->GetAt(i),m_PointList->GetAt(i));
   rect.InflateRect(3,3);
   pDC->Rectangle(rect);
  }
    pDC->SelectObject(OldPen);
    pDC->SetBkMode(oldBkMode); 
    pDC->SelectObject(OldBrush);
    pDC->SetROP2(oldDrawingMode);
}

CRect CCurve::GetBoundingRect()
{
 m_MinPoint=m_MaxPoint=m_PointList->GetAt(0);
 for(int i=0;i<m_PointList->GetSize();i++)
  {
   m_MinPoint.x=min(m_MinPoint.x,m_PointList->GetAt(i).x);
   m_MinPoint.y=min(m_MinPoint.y,m_PointList->GetAt(i).y);
   m_MaxPoint.x=max(m_MaxPoint.x,m_PointList->GetAt(i).x);
   m_MaxPoint.y=max(m_MaxPoint.y,m_PointList->GetAt(i).y);
 }
 
 this->m_BoundingRect.SetRect(this->m_MinPoint,this->m_MaxPoint);
 return this->m_BoundingRect;
}

void CCurve::DrawActive(CDC *pDC,CPoint point)
{
 this->DrawStatic(pDC);
  
   
}

void CCurve::OnMouseMove(CDC *pDC, CEastDrawView *pView, CPoint point)
{
    if(pView->m_CurrentDrawStatus==Drag_Status)
	  {
	    for(int i=0;i<m_PointList->GetSize();i++)
		{
	   CPoint point=m_PointList->GetAt(i);
	   point.Offset(pView->m_SecondPoint.x-pView->m_FirstPoint.x,pView->m_SecondPoint.y-pView->m_FirstPoint.y);
	   m_PointList->SetAt(i,point);
	   }
	  }
 else
	  {
	  pDC->SetROP2(R2_COPYPEN);
	  pView->m_FirstPoint=pView->m_SecondPoint;
	  pView->m_SecondPoint=point;
	  m_PointList->Add(point);
	  //m_DrawingMode=pDC->GetROP2();
      DrawMask(pDC,pView->m_FirstPoint,pView->m_SecondPoint);
	  }
	  
}

void CCurve::OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point)
{
	if(m_HaveFindFirst)
	{   
		pView->L_iPointCount=IsOnMarginPoint(point);
        if(pView->L_iPointCount!=-1)
		{
        pView->m_bHaveFindSecond=true;
		pView->m_CurrentDrawStatus=Drag_Status;
		pView->m_CurrentDrawTool=Curve_Tool;
		pView->m_pCurrentUnit=this;
		m_DrawingMode=pDC->GetROP2();
        ShowSelectPoint(pDC);
		DrawStatic(pDC);
		DrawOldReferencePoint(pDC,m_FoundPoint);
		}
	}	
	if((!pView->m_bHaveFindSecond)&&IsInRgn(point)!=-1)
	{   
		if(!m_HaveFindFirst)
		{
		 m_HaveFindFirst=true;
		 pView->m_bHaveFindFirst=true;
	     ShowSelectPoint(pDC);
		}
        else
		{
		 m_HaveFindFirst=false;
		 pView->m_bHaveFindFirst=true;
		 ShowSelectPoint(pDC);
		}

	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -