public static bool IntersectBL(BCurve bcurve, LCurve lrs, ListInfoInters linters) { if (lrs.IsDegen) { throw new ExceptionGMath("Intersect", "IntersectBL", null); //return false; } BCurve bred = bcurve.Reduced; int numIntersBefore = linters.Count; object[] pars = { bred, lrs, linters }; Type[] types = { pars[0].GetType(), typeof(LCurve), typeof(ListInfoInters) }; MethodInfo infoMethod = typeof(Inters).GetMethod("AuxIntersectBL", types); bool res; try { res = (bool)infoMethod.Invoke(null, pars); } catch (System.Reflection.TargetInvocationException TIException) { throw TIException.InnerException; } if ((object)bred != (object)bcurve) { linters.ParamFromReduced(bcurve, 0, numIntersBefore); } return(res); }
public static bool IntersectBL(BCurve bcurve, LCurve lrs, ListInfoInters linters) { if (lrs.IsDegen) { throw new ExceptionGMath("Intersect","IntersectBL",null); //return false; } BCurve bred = bcurve.Reduced; int numIntersBefore=linters.Count; object[] pars={bred,lrs,linters}; Type[] types={pars[0].GetType(),typeof(LCurve),typeof(ListInfoInters)}; MethodInfo infoMethod=typeof(Inters).GetMethod("AuxIntersectBL",types); bool res; try { res=(bool)infoMethod.Invoke(null,pars); } catch(System.Reflection.TargetInvocationException TIException) { throw TIException.InnerException; } if ((object)bred!=(object)bcurve) { linters.ParamFromReduced(bcurve,0,numIntersBefore); } return res; }
public static bool IntersectBB(BCurve curveA, BCurve curveB, InfoConnect icAB, InfoConnect icBA, ListInfoInters linters) { BoxD bboxA = curveA.BBox; BoxD bboxB = curveB.BBox; if (!bboxA.HasInters(bboxB)) { return(true); } int numIntersBefore = linters.Count; bool connectAB = (icAB != null) && (icAB.IsConnect); bool connectBA = (icBA != null) && (icBA.IsConnect); bool toReverseByConnection = (connectBA) && (!connectAB); if (toReverseByConnection) { if (!Inters.IntersectBB(curveB, curveA, icBA, icAB, linters)) { return(false); } linters.ParamSwap(numIntersBefore); return(false); } BCurve redA = curveA.Reduced; BCurve redB = curveB.Reduced; bool toReverseByComplexity = (redA.BComplexity > redB.BComplexity); object[] pars = { redA, redB, icAB, icBA, linters }; if (toReverseByComplexity) { // TODO: check !!! // TODO: what happens with connection info ??? pars[0] = redB.Reversed; pars[1] = redA.Reversed; } Type[] types = { pars[0].GetType(), pars[1].GetType(), typeof(InfoConnect), typeof(InfoConnect), typeof(ListInfoInters) }; MethodInfo infoMethod = typeof(Inters).GetMethod("AuxIntersectBB", types); bool res; try { res = (bool)infoMethod.Invoke(null, pars); } catch (System.Reflection.TargetInvocationException TIException) { throw TIException.InnerException; } if (toReverseByComplexity) { linters.ParamReverse(1, 0, numIntersBefore); linters.ParamReverse(1, 1, numIntersBefore); linters.ParamSwap(numIntersBefore); } if ((object)redA != (object)curveA) { linters.ParamFromReduced(curveA, 0, numIntersBefore); } if ((object)redB != (object)curveB) { linters.ParamFromReduced(curveB, 1, numIntersBefore); } // clean-up end-point intersections linters.CleanEndPointInters(connectAB, connectBA, numIntersBefore); return(res); }
public static bool IntersectBB(BCurve curveA, BCurve curveB, InfoConnect icAB, InfoConnect icBA, ListInfoInters linters) { BoxD bboxA=curveA.BBox; BoxD bboxB=curveB.BBox; if (!bboxA.HasInters(bboxB)) return true; int numIntersBefore=linters.Count; bool connectAB=(icAB!=null)&&(icAB.IsConnect); bool connectBA=(icBA!=null)&&(icBA.IsConnect); bool toReverseByConnection=(connectBA)&&(!connectAB); if (toReverseByConnection) { if (!Inters.IntersectBB(curveB,curveA,icBA,icAB,linters)) return false; linters.ParamSwap(numIntersBefore); return false; } BCurve redA = curveA.Reduced; BCurve redB = curveB.Reduced; bool toReverseByComplexity=(redA.BComplexity>redB.BComplexity); object[] pars={redA,redB,icAB,icBA,linters}; if (toReverseByComplexity) { // TODO: check !!! // TODO: what happens with connection info ??? pars[0]=redB.Reversed; pars[1]=redA.Reversed; } Type[] types={pars[0].GetType(),pars[1].GetType(), typeof(InfoConnect),typeof(InfoConnect),typeof(ListInfoInters)}; MethodInfo infoMethod=typeof(Inters).GetMethod("AuxIntersectBB",types); bool res; try { res=(bool)infoMethod.Invoke(null,pars); } catch(System.Reflection.TargetInvocationException TIException) { throw TIException.InnerException; } if (toReverseByComplexity) { linters.ParamReverse(1,0,numIntersBefore); linters.ParamReverse(1,1,numIntersBefore); linters.ParamSwap(numIntersBefore); } if ((object)redA!=(object)curveA) { linters.ParamFromReduced(curveA,0,numIntersBefore); } if ((object)redB!=(object)curveB) { linters.ParamFromReduced(curveB,1,numIntersBefore); } // clean-up end-point intersections linters.CleanEndPointInters(connectAB,connectBA,numIntersBefore); return res; }