#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; }