#include "StdAfx.h" #include "ObjBarCode.h" #include "GlobalFunction.h" #include "LogMgr.h" #ifdef __TBAR_CODE__ #include "tbarcode51.h" #endif #include "ObjPline.h" #include "FontTypeMgr.h" //调试用-- 输出结果 void PrintResult(vector> &ModuleVec) { ofstream *pStream = gLogMgr->GetDebugOfstream(); vector>::iterator iter = ModuleVec.begin(); vector>::iterator iter_end = ModuleVec.end(); for(;iter!=iter_end;iter++) { vector::iterator iter1 = (*iter).begin(); vector::iterator iter1_end = (*iter).end(); for(;iter1!=iter1_end;iter1++) { (*pStream)<<(*iter1).IsBlack(); } (*pStream)<m_DlgVariableString.BindingObjString(this); #endif } void CObjBarCode::CreatExt() { //清空容器 m_ObjContainer.Clear(); //获取字符串 CString Str = GetCurString(); //获取条码轮廓数据 CreatBarCodeEdge(Str,m_BasePt1,m_ObjContainer); } #if 1 //创建条码轮廓 void CObjBarCode::CreatBarCodeEdge(CString Str,Dbxy BasePt,CObjContainer &ObjContainer) { #ifdef __DLG_PANE_TEST__ #ifdef __TBAR_CODE__ m_BasePt = BasePt; CTbarcode51 &Tbarcode51 = GetFrame()->m_DlgTest.GetTbarcode51(); vector> ModuleVec; CFontTypeMgr &pFontTypeMgr = CFontTypeMgr::Instance(); int idx = pFontTypeMgr.GetCurFontTypeIdx(); gLogMgr->WriteDebugLog("idx", "=", idx); Tbarcode51.put_BarCode(pFontTypeMgr.GetCurFontTypeIdx());//类型 Tbarcode51.put_Text(Str);//text 内容 Tbarcode51.BCDraw((long)GetCurViewPtr()->GetHDC(),0,0,0,200);//在view 上绘制出来 if(AnlalysisBarCord(ModuleVec)) { //生成轮廓数据到ObjContainer CreatEdge(ModuleVec,ObjContainer); } #endif #endif } //分析条码保存到矩阵ModuleVec bool CObjBarCode::AnlalysisBarCord(vector> &ModuleVec) { int Rows = 0; #ifdef __DLG_PANE_TEST__ #ifdef __TBAR_CODE__ CTbarcode51 &Tbarcode51 = GetFrame()->m_DlgTest.GetTbarcode51(); //先读取行数 Rows = Tbarcode51.get_CountRows(); #endif #endif ofstream *pStream = gLogMgr->GetDebugOfstream(); (*pStream)<<"[Rows] = "<1) { endX = startX + Rows*ModuleSize; endY = startY + Rows*ModuleSize; } int ColCnt = 0; int Pos1 = startX; int Pos2 = startX; int CurY = startY; //生成一个空行,方便生成轮廓 CreatSpaceLine(ModuleVec,Rows+2); for(int i = 0;i vec; ModuleVec.push_back(vec); int size = ModuleVec.size(); AnlalysisOneRow(ModuleVec[size-1],startX,endX,CurY,ModuleSize); CurY += ModuleSize; } //生成一个空行,方便生成轮廓 CreatSpaceLine(ModuleVec,Rows+2); return !ModuleVec.empty(); } //生成一个空行,方便生成轮廓 void CObjBarCode::CreatSpaceLine(vector> &ModuleVec,int cnt) { vector vec; ModuleVec.push_back(vec); int size = ModuleVec.size(); for(int i=0;i &vec,int startX,int endX,int curY,int ModuleSize) { ofstream *pStream = gLogMgr->GetDebugOfstream(); HDC hdc = GetCurViewPtr()->GetHDC(); COLORREF Pixelcolor;//像素点的颜色 CBarCodeModule ModuleSpace(false); vec.push_back(ModuleSpace); for(int i = startX;i> &ModuleVec,CObjContainer &ObjContainer) { if(ModuleVec.empty()) return; //垂直方向-------------------------------------------------------------------------------------------------------------------- int MaxCol = ModuleVec[0].size(); int MaxRow = ModuleVec.size(); for(int Col=1;ColAddDataPoint(DataPoint1); CDataPoint DataPoint2(pt2); Pline->AddDataPoint(DataPoint2); ObjContainer.AddObject(Pline); Start = -1; End = -1; flg = false; } } } //水平方向-------------------------------------------------------------------------------------------------------------------- for(int Row=1;RowAddDataPoint(DataPoint1); CDataPoint DataPoint2(pt2); Pline->AddDataPoint(DataPoint2); ObjContainer.AddObject(Pline); Start = -1; End = -1; flg = false; } } } } #endif