//расчитать расстояние до коробки от полилинии с помощью API AutoCAD private double DistanceFromPolyToTxtBox(Polyline poly, TextPosition txtPos) { Point2d maxPt = new Point2d(txtPos.Envelope.MaxX, txtPos.Envelope.MaxY); Point2d minPt = new Point2d(txtPos.Envelope.MinX, txtPos.Envelope.MinY); //хотябы одна точка полилинии находится внутри коробки? (возможен случай когда вся полилиния внутри коробки) for (int i = 0; i < poly.NumberOfVertices; i++) { if (Utils.PointInsideBoundingBox(maxPt, minPt, poly.GetPoint2dAt(i))) { return(0); } } Curve3d polyGeCurve = poly.GetGeCurve(); //полилиния пересекает коробку? ЭТО ИЗЛИШНЕ //CurveCurveIntersector3d intersector = new CurveCurveIntersector3d(polyGeCurve, txtPos.BoxCurve, Vector3d.ZAxis); //if (intersector.NumberOfIntersectionPoints>0) //{ // return 0; //} //тогда найти расстояние между кривыми return(polyGeCurve.GetDistanceTo(txtPos.BoxCurve)); }
private double DistanceFromPolyToTxtBox(Polyline poly, TextPosition txtPos) { Point2d maxPt = new Point2d(txtPos.Envelope.MaxX, txtPos.Envelope.MaxY); Point2d minPt = new Point2d(txtPos.Envelope.MinX, txtPos.Envelope.MinY); //хотябы одна точка полилинии находится внутри коробки? (возможен случай когда вся полилиния внутри коробки) for (int i = 0; i < poly.NumberOfVertices; i++) { if (Utils.PointInsideBoundingBox(maxPt, minPt, poly.GetPoint2dAt(i))) { return(0); } } Curve3d polyGeCurve = poly.GetGeCurve(); //тогда найти расстояние между кривыми return(polyGeCurve.GetDistanceTo(txtPos.BoxCurve)); }