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++
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);
|
|
}
|
|
|