//расчитать расстояние до коробки от полилинии с помощью 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));
            }
Ejemplo n.º 2
0
                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));
                }