老师好,现在有个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);