private static void MoveCurrCurveAndExtend(ref Curve currCurve, Curve preCurve, double distance) { //先把第二条直线移动到和前一条直线共线 XYZ dir = currCurve.GetNormalInXoy(preCurve.GetEndPoint(0)); currCurve = currCurve.CreateTransformed(Transform.CreateTranslation(dir * distance)); var pts = CurveUtils.ComputeClosestEndPoints(preCurve, currCurve); if (!pts[0].IsAlmostEqualTo(pts[1])) { var starPoint = pts[0]; var endPoint = currCurve.GetEndPoint(1); Curve currTemp = currCurve.Clone(); currTemp.MakeUnbound(); IntersectionResult intersectionResult; intersectionResult = currTemp.Project(starPoint); double start = intersectionResult.Parameter; intersectionResult = currTemp.Project(endPoint); double end = intersectionResult.Parameter; currTemp.MakeBound(start, end); currCurve = currTemp.Clone(); } }
private static bool DealWithCurrTwoCurvres(ref Curve currCurve, ref Curve preCurve, out Line tempLine, double tolerance) { bool isMovedCurrCurve = false; tempLine = null; if (preCurve.GetEndPoint(1).IsAlmostEqualTo(currCurve.GetEndPoint(0))) {//首尾相连,不需要处理 } else {//需要处理 bool isParallel = CurveUtils.IsAlmostParallelToByAngle(preCurve, currCurve); if (isParallel) {//平行,求距离,距离小于300mm,将第二条直线移动到第一条直线的延长线上;否则直接相连 double distance = preCurve.DistanceTo(currCurve); if (distance <= tolerance /*&& distance > 1e-6*/) { isMovedCurrCurve = true; MoveCurrCurveAndExtend(ref currCurve, preCurve, distance); } else { //直接相连 var pts = CurveUtils.ComputeClosestEndPoints(preCurve, currCurve); if (!pts[0].IsAlmostEqualTo(pts[1])) { tempLine = Line.CreateBound(pts[0], pts[1]); } } } else {//不平行,延长两条线,求交点 ExtendTwoCurves(ref currCurve, ref preCurve); } } return(isMovedCurrCurve); }