www.pudn.com > roadextr.rar > extractlib.cpp


#include "stdafx.h" 
#include "extractlib.h" 
//#include "road.h" 
#include "math.h" 
#include "memory.h" 
#include    "DefValue.h" 
// 
//void DrawExtractLinePt( 
//				  dfPOINT *pptCent,		   
//				  dfPOINT *pptL, 
//				  dfPOINT *pptR, 
////				  dfPOINT *pptCrossPts, 
////				  DWORD   dwCrossPtC, 
//				  DWORD   dwPtCount, 
//				  BOOL    bErase,	 
//				  DWORD   dwInc, 
//				  int     wExtr_state, 
//				  int     beginCol,		   
//				  int     beginRow, 
//				  int     WindowHeight, 
//				  CDC*    pDC,		 
//				  BOOL	  bEndOneLine 
//				 ) 
//{ 
//	DWORD		jj; 
//	DWORD		dwCon; 
//	float			x1,y1,x2,y2; 
// 
//	dwCon=(bErase==TRUE)?dwInc:0L; 
//	if(wExtr_state==AUTO_CENTLINE||wExtr_state==AUTO_EDGE 
//		||wExtr_state==MAN_SLINE||wExtr_state==MAN_BSPLINE 
//		||wExtr_state==AUTO_CUBE) 
//	for(jj=0;jj=TOTAL_ROAD_LINE_NUM) break; 
// 
//		x1 = (int)(pptCent[dwCon+jj].dfX)-beginCol; 
//		y1 = WindowHeight+beginRow-(int)(pptCent[dwCon+jj].dfY); 
//		x2 = (int)(pptCent[dwCon+jj+1].dfX)-beginCol; 
//		y2 = WindowHeight+beginRow-(int)(pptCent[dwCon+jj+1].dfY); 
//	//	x1*=fZoomRate;	y1*=fZoomRate;	x2*=fZoomRate;	y2*=fZoomRate; 
//		DrawLine(pDC,(int)x1,(int)y1,(int)x2,(int)y2);	 
//	} 
//	 
//	////draw double line 
//	else if(wExtr_state==AUTO_DBLINE) 
//	for(jj=0;jj=TOTAL_ROAD_LINE_NUM) break; 
//		DrawLine(pDC,((int)pptL[dwCon+jj].dfX-beginCol), 
//				WindowHeight-((int)pptL[dwCon+jj].dfY-beginRow), 
//				((int)pptL[dwCon+jj+1].dfX-beginCol), 
//				WindowHeight-((int)pptL[dwCon+jj+1].dfY-beginRow)); 
// 
//		DrawLine(pDC,((int)pptR[dwCon+jj].dfX-beginCol), 
//				WindowHeight-((int)pptR[dwCon+jj].dfY-beginRow), 
//				((int)pptR[dwCon+jj+1].dfX-beginCol), 
//				WindowHeight-((int)pptR[dwCon+jj+1].dfY-beginRow)); 
//		 
//	} 
///*	for(jj=0;jjRectangle(nx1,ny1,nx2,ny2); 
		w = fabs((double)nx1-nx2); 
		h = fabs((double)ny1-ny2); 
		DrawLine(pDC,nx1,ny1,nx2,ny1); 
		DrawLine(pDC,nx2,ny1,nx2,ny2);	 
		DrawLine(pDC,nx2,ny2,nx1,ny2);	 
		DrawLine(pDC,nx1,ny2,nx1,ny1);	 
		for(j=0;jMoveTo(x,ny1); 
			pDC->LineTo(x,ny2); 
		} 
//		pDC->TextOut(nx2,ny2,pdigInfo[i].pstr,4); 
	} 
} 
 
 
 
//void	DrawCrosses(CDC *pDC,int nX,int nY) 
//{ 
////	pDC->MoveTo(nX-10,nY); 
////	pDC->LineTo(nX+10,nY); 
////	pDC->MoveTo(nX,nY+10); 
////	pDC->LineTo(nX,nY-10); 
//	pDC->Ellipse(nX-5,nY+5,nX+5,nY-5); 
//} 
 
void	DrawCrosses2(CDC *pDC,int nX,int nY,int	CrossW) 
{ 
	pDC->MoveTo(nX-CrossW,nY); 
	pDC->LineTo(nX+CrossW+1,nY); 
	pDC->MoveTo(nX,nY+CrossW); 
	pDC->LineTo(nX,nY-CrossW-1); 
//	pDC->Ellipse(nX-CrossW,nY+CrossW,nX+CrossW,nY-CrossW); 
 
} 
 
void	DrawLine(CDC *pDC,int nX1,int nY1,int nX2,int nY2) 
{		pDC->MoveTo(nX1,nY1); 
		pDC->LineTo(nX2,nY2); 
} 
 
//void	FreeExtractResult(double *pdfX, double *pdfY, double *pdfLX, 
//					   double *pdfLY,double *pdfRX,double *pdfRY) 
//{	free(pdfX);		free(pdfY); 
//	free(pdfLX);	free(pdfLY); 
//	free(pdfRX);	free(pdfRY); 
//} 
 
//void    FreeExtractResult(double *pdfX ,double *pdfY,double *pdfCX,double *pdfCY) 
//{ 
//	free(pdfX);     free(pdfY); 
////	free(pdfCX);    free(pdfCY); 
//} 
// 
//void	InsertStrLinePt(dfPOINT	*pptCenPt, 
//						dfPOINT	*pptSeedPt, 
//						int		nIPt, 
//						DWORD	*pdwSegCount, 
//						DWORD	*pdwOneLineNum, 
//						double	*pdfCC) 
//{ 
//			double	dfDltX = pptSeedPt[nIPt-1].dfX - pptSeedPt[nIPt-2].dfX; 
//			double	dfDltY = pptSeedPt[nIPt-1].dfY - pptSeedPt[nIPt-2].dfY; 
//			double dfDist =sqrt(dfDltX*dfDltX + dfDltY*dfDltY); 
//			double  dfSinA = dfDltY/dfDist,dfCosA = dfDltX/dfDist; 
//			int nSegC = (int)(dfDist/4.0); 
//			dfDltX = 4.0*dfCosA; 
//			dfDltY = 4.0*dfSinA; 
//			for(int n=0;nSetROP2(R2_NOTCOPYPEN); 
	 
	for(n=0;nSetPixel(X,Y,RGB(255,32,32)); 
	} 
	pDC->SetROP2(R2_COPYPEN); 
} 
 
void	DrawAllCrosses(dfPOINT	*pptCross, 
			   int	nCrossPtC, 
			   int	nImgBeginX, 
			   int	nImgBeginY, 
			   int	nViewWinHeight, 
			   int	nImageHeight, 
			   CDC *pDC, 
			   float	fZoomRate) 
{	 
	int	n; 
	float	X,Y,y0;	 
 
//	for(n=0;nSetROP2(R2_COPYPEN); 
	for(n=0;nSetROP2(R2_COPYPEN); 
 
} 
 
void ShowAllSegsNo(CurSegNo *pCurSegNo,int	nCurSegC,int nImgBeginX,int nImgBeginY, 
					int nViewWinHeight,int nWholeImgH, 
					CDC*	pDC,float		fZoomRate) 
{ 
	int	n; 
	float	x1,y1,x2,y2,y0,x0; 
	//CString cs;  
	char	cs[20]; 
	y0 = nWholeImgH - nViewWinHeight - nImgBeginY; 
	for(n=0;nTextOut((int)x1,(int)y1,cs); 
	} 
} 
 
 
void	DrawAllObjects(mmOBJECT		*pobjTotalObj, 
					   mmOBJECTRec		*pobjTotalRec, 
					   int			nTotalNum, 
					   int			nRecNum, 
					   int			beginCol,		   
					   int			beginRow, 
					   int			WindowHeight, 
					   int			nImageHeight, 
					   CDC*			pDC, 
					   float		fZoomRate) 
{	int	n; 
	float	x1,y1,x2,y2,y0,x0; 
	char	cs[20]; 
	if(nRecNum==0) 
	for(n=0;nSetROP2(R2_NOTCOPYPEN);///R2_XORPEN 
		} 
		if(pobjTotalObj[n].nExtrState==POLYGON_OUT) 
		{	 
			pDC->SetROP2(R2_COPYPEN);///R2_XORPEN 
		} 
		 
		if(pobjTotalObj[n].nExtrState==AUTO_CENTLINE||pobjTotalObj[n].nExtrState==AUTO_EDGE 
		||pobjTotalObj[n].nExtrState==MAN_SLINE||pobjTotalObj[n].nExtrState==MAN_BSPLINE 
		||pobjTotalObj[n].nExtrState==AUTO_CUBE 
		||pobjTotalObj[n].nExtrState==POLYGON|| 
		pobjTotalObj[n].nExtrState==POLYGON_OUT) 
		{	y0=nImageHeight-WindowHeight-beginRow; 
			for(jj=0;jj=TOTAL_ROAD_LINE_NUM) break; 
			//	pobjTotalObj[n].pnptObjPtCen[jj].dfX+=0.5; 
			//	pobjTotalObj[n].pnptObjPtCen[jj].dfX+=0.5; 
				x1 = (float(pobjTotalObj[n].pnptObjPtCen[jj].dfX))*fZoomRate-beginCol; 
				y1 = (float(nImageHeight-pobjTotalObj[n].pnptObjPtCen[jj].dfY))*fZoomRate-y0; 
				x2 = (float(pobjTotalObj[n].pnptObjPtCen[jj+1].dfX))*fZoomRate-beginCol; 
				y2 = (float(nImageHeight-pobjTotalObj[n].pnptObjPtCen[jj+1].dfY))*fZoomRate-y0; 
				pDC->MoveTo((int)(x1),(int)(y1)); 
				pDC->LineTo((int)(x2),(int)(y2)); 
/*				///// draw point dot  
				DrawCrosses2(pDC,(int)x1,(int)y1,6); 
				if(jj == pobjTotalObj[n].nObjPtCount-2) 
					DrawCrosses2(pDC,(int)x2,(int)y2,6); 
*/ 
			} 
/* 
			///// show score of each seg 
			x1 = pobjTotalObj[n].pnptCrossPt->nX * fZoomRate-  beginCol; 
			y1 = (nImageHeight - pobjTotalObj[n].pnptCrossPt->nY) * fZoomRate - y0; 
			//cs.FormatV("%d",pCurSegNo[n].nSegNo); 
			_itoa( (long)pobjTotalObj[n].nScore,cs,10);		 
			pDC->TextOut((int)x1,(int)y1,cs); 
*/ 
		} 
		////draw double line 
		else if(pobjTotalObj[n].nExtrState==AUTO_DBLINE) 
		for(jj=0;jjSetROP2(R2_COPYPEN);///R2_XORPEN 
	} 
	 
	int		w,h; 
	float	x3,y3,x4,y4; 
	y0=nImageHeight-WindowHeight-beginRow; 
 
	for(n=0;nRectangle( x1, y1, x2, y2 ); 
//		pDC->MoveTo((int)x1,(int)y1);	pDC->LineTo((int)x1+w,(int)y1); 
//		pDC->MoveTo((int)x1+w,(int)y1);	pDC->LineTo((int)x1+w,(int)y1+h); 
//		pDC->MoveTo((int)x1+w,(int)y1+h);	pDC->LineTo((int)x1,(int)y1+h); 
//		pDC->MoveTo((int)x1,(int)y1+h);	pDC->LineTo((int)x1,(int)y1); 
 
		pDC->MoveTo((int)x1,(int)y1);	pDC->LineTo((int)x2,(int)y2); 
		pDC->MoveTo((int)x2,(int)y2);	pDC->LineTo((int)x3,(int)y3); 
		pDC->MoveTo((int)x3,(int)y3);	pDC->LineTo((int)x4,(int)y4); 
		pDC->MoveTo((int)x4,(int)y4);	pDC->LineTo((int)x1,(int)y1); 
 
	} 
 
} 
 
 
// 
//void	FreeMMObj(mmOBJECT		*pobjTotalObj, 
//				  int			nTotalNum) 
//{	for(int n=0;n