You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.2 KiB
C++

#include "stdafx.h"
#include <gdiplus.h>
#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);
}