22/03/2026

Thuật toán kiểm tra 2 Polyline chồng nhau overlap | Vẽ đường Connector trong AutoCAD | AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản
   

Thông tin thêm: 👉👉👉

IsOverlapOn

Kiểm tra 2 đối tượng có đoạn chồng lên nhau hay không



1 Thêm class IsOverlapOn.lsp

Lưu mã sau dưới dạng tệp tin IsOverlapOn.lsp
Code:
public static bool IsOverlapOn(this Polyline pl1, Polyline pl2, double tolerance = 1e-6)
{
    Tolerance tol = new Tolerance(tolerance, tolerance);

    // Duyệt qua các đoạn của Polyline 1
    for (int i = 0; i < pl1.NumberOfVertices - 1; i++)
    {
        var seg1 = pl1.GetLineSegment2dAt(i);

        // Duyệt qua các đoạn của Polyline 2
        for (int j = 0; j < pl2.NumberOfVertices - 1; j++)
        {
            var seg2 = pl2.GetLineSegment2dAt(j);

            // Kiểm tra chồng lấn
            // Trả về một LineSegment3d nếu có phần chung, nếu không trả về null
            var overlap = seg1.Overlap(seg2, tol);

            if (overlap != null)
            {
                // Nếu độ dài phần chồng lấn lớn hơn sai số, xác nhận có chồng lấn
                if (overlap.StartPoint.GetDistanceTo(overlap.EndPoint) > tolerance)
                {
                    return true;
                }
            }
        }
    }
    return false;
}



Ứng dụng Vẽ đường Connector


1 Thêm class IsOverlapOn.lsp

Lưu mã sau dưới dạng tệp tin IsOverlapOn.lsp
Code:
public static Polyline CreateConnector(this Curve oldcv, Curve newcv)
{
    Polyline pl = null;

    var pts0 = new List<Point3d>() { oldcv.TopCenter(), oldcv.BottomCenter(), oldcv.MiddleLeft(), oldcv.MiddleRight() };
    var pts = new List<Point3d>() { newcv.TopCenter(), newcv.BottomCenter(), newcv.MiddleLeft(), newcv.MiddleRight() };

    var pfar = oldcv.MiddleCenter().Far(pts);

    var p1 = pfar.Near(pts0);
    var p2 = p1.Near(pts);

    if (p1.Dist2d(p2) > 1e-3)
    {
        var type1 = p1.Dist2d(oldcv.TopCenter()) < 1e-3 || p1.Dist2d(oldcv.BottomCenter()) < 1e-3;
        var type2 = p2.Dist2d(newcv.TopCenter()) < 1e-3 || p2.Dist2d(newcv.BottomCenter()) < 1e-3;

        if (type1 == type2)
        {
            pl = Curves.FromVertexs(CreateConnector(p1, p2));
            if (pl.IsOverlapOn(newcv) || pl.IsOverlapOn(oldcv))
                pl = Curves.FromVertexs(CreateConnector(p2, p1));
        }
        else
        {
            pl = Curves.FromVertexs(p1, new Point3d(p1.X, p2.Y, 0), p2);
            if (pl.IsOverlapOn(newcv) || pl.IsOverlapOn(oldcv))
                pl = Curves.FromVertexs(p1, new Point3d(p2.X, p1.Y, 0), p2);
        }
    }

    return pl;
}


Link tải (MediaFire)

📥 https://www.mediafire.com/



---------------------------------------------------------------------------------------------
Ứng dụng được phát triển bởi đội ngũ AutoLISP Thật là đơn giản - Tác giả ứng dụng in D2P

    

Mọi thông tin xin liên hệ Fanpage AutoLISP Thật là đơn giản!
Cảm ơn bạn đã theo dõi!

Không có nhận xét nào:

Đăng nhận xét

Thuật toán kiểm tra 2 Polyline chồng nhau overlap | Vẽ đường Connector trong AutoCAD | AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản     Thông tin thêm: 👉👉👉