【MSCE C#】交点

老师好,现在有个T型2两路线,我现在对其中一条路线进行偏移,求偏移后的路线和另外一条路线的交点时候,没有求出来,但是我绘制出来,发现有交点的,这是怎么回事呢?代码如下:

 public void OffRoad(Element main,Element sub)
        {
            //求两个路线相交点
            DPoint3d mixPoint = GetPoint(main, sub);

            DPoint3d GetMixPoint = new DPoint3d();

            ConsensusConnectionEdit skon = ConsensusConnectionEdit.GetActive();

            skon.StartTransientMode();

            //获取路线信息
            Alignment al = Alignment.CreateFromElement(m_con, main);
            Alignment all = Alignment.CreateFromElement(m_con, sub);

            //求交点在主路线上的桩号
            LinearPoint mixmainPoint = al.LinearGeometry.ProjectPointOnPerpendicular(mixPoint);

            double mixStation = mixmainPoint.DistanceAlong;//获取交点在主路线上的桩号

            double offmainvalue = 1;
            double offsubvalue = 1;

          
            //对主路线进行偏移
            LinearElement OffMainElement = al.LinearGeometry.GetOffsetElement(offmainvalue);//对整个主路偏移

            LinearElement OffSubElement = all.LinearGeometry.GetOffsetElement(offsubvalue);//对整个辅路偏移

            CurveVector Geometry = all.Geometry;//将辅路路线转化为几何线性

            CurveVector OffMainCurver = OffMainElement.GetCurveVector();//将主路线偏移之后的路线转化为几何线性

            //判断偏移后的线是否相交
            GetMixPoint = GetPointCurver(Geometry, OffMainCurver);
           
            if (GetMixPoint.X == 0 && GetMixPoint.Y == 0)//没有交点的话
            {
                OffMainElement = al.LinearGeometry.GetOffsetElement(-offmainvalue);//这个主路偏移是为了确定偏移方向
            }
            ////求偏移之后主路线与偏移后的辅路交点并求桩号        
            //CurveVector offSubCurver = OffSubElement.GetCurveVector();

            //DPoint3d mix1 = GetPointCurver(OffMainCurver, offSubCurver);

            skon.PersistTransients();

        }
 public DPoint3d GetPointCurver(CurveVector curVec1, CurveVector curVec2)
        {
            double fractionA;
            double fractionB;
            DPoint3d pointB;
            DPoint3d pointA;
            //string msgStr = "";
            //求两元素交点
            DPoint3d fixedPointcurver = new DPoint3d();

            CurveVector intersectionA = CurveVector.Create(CurveVector.BoundaryType.Open);

            CurveVector intersectionB = CurveVector.Create(CurveVector.BoundaryType.Open);

            CurveCurve.IntersectionsXY(intersectionA, intersectionB, curVec1, curVec2);

            for (uint j = 0; j < intersectionA.Count; j++)
            {
                CurveCurve.IsSinglePointPair(intersectionA, intersectionB, j, out fractionA, out pointA, out fractionB, out pointB);
                fixedPointcurver = pointA;

                //msgStr += string.Format("point[{0}] = ({1:F2}, {2:F2})\n", j, fixedPoint.X, fixedPoint.Y);
                //MessageCenter.Instance.ShowInfoMessage(msgStr, msgStr, true);
            }
            return fixedPointcurver;
        }
     
,谢谢老师帮忙指导

  • 试试下面的代码:

                CurveVector cveVcr1 = CurvePathQuery.ElementToCurveVector(ele1);
                CurveVector cveVcr2 = CurvePathQuery.ElementToCurveVector(ele2);
                CurveVector cveVcrInter1 = CurveVector.Create(CurveVector.BoundaryType.None), cveVcrInter2 = CurveVector.Create(CurveVector.BoundaryType.None);
                CurveCurve.IntersectionsXY(cveVcrInter1, cveVcrInter2, cveVcr1, cveVcr2);
                DPoint3d pt = new DPoint3d();
                cveVcrInter1.GetStartPoint(out pt);