//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TGGeCurveSegunique 类 // = Version : ver2.0 // = Author : wlw // = CreateDate : 2002-09-09 // = Description: TGGeCurveSegunique 定义 // = Maintainers: // //-----------------------------------------------------------------------------+ #include "StdAfx.h" #include "TGGeCurveSegunique.h" #include "TchGlobalCurveFunc.h" #include "TGGeCurveInline.h" ads_real TGGeCurveSegunique::minLen = 100.0; TDPtrList TGGeCurveSegunique::GlobalCurveList; TGGeCurveSegunique::TGGeCurveSegunique(const TGGeCurveSegment &seg) : TGGeCurveSegment(seg), segments(seg.GetStartPoint(), seg.GetEndPoint(), seg.GetBulge()) { SetLineFlag(LS_FINITE); } TGGeCurveSegunique::~TGGeCurveSegunique() { } void TGGeCurveSegunique::DivideToSegments() { TADSGePoint3d &ptHead = *segments.Head(); TADSGePoint3d &ptTail = *segments.Tail(); TADSGePoint3d ptNewHead = ptHead, ptNewTail = ptTail; int bHeadOnOtherCurve = 0, bTailOnOtherCurve = 0; for (int i = 0; i < TGGeCurveSegunique::GlobalCurveList.Length(); i++) { TGGeCurveSegunique *pSeg = TGGeCurveSegunique::GlobalCurveList[i]; if (this == pSeg) { continue; } TGGeCurveSegment &ln = *pSeg; // 判断当前线的端点是否位于其他线上 int nPrFlagHead = ptHead & ln; int nPrFlagTail = ptTail & ln; if (nPrFlagHead == PR_INSIDE || nPrFlagHead == PR_ONPT1 || nPrFlagHead == PR_ONPT2) { bHeadOnOtherCurve = 1; } if (nPrFlagTail == PR_INSIDE || nPrFlagTail == PR_ONPT1 || nPrFlagTail == PR_ONPT2) { bTailOnOtherCurve = 1; } TADSGePoint3d inPt[2]; int num = 0; { num=Intersection(ln, inPt[0], inPt[1]); } for (int n = 0; n < num; n++) { int ins = 0; if (ads_distance(ptHead,inPt[n]) < minLen) { if (!bHeadOnOtherCurve) { ptNewHead = inPt[n]; } } else if (ads_distance(ptTail,inPt[n]) < minLen) { if (!bTailOnOtherCurve) { ptNewTail = inPt[n]; } } else { ins = 1; //交点位于中间 } if (ins) { segments.Insert(inPt[n]); } } } if (!Is(CURVE_CIRCLE)) { if (!bHeadOnOtherCurve) { ptHead = ptNewHead; } if (!bTailOnOtherCurve) { ptTail = ptNewTail; } } }