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

📄 bufferview.cpp

📁 空间分析模型代码 实现缓冲分析和重叠分析下的集中情况
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CBufferView::Polygon(CDC* pDC, POINT* lpPoints,int nCount)
{

  for (int i=1;i<nCount;i++)
  {
	  Line(pDC,*(lpPoints+i-1),*(lpPoints+i));
	  
  }
      Line(pDC,*(lpPoints+i-1),*lpPoints);
}
void CBufferView::Polygon(CDC* pDC, LINE* lines,int nCount)
{
  for (int i=0;i<nCount;i++)
 
      Line(pDC,*(lines+i));
 
      
}
void CBufferView::OnBufferPolygon() 
{
	// TODO: Add your command handler code here
	RemoveAllOverlap();
	m_buffer=TRUE;
    m_overlap=FALSE;
	m_LBotton_point=FALSE;
    m_LBotton_line=FALSE;
    m_LBotton_polygon=TRUE;
	if (m_points_point.GetSize()!=0)
		m_points_point.RemoveAll();
	if(m_bufferline.GetSize()!=0)
    	m_bufferline.RemoveAll();
    Invalidate(true);
}


void CBufferView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	 CDC *pDC=GetDC();
	 LINE lTemp;
    if (m_buffer)
	{
	    if(m_LBotton_line)
		{
           i=0;
           m_points_line.RemoveAll();
		}

	    if(m_LBotton_polygon)
		{
		    
		    if (i!=0)
		    {
			 lTemp.pStart=point;
			 lTemp.pEnd=pStart;
             m_bufferpolygon.Add(lTemp);
			 Line(pDC,lTemp);
             m_points_line.RemoveAll();
		    }
           
			i=0;
		}
	}

	if (m_overlap)
	{
		
		if (m_o_pDrawPoly)
		{
               if (m_lBDown!=0)
               {
                       p_polygon.DeleteObject();
			           m_overlap_ppoly.Add(point);
                       Polygon(pDC,m_overlap_ppoly.GetData(),m_overlap_ppoly.GetSize());
                       p_polygon.CreatePolygonRgn(m_overlap_ppoly.GetData(),m_overlap_ppoly.GetSize(),ALTERNATE);
			           m_lBDown=0;
               }
			   
		}
		if (drawpolyA)
		{
               if (m_lBDown!=0)
               {
			          p_polyA.DeleteObject();
			          m_overlap_polyA.Add(point);
                      Polygon(pDC,m_overlap_polyA.GetData(),m_overlap_polyA.GetSize());
                      p_polyA.CreatePolygonRgn(m_overlap_polyA.GetData(),m_overlap_polyA.GetSize(),ALTERNATE);
			          m_lBDown=0;
               }

		}
		if (drawpolyB)
		{
               if (m_lBDown!=0)
               {
                      p_polyB.DeleteObject();
			          m_overlap_polyB.Add(point);
                      Polygon(pDC,m_overlap_polyB.GetData(),m_overlap_polyB.GetSize());
                      p_polyB.CreatePolygonRgn(m_overlap_polyB.GetData(),m_overlap_polyB.GetSize(),ALTERNATE);
			          m_lBDown=0;
               }
			   
		}
		if (drawline)
		{
			   m_lBDown=0;
		}
        if (drawpoly)
        {
			   if (m_lBDown!=0)
			   {
				      LINE l;
		   	          m_overlap_Lpoints.Add(point);
			          l.pStart=m_overlap_Lpoints[m_overlap_Lpoints.GetSize()-1];
			          l.pEnd=m_overlap_Lpoints[0];
			          m_poly.Add(l);
                      Line(pDC,l);
			          m_lBDown=0;
			   }
			   
        }
	}
	CScrollView::OnRButtonDown(nFlags, point);
}

void CBufferView::OnPbufferCreated() 
{
	// TODO: Add your command handler code here
	CBUFFERDlg dlg;
	if (dlg.DoModal()==IDOK)
	{
       buffer_rad=dlg.m_buffer;
       
	}
	m_BufferOperation=BufferPoint;
       Invalidate(true);
}

void CBufferView::OnLbufferCreated() 
{
	// TODO: Add your command handler code here
	CBUFFERDlg dlg;
	if (dlg.DoModal()==IDOK)
	{
       buffer_rad=dlg.m_buffer;
	}
	m_BufferOperation=BufferLine;
       Invalidate(true);
}

void CBufferView::OnGbufferCreated() 
{
	// TODO: Add your command handler code here
	CBUFFERDlg dlg;
	if (dlg.DoModal()==IDOK)
	{
       buffer_rad=dlg.m_buffer;
	}
	m_BufferOperation=BufferPolygon;
       Invalidate(true);	
}

void CBufferView::OnOverlapPoint()    //点面叠加画点
{
	RemoveAllBuffer();

	if (m_overlap_polyA.GetSize()!=0||m_overlap_polyB.GetSize()!=0)
	{
		m_overlap_polyA.RemoveAll();
        m_overlap_polyB.RemoveAll();
	}
	if (m_line.GetSize()!=0||m_poly.GetSize()!=0)
	{
		m_line.RemoveAll();
		m_poly.RemoveAll();
	}
    if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}
	m_overlap=TRUE;
	m_buffer=FALSE;
    m_o_pDrawPoint=TRUE;
	m_o_pDrawPoly=FALSE;
    drawpolyA=FALSE;
    drawpolyB=FALSE;
	drawline=FALSE;
	drawpoly=FALSE;
	pp_created=FALSE;
	Invalidate(true);
}

void CBufferView::OnOVERLAPPPoly()    //点面叠加画面
{
	RemoveAllBuffer();

	if (m_overlap_polyA.GetSize()!=0||m_overlap_polyB.GetSize()!=0)
	{
		m_overlap_polyA.RemoveAll();
        m_overlap_polyB.RemoveAll();
	}
	if (m_line.GetSize()!=0||m_poly.GetSize()!=0)
	{
		m_line.RemoveAll();
		m_poly.RemoveAll();
	}
	if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}
	m_overlap=TRUE;
	m_buffer=FALSE;
    m_o_pDrawPoint=FALSE;
	m_o_pDrawPoly=TRUE;
    drawpolyA=FALSE;
    drawpolyB=FALSE;
	drawline=FALSE;
	drawpoly=FALSE;
	pp_created=FALSE;
	Invalidate(true);
}

void CBufferView::OnOVERLAPPOverLap() //点面叠加
{
    pp_created=TRUE;
	Invalidate(true);
}

void CBufferView::OnOverlapDrawpoly1() 
{
	// TODO: Add your command handler code here
 
	RemoveAllBuffer();
	if (m_overlap_ppoints.GetSize()!=0||m_overlap_ppoly.GetSize()!=0)
	{
		m_overlap_ppoints.RemoveAll();
        m_overlap_ppoly.RemoveAll();
	}
	if (m_line.GetSize()!=0||m_poly.GetSize()!=0)
	{
		m_line.RemoveAll();
		m_poly.RemoveAll();
	}
	if (m_overlap_polyA.GetSize()!=0)
	{
		m_overlap_polyA.RemoveAll();
	}
	if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}

	m_overlap=TRUE;
	m_buffer=FALSE;
    m_o_pDrawPoint=FALSE;
	m_o_pDrawPoly=FALSE;
    drawpolyA=TRUE;
    drawpolyB=FALSE;
	over_union=FALSE;
    over_insert=FALSE;
    over_difference=FALSE;	
	drawline=FALSE;
	drawpoly=FALSE;
	Invalidate(true);
}

void CBufferView::OnOverlapDrawpoly2() 
{
	// TODO: Add your command handler code here
	RemoveAllBuffer();
	Invalidate(true);
	if (m_overlap_ppoints.GetSize()!=0||m_overlap_ppoly.GetSize()!=0)
	{
		m_overlap_ppoints.RemoveAll();
        m_overlap_ppoly.RemoveAll();
	}
	if (m_line.GetSize()!=0||m_poly.GetSize()!=0)
	{
		m_line.RemoveAll();
		m_poly.RemoveAll();
	}
	if (m_overlap_polyB.GetSize()!=0)
	{
		m_overlap_polyB.RemoveAll();
	}
	if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}
	m_overlap=TRUE;
	m_buffer=FALSE;
    m_o_pDrawPoint=FALSE;
	m_o_pDrawPoly=FALSE;
    drawpolyA=FALSE;
    drawpolyB=TRUE;
	over_union=FALSE;
    over_insert=FALSE;
    over_difference=FALSE;
	drawline=FALSE;
	drawpoly=FALSE;
}

void CBufferView::OnOverlapUnion() 
{
  over_union=TRUE;
  over_insert=FALSE;
  over_difference=FALSE;
  Invalidate(true);	
}

void CBufferView::OnOverlapInsert() 
{
  over_union=FALSE;
  over_insert=TRUE;
  over_difference=FALSE;
  Invalidate(true); 
}

void CBufferView::OnOverlapDifference() 
{
  over_union=FALSE;
  over_insert=FALSE;
  over_difference=TRUE;
  Invalidate(true);	
}


//线面叠加

void CBufferView::OnOVERLAPLLine() 
{
	
	RemoveAllBuffer();
	if (m_overlap_ppoints.GetSize()!=0||m_overlap_ppoly.GetSize()!=0)
	{
		m_overlap_ppoints.RemoveAll();
        m_overlap_ppoly.RemoveAll();
	}
	if (m_overlap_polyA.GetSize()!=0||m_overlap_polyB.GetSize()!=0)
	{
		m_overlap_polyA.RemoveAll();
        m_overlap_polyB.RemoveAll();
	}
	if (m_line.GetSize()!=0)
	{
		m_line.RemoveAll();
	}
	if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}
	m_overlap=TRUE;
	m_buffer=FALSE;
	m_o_pDrawPoint=FALSE;
	m_o_pDrawPoly=FALSE;
    drawpolyA=FALSE;
    drawpolyB=FALSE;
	drawline=TRUE;
	drawpoly=FALSE;
	line_poly=FALSE;
    Invalidate(true);
}

void CBufferView::OnOverlapLpoly() 
{
    Invalidate(true);
	RemoveAllBuffer();
	if (m_overlap_ppoints.GetSize()!=0||m_overlap_ppoly.GetSize()!=0)
	{
		m_overlap_ppoints.RemoveAll();
        m_overlap_ppoly.RemoveAll();
	}
	if (m_overlap_polyA.GetSize()!=0||m_overlap_polyB.GetSize()!=0)
	{
		m_overlap_polyA.RemoveAll();
        m_overlap_polyB.RemoveAll();
	}
    if (m_poly.GetSize()!=0)
    {
		m_poly.RemoveAll();
    }
	if (m_line_result.GetSize()!=0)
	{
		m_line_result.RemoveAll();
	}
	if (m_points.GetSize()!=0)
	{		
		m_points.RemoveAll();
	}	
	m_overlap=TRUE;
	m_buffer=FALSE;
	m_o_pDrawPoint=FALSE;
	m_o_pDrawPoly=FALSE;
    drawpolyA=FALSE;
    drawpolyB=FALSE;
	drawline=FALSE;
	drawpoly=TRUE;
	line_poly=FALSE;
}

void CBufferView::OnOVERLAPLOverLap() 
{
   line_poly=TRUE;
   m_line_result.RemoveAll();
   CDC *pDC=GetDC();
   CPen pen1(PS_SOLID,2,RGB(0,255,0));
   
   pDC->SelectObject(&pen1);
   if ((m_line.GetSize()!=0)&&(m_poly.GetSize()!=0))
   {
	   for (int j=0;j<m_line.GetSize();j++)
	   {
           m_points.RemoveAll(); 
		   LineRgn(pDC,m_line[j],m_poly.GetData(),m_poly.GetSize());
           
	   }  
	   
   }
   DeleteObject(pen1);
}
void CBufferView::RemoveAllOverlap()
{
	    m_overlap_ppoints.RemoveAll();
        m_overlap_ppoly.RemoveAll();
		m_overlap_polyA.RemoveAll();
        m_overlap_polyB.RemoveAll();
		m_poly.RemoveAll();
        m_line.RemoveAll();
		m_line_result.RemoveAll();
		m_points.RemoveAll();
		m_overlap_Lpoints.RemoveAll();
}
void CBufferView::RemoveAllBuffer()
{
   m_points_point.RemoveAll();   
   m_points_line.RemoveAll();    
   m_bufferline.RemoveAll();         
   m_bufferpolygon.RemoveAll();     
}

⌨️ 快捷键说明

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