#include "stdafx.h" #include #include "SigmaDoc.h" static void GetCOnePath(COne* pOne, Gdiplus::GraphicsPath & pathOut, CSigmaDoc * pDoc); void PathTool_GetPath(POSITION pos, Gdiplus::GraphicsPath & pathOut, CSigmaDoc * pDoc) { if (pos == NULL || pDoc == NULL) return; COne* pOne = (COne*)pDoc->GetDraw()->GetAt(pos); GetCOnePath(pOne, pathOut, pDoc); } static void LoadCurvePath(Gdiplus::GraphicsPath& path, CCurveEx* pc, CSigmaDoc * pDoc) { //(164,141),(296,141),(296,189),(164,189),(164,141) if (pc == NULL) return; Gdiplus::Point * pt = new Gdiplus::Point[pc->num]; CPoint point; for (int i = 0; i < pc->num; i++) { point = pDoc->GetDC().GetScreen(pc->x[i], pc->y[i]); pt[i].X = point.x; pt[i].Y = point.y; } path.AddCurve(pt, pc->num, 0); delete[] pt; } //获得选择集中的所有曲线。将曲线的 static void LoadRectPath(Gdiplus::GraphicsPath& path, CRect8 rect, CSigmaDoc * pDoc) { CCurveEx* pCurve = new CCurveEx(5); pCurve->CreateCurveFromRect(&rect); LoadCurvePath(path, pCurve, pDoc); delete pCurve; } static void GetCOnePath(COne* pOne, Gdiplus::GraphicsPath & pathOut, CSigmaDoc * pDoc) { if (pOne == NULL) return; //Gdiplus::GraphicsPath path; //path.Reset(); switch (pOne->GetType()) { case DOUBLEFOX_CURVE: LoadCurvePath(pathOut, (CCurveEx*)pOne->GetValue(), pDoc); break; case DOUBLEFOX_CIRCLE: case DOUBLEFOX_ELLIPSE: { //TODO:待修复 //CEllipse* pCircle = (CEllipse*)pOne->GetValue(); //CRect8 range = pOne->GetRect(); //CRect rt = GetDC()->GetScreen(range); rt.NormalizeRect(); //pathOut.AddEllipse(rt.left, rt.top, rt.Width(), rt.Height()); } break; case DOUBLEFOX_FRAME: { NBase::CRect8 posRect = pOne->GetRect(); posRect.NormalizeRect(); LoadRectPath(pathOut, posRect, pDoc); } break; case DOUBLEFOX_ARC: LoadCurvePath(pathOut, ((CArc*)pOne->GetValue())->GetCurve(), pDoc); break; case DOUBLEFOX_XYZ: case DOUBLEFOX_POINT: { NBase::CRect8 posRect = pOne->GetRect(); LoadRectPath(pathOut, posRect, pDoc); } break; default: { NBase::CRect8 posRect = pOne->GetRect(); LoadRectPath(pathOut, posRect, pDoc); } break; } //CClientDC dc(GetView()); //GetDoc()->GetTracker().AddPath(path); }