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.
57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
#include "StdAfx.h"
|
|
#include ".\itemtrimcurve.h"
|
|
#include "SigmaDoc.h"
|
|
#include "SigmaView.h"
|
|
#include ".\itemsolid.h"
|
|
|
|
CItemTrimCurve::CItemTrimCurve(CSigmaDoc* ppDoc)
|
|
: CItemBreakCurve(ppDoc)
|
|
{
|
|
m_nActionID=ID_EDIT_TOOL_TRIM_CURVE;
|
|
this->SetType(ITEM_TRIM_CURVE);
|
|
m_bRange=TRUE;
|
|
m_bAutoDelete=FALSE;
|
|
}
|
|
|
|
CItemTrimCurve::~CItemTrimCurve(void)
|
|
{
|
|
}
|
|
|
|
void CItemTrimCurve::DoLButtonUp(CDC *pDC)
|
|
{
|
|
ProcessLButtonUp();
|
|
|
|
CItemBreakCurve::DoLButtonUp(pDC);
|
|
}
|
|
|
|
int CItemTrimCurve::ProcessCurve(CCurveEx* pCurve, COne* pOne, CPoint2D* pPoint)
|
|
{
|
|
//¼ôÇÐÇúÏß
|
|
if(pPoint==NULL) return 0;
|
|
CCurveEx* pTrimCurve=(CCurveEx*)pOne->GetValue();
|
|
CCrossList list;
|
|
pCurve->Cross(*(CCurve*)pTrimCurve, list);
|
|
if(list.GetCount()==0) return 0;
|
|
SortLocation(list,1);
|
|
|
|
CCrossPoint cp=CItemSolid::GetNearestCrossPoint(list,*pPoint);
|
|
double l=1e100; pTrimCurve->PointDistance(pPoint->x0,pPoint->y0,l);
|
|
double zero=1e-300;
|
|
if(pTrimCurve->l[pTrimCurve->num-1]>pTrimCurve->l[0])
|
|
{
|
|
if(l>cp.x[1])
|
|
pTrimCurve->GetCurve(pTrimCurve->l[0],cp.x[1]-zero,PointList);
|
|
else
|
|
pTrimCurve->GetCurve(cp.x[1]-zero,pTrimCurve->l[pTrimCurve->num-1]-zero,PointList);
|
|
}
|
|
else
|
|
{
|
|
if(l>cp.x[1])
|
|
pTrimCurve->GetCurve(cp.x[1]-zero,pTrimCurve->l[pTrimCurve->num-1]-zero,PointList);
|
|
else
|
|
pTrimCurve->GetCurve(pTrimCurve->l[0],cp.x[1]-zero,PointList);
|
|
}
|
|
AddCurve(pOne);
|
|
return 1;
|
|
}
|