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