AutoCAD C# 读取Hatch边界

本文介绍了一种从AutoCAD的图案填充对象中提取边界的C#实现方法。该方法通过遍历填充对象的所有边界环,收集构成边界的点和曲线,并将其转换为闭合的Polyline对象,最终将这些Polyline对象保存到数据库的模型空间中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        /// 填充边界提取转化方法
        /// </summary>
        /// <param name="hat">需要转化的Hatch对象</param>
        /// <param name="trans">声明的事务对象</param>
        /// <param name="btr">数据库中的模型空间</param>
        public static void DrawBorder(Hatch hatch, Transaction trans, BlockTableRecord btr)
        {
            //取得边界数
            Point2dCollection col_point2d = new Point2dCollection();
            Curve2dCollection col_cur2d = new Curve2dCollection();
            
            // i=0 时 是外轮廓线,其他为内轮廓线
            for (int i = 0; i < hatch.NumberOfLoops; i++)
            {
                col_point2d.Clear();
                HatchLoop hatLoop = null;
                try
                {
                    hatLoop = hatch.GetLoopAt(i);
                }
                catch (System.Exception ex)
                {
                    continue;
                }

                col_cur2d = hatLoop.Curves;
                foreach (Curve2d curve2d in col_cur2d)
                {
                    // 曲线分成多少段
                    int numSample = 2;
                    if (curve2d.GetType().Name != "LineSegment2d")  
                    {
                        // 如果不是直线,则计算需要制造多少段

                        // 获取曲线的间隔(上、下界)
                        Interval interval = curve2d.GetInterval();   
                        double curveLength = curve2d.GetLength(interval.LowerBound, interval.UpperBound);
                        numSample = (int)(curveLength / 0.1);
                        if (numSample < 36)
                        {
                            numSample = 36;
                        }

                        if (numSample > 360)
                        {
                            numSample = 360;
                        }
                    }

                    Point2d[] M_point2d = curve2d.GetSamplePoints(numSample);
                    foreach (Point2d point in M_point2d)
                    {
                        if (!col_point2d.Contains(point))
                            col_point2d.Add(point);
                    }
                }
                // 根据获得的Point2d点集创建闭合Polyline
                Polyline polyline = new Polyline();
                polyline.Closed = true;
                polyline.Color = hatch.Color;
                CreatePolyline(polyline, col_point2d);
                btr.AppendEntity(polyline);
                trans.AddNewlyCreatedDBObject(polyline, true);
            }
        }

        public static void CreatePolyline(Polyline polylineResult , Point2dCollection col_point2d)
        {
            for (int i = 0; i < col_point2d.Count; i++)
            {
                Point2d point = col_point2d[i];
                polylineResult.AddVertexAt(polylineResult.NumberOfVertices, point, 0, 0, 0);
            }
        }

参考来源:

C#CAD二次开发图案填充对象边界提取_北辰之北灬的博客-优快云博客

AutoCAD_C#Net获取图案填充的边界线.docx_c#dxfsolid边界-C#代码类资源-优快云下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值