Thứ Năm, 19 tháng 12, 2024

Gộp block thành nhóm theo khoảng cách | Group blocks by distance in AutoCAD | Lập trình 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: 👉👉👉

Code nhóm C# 

1 Thêm class

Code:
public static List<List<BlockReference>> GroupByDist(ref List<BlockReference> brs, double distance)
        {
            var brss = new List<List<BlockReference>>();

            var bsdrawn = new List<BlockReference>();
            foreach (var br in brs)
            {
                if (bsdrawn.Contains(br))
                    continue;

                var matchbrs = new List<BlockReference>() { br };

                var bs = brs.Except(bsdrawn).Where(x => matchbrs.Any(x1 => x.Position.DistanceTo(x1.Position) < distance)).ToList();
                while (bs.Count > 0)
                {
                    matchbrs.AddRange(bs);
                    bsdrawn.AddRange(bs);

                    bs = brs.Except(bsdrawn).Where(x => matchbrs.Any(x1 => x.Position.DistanceTo(x1.Position) < distance)).ToList();
                }

                brss.Add(matchbrs);
            }

            brs = brs.Except(bsdrawn).ToList();

            return brss;
        }



Code nhóm VB 

1 Thêm class

Code:
        <Extension>
        Public Function GroupByDist(ByRef brs As List(Of BlockReference), ByVal distance As Double) As List(Of List(Of BlockReference))
            Dim brss = New List(Of List(Of BlockReference))

            Dim bsdrawn = New List(Of BlockReference)
            For Each br In brs
                If bsdrawn.Contains(br) Then Continue For

                Dim matchbrs = New List(Of BlockReference) From {br}

                Dim bs = brs.Except(bsdrawn).Where(Function(x) matchbrs.Any(Function(x1) x.Position.DistanceTo(x1.Position) < distance)).ToList()
                Do While bs.Count > 0
                    matchbrs.Add(bs)
                    bsdrawn.AddRange(bs)

                    bs = brs.Except(bsdrawn).Where(Function(x) matchbrs.Any(Function(x1) x.Position.DistanceTo(x1.Position) < distance)).ToList()
                Loop

                brss.Add(matchbrs)
            Next

            brs = brs.Except(bsdrawn).ToList()

            Return brss
        End Function

Link solution



Nhóm AutoCAD dotNet


Link tham gia nhóm Zalo: http://dnz.lisp.vn


---------------------------------------------------------------------------------------------
Ứ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

Tìm dimstyle textstyle blockdef trong Database | Search Dimstyle Textstyle BlockTableRecord in AutoCAD dotNet | Lập trình 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: 👉👉👉