#include "StdAfx.h" #include "ImpDrawGeneralSection.h" #include "shs_outdoor.h" #include "dbelipse.h" #include "DataContainer.h" #include "DrawSectionSymbol.h" extern double GetPipeOutDByDn(int nMaterial, double dDn); CImpDrawGeneralSection::CImpDrawGeneralSection() { m_dRoadMidEle = 0.0; m_dScaleX = 1.0; m_dScaleY = 1.0; } bool CImpDrawGeneralSection::DrawSection() { PickSet ssNew(SS_FREE); ssNew.IncludeBegin(); CDataContainer* mapData = new CDataContainer(); mapData->SetData(_T("Type"), 0); mapData->SetData(_T("CutS"), m_ptS); mapData->SetData(_T("CutE"), m_ptE); mapData->SetData(_T("vtView"), m_vt); mapData->SetData(_T("RoadEle"), m_dRoadMidEle); mapData->SetData(_T("Number"), m_strNumber); mapData->SetData(_T("ScaleX"), m_dScaleX); mapData->SetData(_T("ScaleY"), m_dScaleY); mapData->SetData(_T("RoadEld"), m_dRoadMidEle); CDrawSectionSymbol draw; draw.SetDataContainer(mapData); AcDbPolyline *pOutLine = NULL; AcDbVoidPtrArray arSplitLine, arSubPtr; draw.DrawRoadway(pOutLine, arSplitLine, arSubPtr, false); if (pOutLine != NULL) { AddToCurrentSpace(pOutLine, Adesk::kTrue); } for (int i = 0; i < arSplitLine.length(); i++) { AcDbEntity *pEnt = (AcDbEntity *)arSplitLine.at(i); if (pEnt != NULL) { AddToCurrentSpace(pEnt, Adesk::kTrue); } } for (i = 0; i < arSubPtr.length(); i++) { AcDbEntity *pEnt = (AcDbEntity *)arSubPtr.at(i); if (pEnt != NULL) { AddToCurrentSpace(pEnt, Adesk::kTrue); } } std::vector::iterator it; for (it = m_idVecPipe.begin(); it != m_idVecPipe.end(); it++) { AcDbEntity *pEnt = NULL; draw.DrawPipe(*it, pEnt); if (pEnt != NULL) { AddToCurrentSpace(pEnt, Adesk::kTrue); } } AcDbVoidPtrArray arPtr; draw.DrawRoadDist(arPtr); for (i = 0; i < arPtr.length(); i++) { AcDbEntity *pEnt = (AcDbEntity *)arPtr.at(i); if (pEnt != NULL) { AddToCurrentSpace(pEnt, Adesk::kTrue); } } ssNew.IncludeEnd(); XPoint ptIns; double x,y,z; ssNew.Redraw(2); ssNew.GetExtend(ptIns, &x, &y, &z); ptIns = Wcs2Ucs(ptIns); ptIns.z = 0; XPoint xp; int nRet = DragMovePickSet(ssNew, _T("\n请点取系统图位置<退出>: "), ptIns, xp); if(nRet != RTNORM) { ssNew.Erase(); return false; } ssNew.Redraw(1); acedUpdateDisplay(); actrTransactionManager->flushGraphics(); //acad 刷新 return true; }